Hex Artifact Content
Not logged in

Artifact 01c119756ed23ca52f2bed9fa082d71e91f61d55:


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 52 75 6e 74 69 6d 65 20 64 61  *.. * Runtime da
0060: 74 61 20 73 74 72 75 63 74 75 72 65 73 20 66 6f  ta structures fo
0070: 72 20 50 6f 6c 65 6d 79 20 70 72 6f 67 72 61 6d  r Polemy program
0080: 6d 69 6e 67 20 6c 61 6e 67 75 61 67 65 2e 0d 0a  ming language...
0090: 20 2a 2f 0d 0a 6d 6f 64 75 6c 65 20 70 6f 6c 65   */..module pole
00a0: 6d 79 2e 76 61 6c 75 65 3b 0d 0a 69 6d 70 6f 72  my.value;..impor
00b0: 74 20 70 6f 6c 65 6d 79 2e 5f 63 6f 6d 6d 6f 6e  t polemy._common
00c0: 3b 0d 0a 69 6d 70 6f 72 74 20 70 6f 6c 65 6d 79  ;..import polemy
00d0: 2e 6c 65 78 3b 0d 0a 0d 0a 2f 2f 2f 20 52 61 69  .lex;..../// Rai
00e0: 73 65 64 20 77 68 65 6e 20 73 6f 6d 65 74 68 69  sed when somethi
00f0: 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 20 69 6e  ng went wrong in
0100: 20 72 75 6e 74 69 6d 65 0d 0a 0d 0a 63 6c 61 73   runtime....clas
0110: 73 20 52 75 6e 74 69 6d 65 45 78 63 65 70 74 69  s RuntimeExcepti
0120: 6f 6e 20 3a 20 45 78 63 65 70 74 69 6f 6e 0d 0a  on : Exception..
0130: 7b 0d 0a 09 6d 69 78 69 6e 20 45 78 63 65 70 74  {...mixin Except
0140: 69 6f 6e 57 69 74 68 50 6f 73 69 74 69 6f 6e 3b  ionWithPosition;
0150: 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 20 52 75 6e 74 69  ..}..../// Runti
0160: 6d 65 20 76 61 6c 75 65 73 20 6f 66 20 50 6f 6c  me values of Pol
0170: 65 6d 79 0d 0a 0d 0a 61 62 73 74 72 61 63 74 20  emy....abstract 
0180: 63 6c 61 73 73 20 56 61 6c 75 65 0d 0a 7b 0d 0a  class Value..{..
0190: 7d 0d 0a 0d 0a 63 6c 61 73 73 20 49 6e 74 56 61  }....class IntVa
01a0: 6c 75 65 20 3a 20 56 61 6c 75 65 0d 0a 7b 0d 0a  lue : Value..{..
01b0: 09 42 69 67 49 6e 74 20 64 61 74 61 3b 0d 0a 0d  .BigInt data;...
01c0: 0a 09 6d 69 78 69 6e 20 53 69 6d 70 6c 65 43 6c  ..mixin SimpleCl
01d0: 61 73 73 3b 0d 0a 09 6f 76 65 72 72 69 64 65 20  ass;...override 
01e0: 73 74 72 69 6e 67 20 74 6f 53 74 72 69 6e 67 28  string toString(
01f0: 29 20 63 6f 6e 73 74 20 7b 20 72 65 74 75 72 6e  ) const { return
0200: 20 73 74 64 2e 62 69 67 69 6e 74 2e 74 6f 44 65   std.bigint.toDe
0210: 63 69 6d 61 6c 53 74 72 69 6e 67 28 63 61 73 74  cimalString(cast
0220: 28 42 69 67 49 6e 74 29 64 61 74 61 29 3b 20 7d  (BigInt)data); }
0230: 0d 0a 7d 0d 0a 0d 0a 63 6c 61 73 73 20 53 74 72  ..}....class Str
0240: 56 61 6c 75 65 20 3a 20 56 61 6c 75 65 0d 0a 7b  Value : Value..{
0250: 0d 0a 09 73 74 72 69 6e 67 20 64 61 74 61 3b 0d  ...string data;.
0260: 0a 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70 6c 65  ....mixin Simple
0270: 43 6c 61 73 73 3b 0d 0a 09 6f 76 65 72 72 69 64  Class;...overrid
0280: 65 20 73 74 72 69 6e 67 20 74 6f 53 74 72 69 6e  e string toStrin
0290: 67 28 29 20 63 6f 6e 73 74 20 7b 20 72 65 74 75  g() const { retu
02a0: 72 6e 20 64 61 74 61 3b 20 7d 0d 0a 7d 0d 0a 0d  rn data; }..}...
02b0: 0a 63 6c 61 73 73 20 46 75 6e 56 61 6c 75 65 20  .class FunValue 
02c0: 3a 20 56 61 6c 75 65 0d 0a 7b 0d 0a 09 56 61 6c  : Value..{...Val
02d0: 75 65 20 64 65 6c 65 67 61 74 65 28 69 6d 6d 75  ue delegate(immu
02e0: 74 61 62 6c 65 20 4c 65 78 50 6f 73 69 74 69 6f  table LexPositio
02f0: 6e 20 70 6f 73 2c 20 73 74 72 69 6e 67 20 6c 61  n pos, string la
0300: 79 2c 20 56 61 6c 75 65 5b 5d 29 20 64 61 74 61  y, Value[]) data
0310: 3b 0d 0a 0d 0a 09 6d 69 78 69 6e 20 53 69 6d 70  ;.....mixin Simp
0320: 6c 65 43 6f 6e 73 74 72 75 63 74 6f 72 3b 0d 0a  leConstructor;..
0330: 09 61 6c 69 61 73 20 64 61 74 61 20 63 61 6c 6c  .alias data call
0340: 3b 0d 0a 09 6f 76 65 72 72 69 64 65 20 73 74 72  ;...override str
0350: 69 6e 67 20 74 6f 53 74 72 69 6e 67 28 29 20 63  ing toString() c
0360: 6f 6e 73 74 20 7b 20 72 65 74 75 72 6e 20 73 70  onst { return sp
0370: 72 69 6e 74 66 21 22 28 66 75 6e 63 74 69 6f 6e  rintf!"(function
0380: 3a 25 73 3a 25 73 29 22 28 64 61 74 61 2e 70 74  :%s:%s)"(data.pt
0390: 72 2c 64 61 74 61 2e 66 75 6e 63 70 74 72 29 3b  r,data.funcptr);
03a0: 20 7d 0d 0a 7d 0d 0a 0d 0a 2f 2f 2f 20 4c 61 79   }..}..../// Lay
03b0: 65 72 20 49 44 0d 0a 0d 0a 61 6c 69 61 73 20 73  er ID....alias s
03c0: 74 72 69 6e 67 20 4c 61 79 65 72 3b 0d 0a 0d 0a  tring Layer;....
03d0: 2f 2f 2f 20 43 6f 6e 74 65 78 74 20 28 76 61 72  /// Context (var
03e0: 69 61 62 6c 65 20 65 6e 76 69 72 6f 6e 6d 65 6e  iable environmen
03f0: 74 29 0d 0a 2f 2f 2f 20 53 69 6d 6c 61 72 20 74  t)../// Simlar t
0400: 6f 20 70 72 6f 74 6f 74 79 70 65 20 63 68 61 69  o prototype chai
0410: 6e 20 6f 66 20 45 43 4d 41 53 63 72 69 70 74 20  n of ECMAScript 
0420: 65 74 63 2e 0d 0a 2f 2f 2f 20 42 75 74 20 65 78  etc.../// But ex
0430: 74 65 6e 64 65 64 20 77 69 74 68 20 74 68 65 20  tended with the 
0440: 6e 6f 74 69 6f 6e 20 6f 66 20 22 4c 61 79 65 72  notion of "Layer
0450: 22 0d 0a 0d 0a 63 6c 61 73 73 20 54 61 62 6c 65  "....class Table
0460: 20 3a 20 56 61 6c 75 65 0d 0a 7b 0d 0a 09 65 6e   : Value..{...en
0470: 75 6d 20 4b 69 6e 64 20 7b 50 72 6f 70 61 67 61  um Kind {Propaga
0480: 74 65 53 65 74 2c 20 4e 6f 74 50 72 6f 70 61 67  teSet, NotPropag
0490: 61 74 65 53 65 74 7d 3b 0d 0a 0d 0a 09 74 68 69  ateSet};.....thi
04a0: 73 28 20 54 61 62 6c 65 20 70 72 6f 74 6f 3d 6e  s( Table proto=n
04b0: 75 6c 6c 2c 20 4b 69 6e 64 20 6b 20 3d 20 4b 69  ull, Kind k = Ki
04c0: 6e 64 2e 50 72 6f 70 61 67 61 74 65 53 65 74 20  nd.PropagateSet 
04d0: 29 0d 0a 09 09 7b 20 74 68 69 73 2e 70 72 6f 74  )....{ this.prot
04e0: 6f 74 79 70 65 20 3d 20 70 72 6f 74 6f 3b 20 74  otype = proto; t
04f0: 68 69 73 2e 6b 69 6e 64 20 3d 20 6b 3b 20 7d 0d  his.kind = k; }.
0500: 0a 0d 0a 09 76 6f 69 64 20 73 65 74 28 73 74 72  ....void set(str
0510: 69 6e 67 20 69 2c 20 4c 61 79 65 72 20 6c 61 79  ing i, Layer lay
0520: 2c 20 56 61 6c 75 65 20 76 2c 20 69 6e 20 4c 65  , Value v, in Le
0530: 78 50 6f 73 69 74 69 6f 6e 20 70 6f 73 3d 6e 75  xPosition pos=nu
0540: 6c 6c 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 20 73  ll)...{....if( s
0550: 65 74 49 66 45 78 69 73 74 28 69 2c 20 6c 61 79  etIfExist(i, lay
0560: 2c 20 76 29 20 29 0d 0a 09 09 09 72 65 74 75 72  , v) ).....retur
0570: 6e 3b 0d 0a 09 09 64 61 74 61 5b 69 5d 5b 6c 61  n;....data[i][la
0580: 79 5d 20 3d 20 76 3b 0d 0a 09 7d 0d 0a 0d 0a 09  y] = v;...}.....
0590: 56 61 6c 75 65 20 67 65 74 28 73 74 72 69 6e 67  Value get(string
05a0: 20 69 2c 20 4c 61 79 65 72 20 6c 61 79 2c 20 69   i, Layer lay, i
05b0: 6e 20 4c 65 78 50 6f 73 69 74 69 6f 6e 20 70 6f  n LexPosition po
05c0: 73 3d 6e 75 6c 6c 29 0d 0a 09 7b 0d 0a 09 09 69  s=null)...{....i
05d0: 66 28 20 69 20 69 6e 20 64 61 74 61 20 29 0d 0a  f( i in data )..
05e0: 09 09 09 72 65 74 75 72 6e 20 64 61 74 61 5b 69  ...return data[i
05f0: 5d 5b 6c 61 79 5d 3b 0d 0a 09 09 69 66 28 20 70  ][lay];....if( p
0600: 72 6f 74 6f 74 79 70 65 20 69 73 20 6e 75 6c 6c  rototype is null
0610: 20 29 0d 0a 09 09 09 74 68 72 6f 77 20 6e 65 77   ).....throw new
0620: 20 52 75 6e 74 69 6d 65 45 78 63 65 70 74 69 6f   RuntimeExceptio
0630: 6e 28 70 6f 73 2c 20 73 70 72 69 6e 74 66 21 22  n(pos, sprintf!"
0640: 76 61 72 69 61 62 6c 65 20 25 73 20 6e 6f 74 20  variable %s not 
0650: 66 6f 75 6e 64 22 28 69 29 29 3b 0d 0a 09 09 72  found"(i));....r
0660: 65 74 75 72 6e 20 70 72 6f 74 6f 74 79 70 65 2e  eturn prototype.
0670: 67 65 74 28 69 2c 20 6c 61 79 29 3b 0d 0a 09 7d  get(i, lay);...}
0680: 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 09 54  ....private:...T
0690: 61 62 6c 65 20 20 20 20 20 20 20 20 20 20 20 20  able            
06a0: 20 20 20 20 70 72 6f 74 6f 74 79 70 65 3b 0d 0a      prototype;..
06b0: 09 4b 69 6e 64 20 20 20 20 20 20 20 20 20 20 20  .Kind           
06c0: 20 20 20 20 20 20 6b 69 6e 64 3b 0d 0a 09 56 61        kind;...Va
06d0: 6c 75 65 5b 4c 61 79 65 72 5d 5b 73 74 72 69 6e  lue[Layer][strin
06e0: 67 5d 20 64 61 74 61 3b 0d 0a 0d 0a 09 62 6f 6f  g] data;.....boo
06f0: 6c 20 73 65 74 49 66 45 78 69 73 74 28 73 74 72  l setIfExist(str
0700: 69 6e 67 20 69 2c 20 4c 61 79 65 72 20 6c 61 79  ing i, Layer lay
0710: 2c 20 56 61 6c 75 65 20 76 29 0d 0a 09 7b 0d 0a  , Value v)...{..
0720: 09 09 69 66 28 20 69 20 69 6e 20 64 61 74 61 20  ..if( i in data 
0730: 29 0d 0a 09 09 7b 0d 0a 09 09 09 64 61 74 61 5b  )....{.....data[
0740: 69 5d 5b 6c 61 79 5d 20 3d 20 76 3b 0d 0a 09 09  i][lay] = v;....
0750: 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 09  .return true;...
0760: 09 7d 0d 0a 09 09 69 66 28 20 6b 69 6e 64 3d 3d  .}....if( kind==
0770: 4b 69 6e 64 2e 50 72 6f 70 61 67 61 74 65 53 65  Kind.PropagateSe
0780: 74 20 26 26 20 70 72 6f 74 6f 74 79 70 65 20 21  t && prototype !
0790: 69 73 20 6e 75 6c 6c 20 29 0d 0a 09 09 09 72 65  is null ).....re
07a0: 74 75 72 6e 20 70 72 6f 74 6f 74 79 70 65 2e 73  turn prototype.s
07b0: 65 74 49 66 45 78 69 73 74 28 69 2c 20 6c 61 79  etIfExist(i, lay
07c0: 2c 20 76 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20  , v);....return 
07d0: 66 61 6c 73 65 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d  false;...}..}...
07e0: 0a 75 6e 69 74 74 65 73 74 0d 0a 7b 0d 0a 09 54  .unittest..{...T
07f0: 61 62 6c 65 20 63 30 20 3d 20 6e 65 77 20 54 61  able c0 = new Ta
0800: 62 6c 65 3b 0d 0a 09 54 61 62 6c 65 20 63 30 31  ble;...Table c01
0810: 20 3d 20 6e 65 77 20 54 61 62 6c 65 28 63 30 2c   = new Table(c0,
0820: 20 54 61 62 6c 65 2e 4b 69 6e 64 2e 4e 6f 74 50   Table.Kind.NotP
0830: 72 6f 70 61 67 61 74 65 53 65 74 29 3b 0d 0a 09  ropagateSet);...
0840: 54 61 62 6c 65 20 63 30 31 32 20 3d 20 6e 65 77  Table c012 = new
0850: 20 54 61 62 6c 65 28 63 30 31 2c 20 54 61 62 6c   Table(c01, Tabl
0860: 65 2e 4b 69 6e 64 2e 50 72 6f 70 61 67 61 74 65  e.Kind.Propagate
0870: 53 65 74 29 3b 0d 0a 09 54 61 62 6c 65 20 63 30  Set);...Table c0
0880: 31 33 20 3d 20 6e 65 77 20 54 61 62 6c 65 28 63  13 = new Table(c
0890: 30 31 2c 20 54 61 62 6c 65 2e 4b 69 6e 64 2e 50  01, Table.Kind.P
08a0: 72 6f 70 61 67 61 74 65 53 65 74 29 3b 0d 0a 0d  ropagateSet);...
08b0: 0a 09 61 73 73 65 72 74 5f 6e 6f 74 68 72 6f 77  ..assert_nothrow
08c0: 28 20 63 30 31 32 2e 73 65 74 28 22 78 22 2c 20  ( c012.set("x", 
08d0: 22 40 76 22 2c 20 6e 65 77 20 49 6e 74 56 61 6c  "@v", new IntVal
08e0: 75 65 28 42 69 67 49 6e 74 28 31 32 29 29 29 20  ue(BigInt(12))) 
08f0: 29 3b 0d 0a 09 61 73 73 65 72 74 5f 74 68 72 6f  );...assert_thro
0900: 77 21 52 75 6e 74 69 6d 65 45 78 63 65 70 74 69  w!RuntimeExcepti
0910: 6f 6e 28 20 63 30 31 33 2e 67 65 74 28 22 78 22  on( c013.get("x"
0920: 2c 20 22 40 76 22 29 20 29 3b 0d 0a 09 61 73 73  , "@v") );...ass
0930: 65 72 74 5f 6e 6f 74 68 72 6f 77 28 20 63 30 31  ert_nothrow( c01
0940: 33 2e 73 65 74 28 22 78 22 2c 20 22 40 76 22 2c  3.set("x", "@v",
0950: 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 42 69   new IntValue(Bi
0960: 67 49 6e 74 28 31 33 29 29 29 20 29 3b 0d 0a 09  gInt(13))) );...
0970: 61 73 73 65 72 74 5f 65 71 28 20 63 30 31 33 2e  assert_eq( c013.
0980: 67 65 74 28 22 78 22 2c 20 22 40 76 22 29 2c 20  get("x", "@v"), 
0990: 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 42 69 67  new IntValue(Big
09a0: 49 6e 74 28 31 33 29 29 20 29 3b 0d 0a 09 61 73  Int(13)) );...as
09b0: 73 65 72 74 5f 65 71 28 20 63 30 31 32 2e 67 65  sert_eq( c012.ge
09c0: 74 28 22 78 22 2c 20 22 40 76 22 29 2c 20 6e 65  t("x", "@v"), ne
09d0: 77 20 49 6e 74 56 61 6c 75 65 28 42 69 67 49 6e  w IntValue(BigIn
09e0: 74 28 31 32 29 29 20 29 3b 0d 0a 09 61 73 73 65  t(12)) );...asse
09f0: 72 74 5f 74 68 72 6f 77 21 52 75 6e 74 69 6d 65  rt_throw!Runtime
0a00: 45 78 63 65 70 74 69 6f 6e 28 20 63 30 31 2e 67  Exception( c01.g
0a10: 65 74 28 22 78 22 2c 20 22 40 76 22 29 20 29 3b  et("x", "@v") );
0a20: 0d 0a 0d 0a 09 61 73 73 65 72 74 5f 6e 6f 74 68  .....assert_noth
0a30: 72 6f 77 28 20 63 30 31 2e 73 65 74 28 22 79 22  row( c01.set("y"
0a40: 2c 20 22 40 76 22 2c 20 6e 65 77 20 49 6e 74 56  , "@v", new IntV
0a50: 61 6c 75 65 28 42 69 67 49 6e 74 28 31 29 29 29  alue(BigInt(1)))
0a60: 20 29 3b 0d 0a 09 61 73 73 65 72 74 5f 65 71 28   );...assert_eq(
0a70: 20 63 30 31 33 2e 67 65 74 28 22 79 22 2c 20 22   c013.get("y", "
0a80: 40 76 22 29 2c 20 6e 65 77 20 49 6e 74 56 61 6c  @v"), new IntVal
0a90: 75 65 28 42 69 67 49 6e 74 28 31 29 29 20 29 3b  ue(BigInt(1)) );
0aa0: 0d 0a 09 61 73 73 65 72 74 5f 65 71 28 20 63 30  ...assert_eq( c0
0ab0: 31 32 2e 67 65 74 28 22 79 22 2c 20 22 40 76 22  12.get("y", "@v"
0ac0: 29 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28  ), new IntValue(
0ad0: 42 69 67 49 6e 74 28 31 29 29 20 29 3b 0d 0a 09  BigInt(1)) );...
0ae0: 61 73 73 65 72 74 5f 65 71 28 20 63 30 31 2e 67  assert_eq( c01.g
0af0: 65 74 28 22 79 22 2c 20 22 40 76 22 29 2c 20 6e  et("y", "@v"), n
0b00: 65 77 20 49 6e 74 56 61 6c 75 65 28 42 69 67 49  ew IntValue(BigI
0b10: 6e 74 28 31 29 29 20 29 3b 0d 0a 0d 0a 09 61 73  nt(1)) );.....as
0b20: 73 65 72 74 5f 6e 6f 74 68 72 6f 77 28 20 63 30  sert_nothrow( c0
0b30: 2e 73 65 74 28 22 7a 22 2c 20 22 40 76 22 2c 20  .set("z", "@v", 
0b40: 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 42 69 67  new IntValue(Big
0b50: 49 6e 74 28 30 29 29 29 20 29 3b 0d 0a 09 61 73  Int(0))) );...as
0b60: 73 65 72 74 5f 65 71 28 20 63 30 31 33 2e 67 65  sert_eq( c013.ge
0b70: 74 28 22 7a 22 2c 20 22 40 76 22 29 2c 20 6e 65  t("z", "@v"), ne
0b80: 77 20 49 6e 74 56 61 6c 75 65 28 42 69 67 49 6e  w IntValue(BigIn
0b90: 74 28 30 29 29 20 29 3b 0d 0a 09 61 73 73 65 72  t(0)) );...asser
0ba0: 74 5f 65 71 28 20 63 30 31 32 2e 67 65 74 28 22  t_eq( c012.get("
0bb0: 7a 22 2c 20 22 40 76 22 29 2c 20 6e 65 77 20 49  z", "@v"), new I
0bc0: 6e 74 56 61 6c 75 65 28 42 69 67 49 6e 74 28 30  ntValue(BigInt(0
0bd0: 29 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 5f 65  )) );...assert_e
0be0: 71 28 20 63 30 31 2e 67 65 74 28 22 7a 22 2c 20  q( c01.get("z", 
0bf0: 22 40 76 22 29 2c 20 6e 65 77 20 49 6e 74 56 61  "@v"), new IntVa
0c00: 6c 75 65 28 42 69 67 49 6e 74 28 30 29 29 20 29  lue(BigInt(0)) )
0c10: 3b 0d 0a 09 61 73 73 65 72 74 5f 65 71 28 20 63  ;...assert_eq( c
0c20: 30 2e 67 65 74 28 22 7a 22 2c 20 22 40 76 22 29  0.get("z", "@v")
0c30: 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 42  , new IntValue(B
0c40: 69 67 49 6e 74 28 30 29 29 20 29 3b 0d 0a 0d 0a  igInt(0)) );....
0c50: 09 61 73 73 65 72 74 5f 6e 6f 74 68 72 6f 77 28  .assert_nothrow(
0c60: 20 63 30 31 32 2e 73 65 74 28 22 79 22 2c 20 22   c012.set("y", "
0c70: 40 76 22 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75  @v", new IntValu
0c80: 65 28 42 69 67 49 6e 74 28 34 34 34 29 29 29 20  e(BigInt(444))) 
0c90: 29 3b 0d 0a 09 61 73 73 65 72 74 5f 65 71 28 20  );...assert_eq( 
0ca0: 63 30 31 33 2e 67 65 74 28 22 79 22 2c 20 22 40  c013.get("y", "@
0cb0: 76 22 29 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75  v"), new IntValu
0cc0: 65 28 42 69 67 49 6e 74 28 34 34 34 29 29 20 29  e(BigInt(444)) )
0cd0: 3b 0d 0a 09 61 73 73 65 72 74 5f 65 71 28 20 63  ;...assert_eq( c
0ce0: 30 31 32 2e 67 65 74 28 22 79 22 2c 20 22 40 76  012.get("y", "@v
0cf0: 22 29 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75 65  "), new IntValue
0d00: 28 42 69 67 49 6e 74 28 34 34 34 29 29 20 29 3b  (BigInt(444)) );
0d10: 0d 0a 09 61 73 73 65 72 74 5f 65 71 28 20 63 30  ...assert_eq( c0
0d20: 31 2e 67 65 74 28 22 79 22 2c 20 22 40 76 22 29  1.get("y", "@v")
0d30: 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 42  , new IntValue(B
0d40: 69 67 49 6e 74 28 34 34 34 29 29 20 29 3b 0d 0a  igInt(444)) );..
0d50: 0d 0a 09 61 73 73 65 72 74 5f 6e 6f 74 68 72 6f  ...assert_nothro
0d60: 77 28 20 63 30 31 32 2e 73 65 74 28 22 7a 22 2c  w( c012.set("z",
0d70: 20 22 40 76 22 2c 20 6e 65 77 20 49 6e 74 56 61   "@v", new IntVa
0d80: 6c 75 65 28 42 69 67 49 6e 74 28 35 35 35 29 29  lue(BigInt(555))
0d90: 29 20 29 3b 0d 0a 09 61 73 73 65 72 74 5f 65 71  ) );...assert_eq
0da0: 28 20 63 30 31 33 2e 67 65 74 28 22 7a 22 2c 20  ( c013.get("z", 
0db0: 22 40 76 22 29 2c 20 6e 65 77 20 49 6e 74 56 61  "@v"), new IntVa
0dc0: 6c 75 65 28 42 69 67 49 6e 74 28 30 29 29 20 29  lue(BigInt(0)) )
0dd0: 3b 0d 0a 09 61 73 73 65 72 74 5f 65 71 28 20 63  ;...assert_eq( c
0de0: 30 31 32 2e 67 65 74 28 22 7a 22 2c 20 22 40 76  012.get("z", "@v
0df0: 22 29 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75 65  "), new IntValue
0e00: 28 42 69 67 49 6e 74 28 35 35 35 29 29 20 29 3b  (BigInt(555)) );
0e10: 0d 0a 09 61 73 73 65 72 74 5f 65 71 28 20 63 30  ...assert_eq( c0
0e20: 31 2e 67 65 74 28 22 7a 22 2c 20 22 40 76 22 29  1.get("z", "@v")
0e30: 2c 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 42  , new IntValue(B
0e40: 69 67 49 6e 74 28 30 29 29 20 29 3b 0d 0a 09 61  igInt(0)) );...a
0e50: 73 73 65 72 74 5f 65 71 28 20 63 30 2e 67 65 74  ssert_eq( c0.get
0e60: 28 22 7a 22 2c 20 22 40 76 22 29 2c 20 6e 65 77  ("z", "@v"), new
0e70: 20 49 6e 74 56 61 6c 75 65 28 42 69 67 49 6e 74   IntValue(BigInt
0e80: 28 30 29 29 20 29 3b 0d 0a 0d 0a 09 2f 2f 20 5b  (0)) );.....// [
0e90: 54 4f 44 4f 5d 20 64 65 66 69 6e 65 20 74 68 65  TODO] define the
0ea0: 20 73 65 6d 61 6e 74 69 63 73 20 61 6e 64 20 74   semantics and t
0eb0: 65 73 74 20 40 6c 61 79 65 72 73 0d 0a 7d 0d 0a  est @layers..}..