Hex Artifact Content
Not logged in

Artifact 70a85e9a66eddacd698f7a5f37a74d1c3a006dac:


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 7d 0d 0a  ecomes AST)..}..
0240: 0d 0a 2f 2f 2f 20 54 72 75 65 20 69 66 20 69 74  ../// True if it
0250: 20 69 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e   is a user-defin
0260: 65 64 20 6c 61 79 65 72 0d 0a 0d 0a 62 6f 6f 6c  ed layer....bool
0270: 20 69 73 55 73 65 72 44 65 66 69 6e 65 64 4c 61   isUserDefinedLa
0280: 79 65 72 28 20 4c 61 79 65 72 20 6c 61 79 20 29  yer( Layer lay )
0290: 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6c 61 79  ..{...return lay
02a0: 21 3d 53 79 73 74 65 6d 4c 61 79 65 72 20 26 26  !=SystemLayer &&
02b0: 20 6c 61 79 21 3d 56 61 6c 75 65 4c 61 79 65 72   lay!=ValueLayer
02c0: 20 26 26 20 6c 61 79 21 3d 4d 61 63 72 6f 4c 61   && lay!=MacroLa
02d0: 79 65 72 20 26 26 20 6c 61 79 21 3d 52 61 77 4d  yer && lay!=RawM
02e0: 61 63 72 6f 4c 61 79 65 72 3b 0d 0a 7d 0d 0a 0d  acroLayer;..}...
02f0: 0a 75 6e 69 74 74 65 73 74 0d 0a 7b 0d 0a 09 61  .unittest..{...a
0300: 73 73 65 72 74 28 20 21 69 73 55 73 65 72 44 65  ssert( !isUserDe
0310: 66 69 6e 65 64 4c 61 79 65 72 28 53 79 73 74 65  finedLayer(Syste
0320: 6d 4c 61 79 65 72 29 20 29 3b 0d 0a 09 61 73 73  mLayer) );...ass
0330: 65 72 74 28 20 21 69 73 55 73 65 72 44 65 66 69  ert( !isUserDefi
0340: 6e 65 64 4c 61 79 65 72 28 56 61 6c 75 65 4c 61  nedLayer(ValueLa
0350: 79 65 72 29 20 29 3b 0d 0a 09 61 73 73 65 72 74  yer) );...assert
0360: 28 20 21 69 73 55 73 65 72 44 65 66 69 6e 65 64  ( !isUserDefined
0370: 4c 61 79 65 72 28 4d 61 63 72 6f 4c 61 79 65 72  Layer(MacroLayer
0380: 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 21  ) );...assert( !
0390: 69 73 55 73 65 72 44 65 66 69 6e 65 64 4c 61 79  isUserDefinedLay
03a0: 65 72 28 52 61 77 4d 61 63 72 6f 4c 61 79 65 72  er(RawMacroLayer
03b0: 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 69  ) );...assert( i
03c0: 73 55 73 65 72 44 65 66 69 6e 65 64 4c 61 79 65  sUserDefinedLaye
03d0: 72 28 22 40 66 6f 6f 22 29 20 29 3b 0d 0a 7d 0d  r("@foo") );..}.
03e0: 0a 0d 0a 2f 2f 2f 20 54 72 75 65 20 69 66 20 69  .../// True if i
03f0: 74 20 69 73 20 6d 61 63 72 6f 2d 6c 69 6b 65 20  t is macro-like 
0400: 6c 61 79 65 72 20 74 68 61 74 20 62 61 73 69 63  layer that basic
0410: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 73 20 73  ally generates s
0420: 79 6e 74 61 78 20 74 72 65 65 0d 0a 0d 0a 62 6f  yntax tree....bo
0430: 6f 6c 20 69 73 41 53 54 4c 61 79 65 72 28 20 4c  ol isASTLayer( L
0440: 61 79 65 72 20 6c 61 79 20 29 0d 0a 7b 0d 0a 09  ayer lay )..{...
0450: 72 65 74 75 72 6e 20 6c 61 79 3d 3d 4d 61 63 72  return lay==Macr
0460: 6f 4c 61 79 65 72 20 7c 7c 20 6c 61 79 3d 3d 52  oLayer || lay==R
0470: 61 77 4d 61 63 72 6f 4c 61 79 65 72 3b 0d 0a 7d  awMacroLayer;..}
0480: 0d 0a 0d 0a 75 6e 69 74 74 65 73 74 0d 0a 7b 0d  ....unittest..{.
0490: 0a 09 61 73 73 65 72 74 28 20 21 69 73 41 53 54  ..assert( !isAST
04a0: 4c 61 79 65 72 28 53 79 73 74 65 6d 4c 61 79 65  Layer(SystemLaye
04b0: 72 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20  r) );...assert( 
04c0: 21 69 73 41 53 54 4c 61 79 65 72 28 56 61 6c 75  !isASTLayer(Valu
04d0: 65 4c 61 79 65 72 29 20 29 3b 0d 0a 09 61 73 73  eLayer) );...ass
04e0: 65 72 74 28 20 69 73 41 53 54 4c 61 79 65 72 28  ert( isASTLayer(
04f0: 4d 61 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a  MacroLayer) );..
0500: 09 61 73 73 65 72 74 28 20 69 73 41 53 54 4c 61  .assert( isASTLa
0510: 79 65 72 28 52 61 77 4d 61 63 72 6f 4c 61 79 65  yer(RawMacroLaye
0520: 72 29 20 29 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 20  r) );..}..../// 
0530: 54 72 75 65 20 69 66 20 69 6e 20 74 68 65 20 73  True if in the s
0540: 70 65 63 69 66 69 65 64 20 6c 61 79 65 72 20 40  pecified layer @
0550: 6c 61 79 28 2e 2e 2e 29 20 68 61 73 20 6e 6f 20  lay(...) has no 
0560: 65 66 66 65 63 74 20 61 6e 64 20 6d 65 72 65 6c  effect and merel
0570: 79 20 70 72 6f 64 75 63 65 73 20 61 20 73 79 6e  y produces a syn
0580: 74 61 78 20 74 72 65 65 0d 0a 0d 0a 62 6f 6f 6c  tax tree....bool
0590: 20 69 73 4e 6f 4c 61 79 65 72 43 68 61 6e 67 65   isNoLayerChange
05a0: 4c 61 79 65 72 28 20 4c 61 79 65 72 20 6c 61 79  Layer( Layer lay
05b0: 20 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6c   )..{...return l
05c0: 61 79 3d 3d 52 61 77 4d 61 63 72 6f 4c 61 79 65  ay==RawMacroLaye
05d0: 72 3b 0d 0a 7d 0d 0a 0d 0a 75 6e 69 74 74 65 73  r;..}....unittes
05e0: 74 0d 0a 7b 0d 0a 09 61 73 73 65 72 74 28 20 21  t..{...assert( !
05f0: 69 73 4e 6f 4c 61 79 65 72 43 68 61 6e 67 65 4c  isNoLayerChangeL
0600: 61 79 65 72 28 53 79 73 74 65 6d 4c 61 79 65 72  ayer(SystemLayer
0610: 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 21  ) );...assert( !
0620: 69 73 4e 6f 4c 61 79 65 72 43 68 61 6e 67 65 4c  isNoLayerChangeL
0630: 61 79 65 72 28 56 61 6c 75 65 4c 61 79 65 72 29  ayer(ValueLayer)
0640: 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 21 69   );...assert( !i
0650: 73 4e 6f 4c 61 79 65 72 43 68 61 6e 67 65 4c 61  sNoLayerChangeLa
0660: 79 65 72 28 4d 61 63 72 6f 4c 61 79 65 72 29 20  yer(MacroLayer) 
0670: 29 3b 0d 0a 09 61 73 73 65 72 74 28 20 69 73 4e  );...assert( isN
0680: 6f 4c 61 79 65 72 43 68 61 6e 67 65 4c 61 79 65  oLayerChangeLaye
0690: 72 28 52 61 77 4d 61 63 72 6f 4c 61 79 65 72 29  r(RawMacroLayer)
06a0: 20 29 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 20 54 72   );..}..../// Tr
06b0: 75 65 20 69 66 20 64 6f 20 6d 61 63 72 6f 20 65  ue if do macro e
06c0: 78 70 61 6e 73 74 69 6f 6e 0d 0a 0d 0a 62 6f 6f  xpanstion....boo
06d0: 6c 20 69 73 4d 61 63 72 6f 4c 61 79 65 72 28 20  l isMacroLayer( 
06e0: 4c 61 79 65 72 20 6c 61 79 20 29 0d 0a 7b 0d 0a  Layer lay )..{..
06f0: 09 72 65 74 75 72 6e 20 6c 61 79 3d 3d 4d 61 63  .return lay==Mac
0700: 72 6f 4c 61 79 65 72 20 7c 7c 20 6c 61 79 3d 3d  roLayer || lay==
0710: 52 61 77 4d 61 63 72 6f 4c 61 79 65 72 3b 0d 0a  RawMacroLayer;..
0720: 7d 0d 0a 0d 0a 75 6e 69 74 74 65 73 74 0d 0a 7b  }....unittest..{
0730: 0d 0a 09 61 73 73 65 72 74 28 20 21 69 73 4d 61  ...assert( !isMa
0740: 63 72 6f 4c 61 79 65 72 28 53 79 73 74 65 6d 4c  croLayer(SystemL
0750: 61 79 65 72 29 20 29 3b 0d 0a 09 61 73 73 65 72  ayer) );...asser
0760: 74 28 20 21 69 73 4d 61 63 72 6f 4c 61 79 65 72  t( !isMacroLayer
0770: 28 56 61 6c 75 65 4c 61 79 65 72 29 20 29 3b 0d  (ValueLayer) );.
0780: 0a 09 61 73 73 65 72 74 28 20 69 73 4d 61 63 72  ..assert( isMacr
0790: 6f 4c 61 79 65 72 28 4d 61 63 72 6f 4c 61 79 65  oLayer(MacroLaye
07a0: 72 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 28 20  r) );...assert( 
07b0: 69 73 4d 61 63 72 6f 4c 61 79 65 72 28 52 61 77  isMacroLayer(Raw
07c0: 4d 61 63 72 6f 4c 61 79 65 72 29 20 29 3b 0d 0a  MacroLayer) );..
07d0: 7d 0d 0a                                         }..