Document Whiskers.

This commit is contained in:
Alex Beregszaszi 2017-06-21 20:46:42 +01:00 committed by chriseth
parent cb7021881a
commit 1d4f40e3a2
2 changed files with 21 additions and 0 deletions

View File

@ -13,6 +13,8 @@ TODO: Write about how scoping rules of inline assembly are a bit different
and the complications that arise when for example using internal functions and the complications that arise when for example using internal functions
of libraries. Furthermore, write about the symbols defined by the compiler. of libraries. Furthermore, write about the symbols defined by the compiler.
.. _inline-assembly:
Inline Assembly Inline Assembly
=============== ===============

View File

@ -74,3 +74,22 @@ To run a subset of tests, filters can be used:
``soltest -t TestSuite/TestName -- --ipcpath /tmp/testeth/geth.ipc``, where ``TestName`` can be a wildcard ``*``. ``soltest -t TestSuite/TestName -- --ipcpath /tmp/testeth/geth.ipc``, where ``TestName`` can be a wildcard ``*``.
Alternatively, there is a testing script at ``scripts/test.sh`` which executes all tests. Alternatively, there is a testing script at ``scripts/test.sh`` which executes all tests.
Whiskers
========
*Whiskers* is a templating system similar to `Moustache <https://mustache.github.io>`_. It is used by the
compiler in various places to aid readability, and thus maintainability and verifiability, of the code.
The syntax comes with a substantial difference to Moustache: the template markers ``{{`` and ``}}`` are
replaced by ``<`` and ``>`` in order to aid parsing and avoid conflicts with :ref:`inline-assembly`
(The symbols ``<`` and ``>`` are invalid in inline assembly, while ``{`` and ``}`` are used to delimit blocks).
Another limitation is that lists are only resolved one depth and they will not recurse. This may change in the future.
A rough specification is the following:
Any occurrence of ``<name>`` is replaced by the string-value of the supplied variable ``name`` without any
escaping and without iterated replacements. An area can be delimited by ``<#name>...</name>``. It is replaced
by as many concatenations of its contents as there were sets of variables supplied to the template system,
each time replacing any ``<inner>`` items by their respective value. Top-level variales can also be used
inside such areas.