Artifact 59dc790b72d21ee032d1d114b1aeed5a8975ff46
1 /**
2 * Authors: k.inaba
3 * License: NYSL 0.9982 http://www.kmonos.net/nysl/
4 *
5 * Definition of constants related to the layers.
6 */
7 module polemy.layer;
8 import polemy._common;
9
10 /// Type for the layer ID
11
12 alias string Layer;
13
14 enum : Layer
15 {
16 SystemLayer = "(system)", /// Predefined layer for internal data
17 ValueLayer = "@value", /// Predefined layer for normal run
18 MacroLayer = "@macro", /// Predefined layer for macro run (@lay() changes layer)
19 RawMacroLayer = "(rawmacro)", /// Predefined layer for macro run (@lay() becomes AST)
20 }
21
22 /// True if it is macro-like layer that basically generates syntax tree
23
24 bool isMacroishLayer( Layer lay )
25 {
26 return lay==MacroLayer || lay==RawMacroLayer;
27 }
28
29 unittest
30 {
31 assert( !isMacroishLayer(SystemLayer) );
32 assert( !isMacroishLayer(ValueLayer) );
33 assert( isMacroishLayer(MacroLayer) );
34 assert( isMacroishLayer(RawMacroLayer) );
35 }
36
37 /// True if in the specified layer @lay(...) has no effect and merely produces a syntax tree
38
39 bool isNoLayerChangeLayer( Layer lay )
40 {
41 return lay==RawMacroLayer;
42 }
43
44 unittest
45 {
46 assert( !isNoLayerChangeLayer(SystemLayer) );
47 assert( !isNoLayerChangeLayer(ValueLayer) );
48 assert( !isNoLayerChangeLayer(MacroLayer) );
49 assert( isNoLayerChangeLayer(RawMacroLayer) );
50 }