Artifact 70a85e9a66eddacd698f7a5f37a74d1c3a006dac
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 a user-defined layer
23
24 bool isUserDefinedLayer( Layer lay )
25 {
26 return lay!=SystemLayer && lay!=ValueLayer && lay!=MacroLayer && lay!=RawMacroLayer;
27 }
28
29 unittest
30 {
31 assert( !isUserDefinedLayer(SystemLayer) );
32 assert( !isUserDefinedLayer(ValueLayer) );
33 assert( !isUserDefinedLayer(MacroLayer) );
34 assert( !isUserDefinedLayer(RawMacroLayer) );
35 assert( isUserDefinedLayer("@foo") );
36 }
37
38 /// True if it is macro-like layer that basically generates syntax tree
39
40 bool isASTLayer( Layer lay )
41 {
42 return lay==MacroLayer || lay==RawMacroLayer;
43 }
44
45 unittest
46 {
47 assert( !isASTLayer(SystemLayer) );
48 assert( !isASTLayer(ValueLayer) );
49 assert( isASTLayer(MacroLayer) );
50 assert( isASTLayer(RawMacroLayer) );
51 }
52
53 /// True if in the specified layer @lay(...) has no effect and merely produces a syntax tree
54
55 bool isNoLayerChangeLayer( Layer lay )
56 {
57 return lay==RawMacroLayer;
58 }
59
60 unittest
61 {
62 assert( !isNoLayerChangeLayer(SystemLayer) );
63 assert( !isNoLayerChangeLayer(ValueLayer) );
64 assert( !isNoLayerChangeLayer(MacroLayer) );
65 assert( isNoLayerChangeLayer(RawMacroLayer) );
66 }
67
68 /// True if do macro expanstion
69
70 bool isMacroLayer( Layer lay )
71 {
72 return lay==MacroLayer || lay==RawMacroLayer;
73 }
74
75 unittest
76 {
77 assert( !isMacroLayer(SystemLayer) );
78 assert( !isMacroLayer(ValueLayer) );
79 assert( isMacroLayer(MacroLayer) );
80 assert( isMacroLayer(RawMacroLayer) );
81 }