Index: llvm/trunk/docs/TableGen/LangIntro.rst =================================================================== --- llvm/trunk/docs/TableGen/LangIntro.rst +++ llvm/trunk/docs/TableGen/LangIntro.rst @@ -152,8 +152,8 @@ ``foreach = [ ] in `` Replicate or , replacing instances of with each value in . is scoped at the level of the ``foreach`` loop and must - not conflict with any other object introduced in or . Currently - only ``def``\s are expanded within . + not conflict with any other object introduced in or . Only + ``def``\s and ``defm``\s are expanded within . ``foreach = 0-15 in ...`` @@ -348,6 +348,23 @@ despite the fact that it derives (indirectly) from the ``C`` class, because the ``D`` class overrode its value. +References between variables in a record are substituted late, which gives +``let`` expressions unusual power. Consider this admittedly silly example: + +.. code-block:: text + + class A { + int Y = x; + int Yplus1 = !add(Y, 1); + int xplus1 = !add(x, 1); + } + def Z : A<5> { + let Y = 10; + } + +The value of ``Z.xplus1`` will be 6, but the value of ``Z.Yplus1`` is 11. Use +this power wisely. + .. _template arguments: Class template arguments Index: llvm/trunk/docs/TableGen/LangRef.rst =================================================================== --- llvm/trunk/docs/TableGen/LangRef.rst +++ llvm/trunk/docs/TableGen/LangRef.rst @@ -229,15 +229,17 @@ int Baz = Bar; } + Values defined in superclasses can be accessed the same way. + * a template arg of a ``class``, such as the use of ``Bar`` in:: class Foo { int Baz = Bar; } -* value local to a ``multiclass``, such as the use of ``Bar`` in:: +* value local to a ``class``, such as the use of ``Bar`` in:: - multiclass Foo { + class Foo { int Bar = 5; int Baz = Bar; } @@ -245,9 +247,16 @@ * a template arg to a ``multiclass``, such as the use of ``Bar`` in:: multiclass Foo { - int Baz = Bar; + def : SomeClass; } +* the iteration variable of a ``foreach``, such as the use of ``i`` in:: + + foreach i = 0-5 in + def Foo#i; + +* a variable defined by ``defset`` + * the implicit template argument ``NAME`` in a ``class`` or ``multiclass`` .. productionlist::