Artifact ec0e00bb40d202e71ed3410bfb05b669aa83fb26:
0000: 2f 2a 2a 0d 0a 20 2a 20 41 75 74 68 6f 72 73 3a /**.. * Authors:
0010: 20 6b 2e 69 6e 61 62 61 0d 0a 20 2a 20 4c 69 63 k.inaba.. * Lic
0020: 65 6e 73 65 3a 20 4e 59 53 4c 20 30 2e 39 39 38 ense: NYSL 0.998
0030: 32 20 68 74 74 70 3a 2f 2f 77 77 77 2e 6b 6d 6f 2 http://www.kmo
0040: 6e 6f 73 2e 6e 65 74 2f 6e 79 73 6c 2f 0d 0a 20 nos.net/nysl/..
0050: 2a 0d 0a 20 2a 20 44 65 66 69 6e 69 74 69 6f 6e *.. * Definition
0060: 20 6f 66 20 63 6f 6e 73 74 61 6e 74 73 20 72 65 of constants re
0070: 6c 61 74 65 64 20 74 6f 20 74 68 65 20 6c 61 79 lated to the lay
0080: 65 72 73 2e 0d 0a 20 2a 2f 0d 0a 6d 6f 64 75 6c ers... */..modul
0090: 65 20 70 6f 6c 65 6d 79 2e 6c 61 79 65 72 3b 0d e polemy.layer;.
00a0: 0a 69 6d 70 6f 72 74 20 70 6f 6c 65 6d 79 2e 5f .import polemy._
00b0: 63 6f 6d 6d 6f 6e 3b 0d 0a 0d 0a 2f 2f 2f 20 54 common;..../// T
00c0: 79 70 65 20 66 6f 72 20 74 68 65 20 6c 61 79 65 ype for the laye
00d0: 72 20 49 44 0d 0a 0d 0a 61 6c 69 61 73 20 73 74 r ID....alias st
00e0: 72 69 6e 67 20 4c 61 79 65 72 3b 0d 0a 0d 0a 65 ring Layer;....e
00f0: 6e 75 6d 20 3a 20 4c 61 79 65 72 0d 0a 7b 0d 0a num : Layer..{..
0100: 09 53 79 73 74 65 6d 4c 61 79 65 72 20 20 20 3d .SystemLayer =
0110: 20 22 28 73 79 73 74 65 6d 29 22 2c 20 20 20 2f "(system)", /
0120: 2f 2f 20 50 72 65 64 65 66 69 6e 65 64 20 6c 61 // Predefined la
0130: 79 65 72 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c yer for internal
0140: 20 64 61 74 61 0d 0a 09 56 61 6c 75 65 4c 61 79 data...ValueLay
0150: 65 72 20 20 20 20 3d 20 22 40 76 61 6c 75 65 22 er = "@value"
0160: 2c 20 20 20 20 20 2f 2f 2f 20 50 72 65 64 65 66 , /// Predef
0170: 69 6e 65 64 20 6c 61 79 65 72 20 66 6f 72 20 6e ined layer for n
0180: 6f 72 6d 61 6c 20 72 75 6e 0d 0a 09 4d 61 63 72 ormal run...Macr
0190: 6f 4c 61 79 65 72 20 20 20 20 3d 20 22 40 6d 61 oLayer = "@ma
01a0: 63 72 6f 22 2c 20 20 20 20 20 2f 2f 2f 20 50 72 cro", /// Pr
01b0: 65 64 65 66 69 6e 65 64 20 6c 61 79 65 72 20 66 edefined layer f
01c0: 6f 72 20 6d 61 63 72 6f 20 72 75 6e 20 28 40 6c or macro run (@l
01d0: 61 79 28 29 20 63 68 61 6e 67 65 73 20 6c 61 79 ay() changes lay
01e0: 65 72 29 0d 0a 09 52 61 77 4d 61 63 72 6f 4c 61 er)...RawMacroLa
01f0: 79 65 72 20 3d 20 22 28 72 61 77 6d 61 63 72 6f yer = "(rawmacro
0200: 29 22 2c 20 2f 2f 2f 20 50 72 65 64 65 66 69 6e )", /// Predefin
0210: 65 64 20 6c 61 79 65 72 20 66 6f 72 20 6d 61 63 ed layer for mac
0220: 72 6f 20 72 75 6e 20 28 40 6c 61 79 28 29 20 62 ro run (@lay() b
0230: 65 63 6f 6d 65 73 20 41 53 54 29 0d 0a 09 41 73 ecomes AST)...As
0240: 74 4c 61 79 65 72 20 20 20 20 20 20 3d 20 22 28 tLayer = "(
0250: 61 73 74 29 22 2c 20 20 20 20 20 20 2f 2f 2f 20 ast)", ///
0260: 50 72 65 64 65 66 69 6e 65 64 20 6c 61 79 65 72 Predefined layer
0270: 20 66 6f 72 20 6d 61 63 72 6f 20 72 75 6e 20 28 for macro run (
0280: 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 6d 61 63 never invoke mac
0290: 72 6f 29 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 20 54 72 ro)..}..../// Tr
02a0: 75 65 20 69 66 20 69 74 20 69 73 20 6d 61 63 72 ue if it is macr
02b0: 6f 2d 6c 69 6b 65 20 6c 61 79 65 72 20 74 68 61 o-like layer tha
02c0: 74 20 62 61 73 69 63 61 6c 6c 79 20 67 65 6e 65 t basically gene
02d0: 72 61 74 65 73 20 73 79 6e 74 61 78 20 74 72 65 rates syntax tre
02e0: 65 0d 0a 0d 0a 62 6f 6f 6c 20 69 73 41 53 54 4c e....bool isASTL
02f0: 61 79 65 72 28 20 4c 61 79 65 72 20 6c 61 79 20 ayer( Layer lay
0300: 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6c 61 )..{...return la
0310: 79 3d 3d 4d 61 63 72 6f 4c 61 79 65 72 20 7c 7c y==MacroLayer ||
0320: 20 6c 61 79 3d 3d 52 61 77 4d 61 63 72 6f 4c 61 lay==RawMacroLa
0330: 79 65 72 20 7c 7c 20 6c 61 79 3d 3d 41 73 74 4c yer || lay==AstL
0340: 61 79 65 72 3b 0d 0a 7d 0d 0a 0d 0a 75 6e 69 74 ayer;..}....unit
0350: 74 65 73 74 0d 0a 7b 0d 0a 09 61 73 73 65 72 74 test..{...assert
0360: 28 20 21 69 73 41 53 54 4c 61 79 65 72 28 53 79 ( !isASTLayer(Sy
0370: 73 74 65 6d 4c 61 79 65 72 29 20 29 3b 0d 0a 09 stemLayer) );...
0380: 61 73 73 65 72 74 28 20 21 69 73 41 53 54 4c 61 assert( !isASTLa
0390: 79 65 72 28 56 61 6c 75 65 4c 61 79 65 72 29 20 yer(ValueLayer)
03a0: 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 69 73 41 );...assert( isA
03b0: 53 54 4c 61 79 65 72 28 4d 61 63 72 6f 4c 61 79 STLayer(MacroLay
03c0: 65 72 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 er) );...assert(
03d0: 20 69 73 41 53 54 4c 61 79 65 72 28 52 61 77 4d isASTLayer(RawM
03e0: 61 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a 09 acroLayer) );...
03f0: 61 73 73 65 72 74 28 20 69 73 41 53 54 4c 61 79 assert( isASTLay
0400: 65 72 28 41 73 74 4c 61 79 65 72 29 20 29 3b 0d er(AstLayer) );.
0410: 0a 7d 0d 0a 0d 0a 2f 2f 2f 20 54 72 75 65 20 69 .}..../// True i
0420: 66 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 f in the specifi
0430: 65 64 20 6c 61 79 65 72 20 40 6c 61 79 28 2e 2e ed layer @lay(..
0440: 2e 29 20 68 61 73 20 6e 6f 20 65 66 66 65 63 74 .) has no effect
0450: 20 61 6e 64 20 6d 65 72 65 6c 79 20 70 72 6f 64 and merely prod
0460: 75 63 65 73 20 61 20 73 79 6e 74 61 78 20 74 72 uces a syntax tr
0470: 65 65 0d 0a 0d 0a 62 6f 6f 6c 20 69 73 4e 6f 4c ee....bool isNoL
0480: 61 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 ayerChangeLayer(
0490: 20 4c 61 79 65 72 20 6c 61 79 20 29 0d 0a 7b 0d Layer lay )..{.
04a0: 0a 09 72 65 74 75 72 6e 20 6c 61 79 3d 3d 52 61 ..return lay==Ra
04b0: 77 4d 61 63 72 6f 4c 61 79 65 72 20 7c 7c 20 6c wMacroLayer || l
04c0: 61 79 3d 3d 41 73 74 4c 61 79 65 72 3b 0d 0a 7d ay==AstLayer;..}
04d0: 0d 0a 0d 0a 75 6e 69 74 74 65 73 74 0d 0a 7b 0d ....unittest..{.
04e0: 0a 09 61 73 73 65 72 74 28 20 21 69 73 4e 6f 4c ..assert( !isNoL
04f0: 61 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 ayerChangeLayer(
0500: 53 79 73 74 65 6d 4c 61 79 65 72 29 20 29 3b 0d SystemLayer) );.
0510: 0a 09 61 73 73 65 72 74 28 20 21 69 73 4e 6f 4c ..assert( !isNoL
0520: 61 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 ayerChangeLayer(
0530: 56 61 6c 75 65 4c 61 79 65 72 29 20 29 3b 0d 0a ValueLayer) );..
0540: 09 61 73 73 65 72 74 28 20 21 69 73 4e 6f 4c 61 .assert( !isNoLa
0550: 79 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 4d yerChangeLayer(M
0560: 61 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a 09 acroLayer) );...
0570: 61 73 73 65 72 74 28 20 69 73 4e 6f 4c 61 79 65 assert( isNoLaye
0580: 72 43 68 61 6e 67 65 4c 61 79 65 72 28 52 61 77 rChangeLayer(Raw
0590: 4d 61 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a MacroLayer) );..
05a0: 09 61 73 73 65 72 74 28 20 69 73 4e 6f 4c 61 79 .assert( isNoLay
05b0: 65 72 43 68 61 6e 67 65 4c 61 79 65 72 28 41 73 erChangeLayer(As
05c0: 74 4c 61 79 65 72 29 20 29 3b 0d 0a 7d 0d 0a 0d tLayer) );..}...
05d0: 0a 2f 2f 2f 20 54 72 75 65 20 69 66 20 64 6f 20 ./// True if do
05e0: 6d 61 63 72 6f 20 65 78 70 61 6e 73 74 69 6f 6e macro expanstion
05f0: 0d 0a 0d 0a 62 6f 6f 6c 20 69 73 4d 61 63 72 6f ....bool isMacro
0600: 4c 61 79 65 72 28 20 4c 61 79 65 72 20 6c 61 79 Layer( Layer lay
0610: 20 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6c )..{...return l
0620: 61 79 3d 3d 4d 61 63 72 6f 4c 61 79 65 72 20 7c ay==MacroLayer |
0630: 7c 20 6c 61 79 3d 3d 52 61 77 4d 61 63 72 6f 4c | lay==RawMacroL
0640: 61 79 65 72 3b 0d 0a 7d 0d 0a 0d 0a 75 6e 69 74 ayer;..}....unit
0650: 74 65 73 74 0d 0a 7b 0d 0a 09 61 73 73 65 72 74 test..{...assert
0660: 28 20 21 69 73 4d 61 63 72 6f 4c 61 79 65 72 28 ( !isMacroLayer(
0670: 53 79 73 74 65 6d 4c 61 79 65 72 29 20 29 3b 0d SystemLayer) );.
0680: 0a 09 61 73 73 65 72 74 28 20 21 69 73 4d 61 63 ..assert( !isMac
0690: 72 6f 4c 61 79 65 72 28 56 61 6c 75 65 4c 61 79 roLayer(ValueLay
06a0: 65 72 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 er) );...assert(
06b0: 20 69 73 4d 61 63 72 6f 4c 61 79 65 72 28 4d 61 isMacroLayer(Ma
06c0: 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a 09 61 croLayer) );...a
06d0: 73 73 65 72 74 28 20 69 73 4d 61 63 72 6f 4c 61 ssert( isMacroLa
06e0: 79 65 72 28 52 61 77 4d 61 63 72 6f 4c 61 79 65 yer(RawMacroLaye
06f0: 72 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 r) );...assert(
0700: 21 69 73 4d 61 63 72 6f 4c 61 79 65 72 28 41 73 !isMacroLayer(As
0710: 74 4c 61 79 65 72 29 20 29 3b 0d 0a 7d 0d 0a tLayer) );..}..