Artifact 59dc790b72d21ee032d1d114b1aeed5a8975ff46:
0000: ef bb bf 2f 2a 2a 0d 0a 20 2a 20 41 75 74 68 6f .../**.. * Autho
0010: 72 73 3a 20 6b 2e 69 6e 61 62 61 0d 0a 20 2a 20 rs: k.inaba.. *
0020: 4c 69 63 65 6e 73 65 3a 20 4e 59 53 4c 20 30 2e License: NYSL 0.
0030: 39 39 38 32 20 68 74 74 70 3a 2f 2f 77 77 77 2e 9982 http://www.
0040: 6b 6d 6f 6e 6f 73 2e 6e 65 74 2f 6e 79 73 6c 2f kmonos.net/nysl/
0050: 0d 0a 20 2a 0d 0a 20 2a 20 44 65 66 69 6e 69 74 .. *.. * Definit
0060: 69 6f 6e 20 6f 66 20 63 6f 6e 73 74 61 6e 74 73 ion of constants
0070: 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20 related to the
0080: 6c 61 79 65 72 73 2e 0d 0a 20 2a 2f 0d 0a 6d 6f layers... */..mo
0090: 64 75 6c 65 20 70 6f 6c 65 6d 79 2e 6c 61 79 65 dule polemy.laye
00a0: 72 3b 0d 0a 69 6d 70 6f 72 74 20 70 6f 6c 65 6d r;..import polem
00b0: 79 2e 5f 63 6f 6d 6d 6f 6e 3b 0d 0a 0d 0a 2f 2f y._common;....//
00c0: 2f 20 54 79 70 65 20 66 6f 72 20 74 68 65 20 6c / Type for the l
00d0: 61 79 65 72 20 49 44 0d 0a 0d 0a 61 6c 69 61 73 ayer ID....alias
00e0: 20 73 74 72 69 6e 67 20 4c 61 79 65 72 3b 0d 0a string Layer;..
00f0: 0d 0a 65 6e 75 6d 20 3a 20 4c 61 79 65 72 0d 0a ..enum : Layer..
0100: 7b 0d 0a 09 53 79 73 74 65 6d 4c 61 79 65 72 20 {...SystemLayer
0110: 20 20 3d 20 22 28 73 79 73 74 65 6d 29 22 2c 20 = "(system)",
0120: 20 20 2f 2f 2f 20 50 72 65 64 65 66 69 6e 65 64 /// Predefined
0130: 20 6c 61 79 65 72 20 66 6f 72 20 69 6e 74 65 72 layer for inter
0140: 6e 61 6c 20 64 61 74 61 0d 0a 09 56 61 6c 75 65 nal data...Value
0150: 4c 61 79 65 72 20 20 20 20 3d 20 22 40 76 61 6c Layer = "@val
0160: 75 65 22 2c 20 20 20 20 20 2f 2f 2f 20 50 72 65 ue", /// Pre
0170: 64 65 66 69 6e 65 64 20 6c 61 79 65 72 20 66 6f defined layer fo
0180: 72 20 6e 6f 72 6d 61 6c 20 72 75 6e 0d 0a 09 4d r normal run...M
0190: 61 63 72 6f 4c 61 79 65 72 20 20 20 20 3d 20 22 acroLayer = "
01a0: 40 6d 61 63 72 6f 22 2c 20 20 20 20 20 2f 2f 2f @macro", ///
01b0: 20 50 72 65 64 65 66 69 6e 65 64 20 6c 61 79 65 Predefined laye
01c0: 72 20 66 6f 72 20 6d 61 63 72 6f 20 72 75 6e 20 r for macro run
01d0: 28 40 6c 61 79 28 29 20 63 68 61 6e 67 65 73 20 (@lay() changes
01e0: 6c 61 79 65 72 29 0d 0a 09 52 61 77 4d 61 63 72 layer)...RawMacr
01f0: 6f 4c 61 79 65 72 20 3d 20 22 28 72 61 77 6d 61 oLayer = "(rawma
0200: 63 72 6f 29 22 2c 20 2f 2f 2f 20 50 72 65 64 65 cro)", /// Prede
0210: 66 69 6e 65 64 20 6c 61 79 65 72 20 66 6f 72 20 fined layer for
0220: 6d 61 63 72 6f 20 72 75 6e 20 28 40 6c 61 79 28 macro run (@lay(
0230: 29 20 62 65 63 6f 6d 65 73 20 41 53 54 29 0d 0a ) becomes AST)..
0240: 7d 0d 0a 0d 0a 2f 2f 2f 20 54 72 75 65 20 69 66 }..../// True if
0250: 20 69 74 20 69 73 20 6d 61 63 72 6f 2d 6c 69 6b it is macro-lik
0260: 65 20 6c 61 79 65 72 20 74 68 61 74 20 62 61 73 e layer that bas
0270: 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 73 ically generates
0280: 20 73 79 6e 74 61 78 20 74 72 65 65 0d 0a 0d 0a syntax tree....
0290: 62 6f 6f 6c 20 69 73 4d 61 63 72 6f 69 73 68 4c bool isMacroishL
02a0: 61 79 65 72 28 20 4c 61 79 65 72 20 6c 61 79 20 ayer( Layer lay
02b0: 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6c 61 )..{...return la
02c0: 79 3d 3d 4d 61 63 72 6f 4c 61 79 65 72 20 7c 7c y==MacroLayer ||
02d0: 20 6c 61 79 3d 3d 52 61 77 4d 61 63 72 6f 4c 61 lay==RawMacroLa
02e0: 79 65 72 3b 0d 0a 7d 0d 0a 0d 0a 75 6e 69 74 74 yer;..}....unitt
02f0: 65 73 74 0d 0a 7b 0d 0a 09 61 73 73 65 72 74 28 est..{...assert(
0300: 20 21 69 73 4d 61 63 72 6f 69 73 68 4c 61 79 65 !isMacroishLaye
0310: 72 28 53 79 73 74 65 6d 4c 61 79 65 72 29 20 29 r(SystemLayer) )
0320: 3b 0d 0a 09 61 73 73 65 72 74 28 20 21 69 73 4d ;...assert( !isM
0330: 61 63 72 6f 69 73 68 4c 61 79 65 72 28 56 61 6c acroishLayer(Val
0340: 75 65 4c 61 79 65 72 29 20 29 3b 0d 0a 09 61 73 ueLayer) );...as
0350: 73 65 72 74 28 20 69 73 4d 61 63 72 6f 69 73 68 sert( isMacroish
0360: 4c 61 79 65 72 28 4d 61 63 72 6f 4c 61 79 65 72 Layer(MacroLayer
0370: 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 69 ) );...assert( i
0380: 73 4d 61 63 72 6f 69 73 68 4c 61 79 65 72 28 52 sMacroishLayer(R
0390: 61 77 4d 61 63 72 6f 4c 61 79 65 72 29 20 29 3b awMacroLayer) );
03a0: 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 20 54 72 75 65 20 ..}..../// True
03b0: 69 66 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 if in the specif
03c0: 69 65 64 20 6c 61 79 65 72 20 40 6c 61 79 28 2e ied layer @lay(.
03d0: 2e 2e 29 20 68 61 73 20 6e 6f 20 65 66 66 65 63 ..) has no effec
03e0: 74 20 61 6e 64 20 6d 65 72 65 6c 79 20 70 72 6f t and merely pro
03f0: 64 75 63 65 73 20 61 20 73 79 6e 74 61 78 20 74 duces a syntax t
0400: 72 65 65 0d 0a 0d 0a 62 6f 6f 6c 20 69 73 4e 6f ree....bool isNo
0410: 4c 61 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 LayerChangeLayer
0420: 28 20 4c 61 79 65 72 20 6c 61 79 20 29 0d 0a 7b ( Layer lay )..{
0430: 0d 0a 09 72 65 74 75 72 6e 20 6c 61 79 3d 3d 52 ...return lay==R
0440: 61 77 4d 61 63 72 6f 4c 61 79 65 72 3b 0d 0a 7d awMacroLayer;..}
0450: 0d 0a 0d 0a 75 6e 69 74 74 65 73 74 0d 0a 7b 0d ....unittest..{.
0460: 0a 09 61 73 73 65 72 74 28 20 21 69 73 4e 6f 4c ..assert( !isNoL
0470: 61 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 ayerChangeLayer(
0480: 53 79 73 74 65 6d 4c 61 79 65 72 29 20 29 3b 0d SystemLayer) );.
0490: 0a 09 61 73 73 65 72 74 28 20 21 69 73 4e 6f 4c ..assert( !isNoL
04a0: 61 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 ayerChangeLayer(
04b0: 56 61 6c 75 65 4c 61 79 65 72 29 20 29 3b 0d 0a ValueLayer) );..
04c0: 09 61 73 73 65 72 74 28 20 21 69 73 4e 6f 4c 61 .assert( !isNoLa
04d0: 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 4d yerChangeLayer(M
04e0: 61 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a 09 acroLayer) );...
04f0: 61 73 73 65 72 74 28 20 69 73 4e 6f 4c 61 79 65 assert( isNoLaye
0500: 72 43 68 61 6e 67 65 4c 61 79 65 72 28 52 61 77 rChangeLayer(Raw
0510: 4d 61 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a MacroLayer) );..
0520: 7d 0d 0a }..