Details
Description
Nested macros (BOO-1120) are very nice, however having to declare them 'inline' in the macro block can quickly become a mess (all nested macros defined in the same file) and does not permit extending an existing macro from an external assembly.
The following syntax would allow defining nested macros within parent macro block as well as outside (or even an external assembly) :
""" base nested nestedNestedExtension extensionNested < base nestedExtension nestedExtensionExtension < base """ macro base: macro nested: yield [| print "nested" |] yield yield [| print "base" |] yield macro base.nestedExtension: yield [| print "nestedExtension" |] yield macro base.nested.nestedNestedExtension: assert base.Name == "base" assert nested.Name == "nested" macro extensionNested: assert base.Name == "base" assert nested.Name == "nested" assert nestedNestedExtension.Name == "nestedNestedExtension" yield [| print "extensionNested ${$(base.Arguments[0])}" |] yield [| print "nestedNestedExtension" |] yield macro base.nestedExtension.nestedExtensionExtension: assert base.Name == "base" assert nestedExtension.Name == "nestedExtension" yield [| print "nestedExtensionExtension ${$(base.Arguments[0])}" |] base "< base": nested: nestedNestedExtension: extensionNested nestedExtension: nestedExtensionExtension
Initial support landed in rev. 3208 (extending internal macros with "macro grandParent.parent.me:" syntax works)