@@ -16,30 +16,32 @@ SystemLayer = "(system)", /// Predefined layer for internal data ValueLayer = "@value", /// Predefined layer for normal run MacroLayer = "@macro", /// Predefined layer for macro run (@lay() changes layer) RawMacroLayer = "(rawmacro)", /// Predefined layer for macro run (@lay() becomes AST) + AstLayer = "(ast)", /// Predefined layer for macro run (never invoke macro) } /// True if it is macro-like layer that basically generates syntax tree -bool isMacroishLayer( Layer lay ) +bool isASTLayer( Layer lay ) { - return lay==MacroLayer || lay==RawMacroLayer; + return lay==MacroLayer || lay==RawMacroLayer || lay==AstLayer; } unittest { - assert( !isMacroishLayer(SystemLayer) ); - assert( !isMacroishLayer(ValueLayer) ); - assert( isMacroishLayer(MacroLayer) ); - assert( isMacroishLayer(RawMacroLayer) ); + assert( !isASTLayer(SystemLayer) ); + assert( !isASTLayer(ValueLayer) ); + assert( isASTLayer(MacroLayer) ); + assert( isASTLayer(RawMacroLayer) ); + assert( isASTLayer(AstLayer) ); } /// True if in the specified layer @lay(...) has no effect and merely produces a syntax tree bool isNoLayerChangeLayer( Layer lay ) { - return lay==RawMacroLayer; + return lay==RawMacroLayer || lay==AstLayer; } unittest { @@ -46,5 +48,22 @@ assert( !isNoLayerChangeLayer(SystemLayer) ); assert( !isNoLayerChangeLayer(ValueLayer) ); assert( !isNoLayerChangeLayer(MacroLayer) ); assert( isNoLayerChangeLayer(RawMacroLayer) ); + assert( isNoLayerChangeLayer(AstLayer) ); +} + +/// True if do macro expanstion + +bool isMacroLayer( Layer lay ) +{ + return lay==MacroLayer || lay==RawMacroLayer; +} + +unittest +{ + assert( !isMacroLayer(SystemLayer) ); + assert( !isMacroLayer(ValueLayer) ); + assert( isMacroLayer(MacroLayer) ); + assert( isMacroLayer(RawMacroLayer) ); + assert( !isMacroLayer(AstLayer) ); }