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..}..