Hex Artifact Content
Not logged in

Artifact 641d49d7fd64751954054e46cee5f719c96c7969:


0000: 0d 0a 2f 2a 2a 0a 20 2a 20 41 75 74 68 6f 72 73  ../**. * Authors
0010: 3a 20 6b 2e 69 6e 61 62 61 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 0a 20 2a  nos.net/nysl/. *
0050: 0a 20 2a 20 52 75 6e 74 69 6d 65 20 6c 69 62 72  . * Runtime libr
0060: 61 72 79 20 66 6f 72 20 50 6f 6c 65 6d 79 20 70  ary for Polemy p
0070: 72 6f 67 72 61 6d 6d 69 6e 67 20 6c 61 6e 67 75  rogramming langu
0080: 61 67 65 2e 0a 20 2a 2f 0a 6d 6f 64 75 6c 65 20  age.. */.module 
0090: 70 6f 6c 65 6d 79 2e 72 75 6e 74 69 6d 65 3b 0a  polemy.runtime;.
00a0: 69 6d 70 6f 72 74 20 70 6f 6c 65 6d 79 2e 5f 63  import polemy._c
00b0: 6f 6d 6d 6f 6e 3b 0a 69 6d 70 6f 72 74 20 70 6f  ommon;.import po
00c0: 6c 65 6d 79 2e 6c 61 79 65 72 3b 0d 0a 69 6d 70  lemy.layer;..imp
00d0: 6f 72 74 20 70 6f 6c 65 6d 79 2e 66 61 69 6c 75  ort polemy.failu
00e0: 72 65 3b 0d 0a 69 6d 70 6f 72 74 20 70 6f 6c 65  re;..import pole
00f0: 6d 79 2e 76 61 6c 75 65 3b 0a 69 6d 70 6f 72 74  my.value;.import
0100: 20 70 6f 6c 65 6d 79 2e 65 76 61 6c 3b 0a 69 6d   polemy.eval;.im
0110: 70 6f 72 74 20 73 74 64 2e 73 74 64 69 6f 3b 0a  port std.stdio;.
0120: 0d 0a 2f 2f 2f 20 65 6e 72 6f 6c 6c 20 74 68 65  ../// enroll the
0130: 20 6e 61 74 69 76 65 20 69 6d 70 6c 65 6d 65 6e   native implemen
0140: 74 61 74 69 6f 6e 73 20 6f 66 20 70 72 69 6d 69  tations of primi
0150: 74 69 76 65 20 66 75 6e 63 74 69 6f 6e 73 0d 0a  tive functions..
0160: 0d 0a 76 6f 69 64 20 65 6e 72 6f 6c 6c 52 75 6e  ..void enrollRun
0170: 74 69 6d 65 4c 69 62 72 61 72 79 28 20 45 76 61  timeLibrary( Eva
0180: 6c 75 61 74 6f 72 20 65 20 29 0d 0a 7b 0d 0a 09  luator e )..{...
0190: 2f 2f 20 61 72 69 74 68 6d 65 74 69 63 20 6f 70  // arithmetic op
01a0: 65 72 61 74 69 6f 6e 73 0d 0a 09 65 2e 61 64 64  erations...e.add
01b0: 50 72 69 6d 69 74 69 76 65 28 22 2b 22 2c 20 20  Primitive("+",  
01c0: 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09 09 28  ValueLayer,....(
01d0: 49 6e 74 56 61 6c 75 65 20 6c 68 73 2c 20 49 6e  IntValue lhs, In
01e0: 74 56 61 6c 75 65 20 72 68 73 29 7b 72 65 74 75  tValue rhs){retu
01f0: 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28  rn new IntValue(
0200: 6c 68 73 2e 64 61 74 61 20 2b 20 72 68 73 2e 64  lhs.data + rhs.d
0210: 61 74 61 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64  ata);} );...e.ad
0220: 64 50 72 69 6d 69 74 69 76 65 28 22 2d 22 2c 20  dPrimitive("-", 
0230: 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09 09   ValueLayer,....
0240: 28 49 6e 74 56 61 6c 75 65 20 6c 68 73 2c 20 49  (IntValue lhs, I
0250: 6e 74 56 61 6c 75 65 20 72 68 73 29 7b 72 65 74  ntValue rhs){ret
0260: 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 65  urn new IntValue
0270: 28 6c 68 73 2e 64 61 74 61 20 2d 20 72 68 73 2e  (lhs.data - rhs.
0280: 64 61 74 61 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61  data);} );...e.a
0290: 64 64 50 72 69 6d 69 74 69 76 65 28 22 2a 22 2c  ddPrimitive("*",
02a0: 20 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09    ValueLayer,...
02b0: 09 28 49 6e 74 56 61 6c 75 65 20 6c 68 73 2c 20  .(IntValue lhs, 
02c0: 49 6e 74 56 61 6c 75 65 20 72 68 73 29 7b 72 65  IntValue rhs){re
02d0: 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75  turn new IntValu
02e0: 65 28 6c 68 73 2e 64 61 74 61 20 2a 20 72 68 73  e(lhs.data * rhs
02f0: 2e 64 61 74 61 29 3b 7d 20 29 3b 0d 0a 09 65 2e  .data);} );...e.
0300: 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 2f 22  addPrimitive("/"
0310: 2c 20 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a  ,  ValueLayer,..
0320: 09 09 28 49 6e 74 56 61 6c 75 65 20 6c 68 73 2c  ..(IntValue lhs,
0330: 20 49 6e 74 56 61 6c 75 65 20 72 68 73 29 7b 0d   IntValue rhs){.
0340: 0a 09 09 09 69 66 28 20 72 68 73 2e 64 61 74 61  ....if( rhs.data
0350: 20 3d 3d 20 30 20 29 0d 0a 09 09 09 09 74 68 72   == 0 )......thr
0360: 6f 77 20 67 65 6e 65 78 21 52 75 6e 74 69 6d 65  ow genex!Runtime
0370: 45 78 63 65 70 74 69 6f 6e 28 22 64 69 76 69 73  Exception("divis
0380: 69 6f 6e 20 62 79 20 30 22 29 3b 0d 0a 09 09 09  ion by 0");.....
0390: 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61  return new IntVa
03a0: 6c 75 65 28 6c 68 73 2e 64 61 74 61 20 2f 20 72  lue(lhs.data / r
03b0: 68 73 2e 64 61 74 61 29 3b 0d 0a 09 09 7d 29 3b  hs.data);....});
03c0: 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69 76  ...e.addPrimitiv
03d0: 65 28 22 25 22 2c 20 20 56 61 6c 75 65 4c 61 79  e("%",  ValueLay
03e0: 65 72 2c 0d 0a 09 09 28 49 6e 74 56 61 6c 75 65  er,....(IntValue
03f0: 20 6c 68 73 2c 20 49 6e 74 56 61 6c 75 65 20 72   lhs, IntValue r
0400: 68 73 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49  hs){return new I
0410: 6e 74 56 61 6c 75 65 28 6c 68 73 2e 64 61 74 61  ntValue(lhs.data
0420: 20 25 20 72 68 73 2e 64 61 74 61 29 3b 7d 20 29   % rhs.data);} )
0430: 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69  ;...e.addPrimiti
0440: 76 65 28 22 7c 7c 22 2c 20 56 61 6c 75 65 4c 61  ve("||", ValueLa
0450: 79 65 72 2c 0d 0a 09 09 28 49 6e 74 56 61 6c 75  yer,....(IntValu
0460: 65 20 6c 68 73 2c 20 49 6e 74 56 61 6c 75 65 20  e lhs, IntValue 
0470: 72 68 73 29 7b 72 65 74 75 72 6e 20 6e 65 77 20  rhs){return new 
0480: 49 6e 74 56 61 6c 75 65 28 6c 68 73 2e 64 61 74  IntValue(lhs.dat
0490: 61 21 3d 30 20 7c 7c 20 72 68 73 2e 64 61 74 61  a!=0 || rhs.data
04a0: 21 3d 30 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64  !=0);} );...e.ad
04b0: 64 50 72 69 6d 69 74 69 76 65 28 22 26 26 22 2c  dPrimitive("&&",
04c0: 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09 09   ValueLayer,....
04d0: 28 49 6e 74 56 61 6c 75 65 20 6c 68 73 2c 20 49  (IntValue lhs, I
04e0: 6e 74 56 61 6c 75 65 20 72 68 73 29 7b 72 65 74  ntValue rhs){ret
04f0: 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 65  urn new IntValue
0500: 28 6c 68 73 2e 64 61 74 61 21 3d 30 20 26 26 20  (lhs.data!=0 && 
0510: 72 68 73 2e 64 61 74 61 21 3d 30 29 3b 7d 20 29  rhs.data!=0);} )
0520: 3b 0d 0a 09 2f 2f 20 73 74 72 69 6e 67 20 6f 70  ;...// string op
0530: 65 72 61 74 69 6f 6e 28 73 29 0d 0a 09 65 2e 61  eration(s)...e.a
0540: 64 64 50 72 69 6d 69 74 69 76 65 28 22 7e 22 2c  ddPrimitive("~",
0550: 20 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09    ValueLayer,...
0560: 09 28 56 61 6c 75 65 20 6c 68 73 2c 20 56 61 6c  .(Value lhs, Val
0570: 75 65 20 72 68 73 29 7b 72 65 74 75 72 6e 20 6e  ue rhs){return n
0580: 65 77 20 53 74 72 56 61 6c 75 65 28 6c 68 73 2e  ew StrValue(lhs.
0590: 74 6f 53 74 72 69 6e 67 20 7e 20 72 68 73 2e 74  toString ~ rhs.t
05a0: 6f 53 74 72 69 6e 67 29 3b 7d 20 29 3b 0d 0a 09  oString);} );...
05b0: 2f 2f 20 63 6f 6d 70 61 72 69 73 6f 6e 0d 0a 09  // comparison...
05c0: 65 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 22  e.addPrimitive("
05d0: 3c 22 2c 20 20 56 61 6c 75 65 4c 61 79 65 72 2c  <",  ValueLayer,
05e0: 20 28 56 61 6c 75 65 20 6c 68 73 2c 20 56 61 6c   (Value lhs, Val
05f0: 75 65 20 72 68 73 29 7b 72 65 74 75 72 6e 20 6e  ue rhs){return n
0600: 65 77 20 49 6e 74 56 61 6c 75 65 28 6c 68 73 20  ew IntValue(lhs 
0610: 3c 20 72 68 73 29 3b 7d 20 29 3b 0d 0a 09 65 2e  < rhs);} );...e.
0620: 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 3e 22  addPrimitive(">"
0630: 2c 20 20 56 61 6c 75 65 4c 61 79 65 72 2c 20 28  ,  ValueLayer, (
0640: 56 61 6c 75 65 20 6c 68 73 2c 20 56 61 6c 75 65  Value lhs, Value
0650: 20 72 68 73 29 7b 72 65 74 75 72 6e 20 6e 65 77   rhs){return new
0660: 20 49 6e 74 56 61 6c 75 65 28 6c 68 73 20 3e 20   IntValue(lhs > 
0670: 72 68 73 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64  rhs);} );...e.ad
0680: 64 50 72 69 6d 69 74 69 76 65 28 22 3c 3d 22 2c  dPrimitive("<=",
0690: 20 56 61 6c 75 65 4c 61 79 65 72 2c 20 28 56 61   ValueLayer, (Va
06a0: 6c 75 65 20 6c 68 73 2c 20 56 61 6c 75 65 20 72  lue lhs, Value r
06b0: 68 73 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49  hs){return new I
06c0: 6e 74 56 61 6c 75 65 28 6c 68 73 20 3c 3d 20 72  ntValue(lhs <= r
06d0: 68 73 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64  hs);} );...e.add
06e0: 50 72 69 6d 69 74 69 76 65 28 22 3e 3d 22 2c 20  Primitive(">=", 
06f0: 56 61 6c 75 65 4c 61 79 65 72 2c 20 28 56 61 6c  ValueLayer, (Val
0700: 75 65 20 6c 68 73 2c 20 56 61 6c 75 65 20 72 68  ue lhs, Value rh
0710: 73 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e  s){return new In
0720: 74 56 61 6c 75 65 28 6c 68 73 20 3e 3d 20 72 68  tValue(lhs >= rh
0730: 73 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50  s);} );...e.addP
0740: 72 69 6d 69 74 69 76 65 28 22 3d 3d 22 2c 20 56  rimitive("==", V
0750: 61 6c 75 65 4c 61 79 65 72 2c 20 28 56 61 6c 75  alueLayer, (Valu
0760: 65 20 6c 68 73 2c 20 56 61 6c 75 65 20 72 68 73  e lhs, Value rhs
0770: 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74  ){return new Int
0780: 56 61 6c 75 65 28 6c 68 73 20 3d 3d 20 72 68 73  Value(lhs == rhs
0790: 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72  );} );...e.addPr
07a0: 69 6d 69 74 69 76 65 28 22 21 3d 22 2c 20 56 61  imitive("!=", Va
07b0: 6c 75 65 4c 61 79 65 72 2c 20 28 56 61 6c 75 65  lueLayer, (Value
07c0: 20 6c 68 73 2c 20 56 61 6c 75 65 20 72 68 73 29   lhs, Value rhs)
07d0: 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56  {return new IntV
07e0: 61 6c 75 65 28 6c 68 73 20 21 3d 20 72 68 73 29  alue(lhs != rhs)
07f0: 3b 7d 20 29 3b 0d 0a 09 2f 2f 20 63 6f 6e 74 72  ;} );...// contr
0800: 6f 6c 20 66 6c 6f 77 0d 0a 09 65 2e 61 64 64 50  ol flow...e.addP
0810: 72 69 6d 69 74 69 76 65 28 22 69 66 22 2c 20 56  rimitive("if", V
0820: 61 6c 75 65 4c 61 79 65 72 2c 20 28 49 6e 74 56  alueLayer, (IntV
0830: 61 6c 75 65 20 78 2c 20 46 75 6e 56 61 6c 75 65  alue x, FunValue
0840: 20 66 74 2c 20 46 75 6e 56 61 6c 75 65 20 66 65   ft, FunValue fe
0850: 29 7b 0d 0a 09 09 61 75 74 6f 20 74 6f 52 75 6e  ){....auto toRun
0860: 20 3d 20 28 78 2e 64 61 74 61 3d 3d 30 20 3f 20   = (x.data==0 ? 
0870: 66 65 20 3a 20 66 74 29 3b 0d 0a 09 09 72 65 74  fe : ft);....ret
0880: 75 72 6e 20 74 6f 52 75 6e 2e 69 6e 76 6f 6b 65  urn toRun.invoke
0890: 28 56 61 6c 75 65 4c 61 79 65 72 2c 20 74 6f 52  (ValueLayer, toR
08a0: 75 6e 2e 64 65 66 69 6e 69 74 69 6f 6e 43 6f 6e  un.definitionCon
08b0: 74 65 78 74 28 29 2c 20 6e 75 6c 6c 29 3b 0d 0a  text(), null);..
08c0: 09 7d 29 3b 0d 0a 09 2f 2f 20 74 79 70 65 20 74  .});...// type t
08d0: 65 73 74 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69  est...e.addPrimi
08e0: 74 69 76 65 28 22 5f 69 73 69 6e 74 22 2c 20 56  tive("_isint", V
08f0: 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09 09 28 56  alueLayer,....(V
0900: 61 6c 75 65 20 76 29 7b 72 65 74 75 72 6e 20 6e  alue v){return n
0910: 65 77 20 49 6e 74 56 61 6c 75 65 28 63 61 73 74  ew IntValue(cast
0920: 28 49 6e 74 56 61 6c 75 65 29 76 20 21 69 73 20  (IntValue)v !is 
0930: 6e 75 6c 6c 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61  null);} );...e.a
0940: 64 64 50 72 69 6d 69 74 69 76 65 28 22 5f 69 73  ddPrimitive("_is
0950: 73 74 72 22 2c 20 56 61 6c 75 65 4c 61 79 65 72  str", ValueLayer
0960: 2c 0d 0a 09 09 28 56 61 6c 75 65 20 76 29 7b 72  ,....(Value v){r
0970: 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c  eturn new IntVal
0980: 75 65 28 63 61 73 74 28 53 74 72 56 61 6c 75 65  ue(cast(StrValue
0990: 29 76 20 21 69 73 20 6e 75 6c 6c 29 3b 7d 20 29  )v !is null);} )
09a0: 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69  ;...e.addPrimiti
09b0: 76 65 28 22 5f 69 73 66 75 6e 22 2c 20 56 61 6c  ve("_isfun", Val
09c0: 75 65 4c 61 79 65 72 2c 0d 0a 09 09 28 56 61 6c  ueLayer,....(Val
09d0: 75 65 20 76 29 7b 72 65 74 75 72 6e 20 6e 65 77  ue v){return new
09e0: 20 49 6e 74 56 61 6c 75 65 28 63 61 73 74 28 46   IntValue(cast(F
09f0: 75 6e 56 61 6c 75 65 29 76 20 21 69 73 20 6e 75  unValue)v !is nu
0a00: 6c 6c 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64  ll);} );...e.add
0a10: 50 72 69 6d 69 74 69 76 65 28 22 5f 69 73 75 6e  Primitive("_isun
0a20: 64 65 66 69 6e 65 64 22 2c 20 56 61 6c 75 65 4c  defined", ValueL
0a30: 61 79 65 72 2c 0d 0a 09 09 28 56 61 6c 75 65 20  ayer,....(Value 
0a40: 76 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e  v){return new In
0a50: 74 56 61 6c 75 65 28 63 61 73 74 28 55 6e 64 65  tValue(cast(Unde
0a60: 66 69 6e 65 64 56 61 6c 75 65 29 76 20 21 69 73  finedValue)v !is
0a70: 20 6e 75 6c 6c 29 3b 7d 20 29 3b 0d 0a 09 65 2e   null);} );...e.
0a80: 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 5f 69  addPrimitive("_i
0a90: 73 74 61 62 6c 65 22 2c 20 56 61 6c 75 65 4c 61  stable", ValueLa
0aa0: 79 65 72 2c 0d 0a 09 09 28 56 61 6c 75 65 20 76  yer,....(Value v
0ab0: 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74  ){return new Int
0ac0: 56 61 6c 75 65 28 63 61 73 74 28 54 61 62 6c 65  Value(cast(Table
0ad0: 29 76 20 21 69 73 20 6e 75 6c 6c 29 3b 7d 20 29  )v !is null);} )
0ae0: 3b 0d 0a 09 2f 2f 20 74 61 62 6c 65 0d 0a 09 65  ;...// table...e
0af0: 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 2e  .addPrimitive(".
0b00: 22 2c 20 56 61 6c 75 65 4c 61 79 65 72 2c 20 28  ", ValueLayer, (
0b10: 54 61 62 6c 65 20 74 2c 20 53 74 72 56 61 6c 75  Table t, StrValu
0b20: 65 20 73 29 7b 0d 0a 09 09 72 65 74 75 72 6e 20  e s){....return 
0b30: 28 74 2e 68 61 73 28 73 2e 64 61 74 61 2c 20 56  (t.has(s.data, V
0b40: 61 6c 75 65 4c 61 79 65 72 29 20 3f 20 74 2e 67  alueLayer) ? t.g
0b50: 65 74 28 73 2e 64 61 74 61 2c 20 56 61 6c 75 65  et(s.data, Value
0b60: 4c 61 79 65 72 29 20 3a 20 6e 65 77 20 55 6e 64  Layer) : new Und
0b70: 65 66 69 6e 65 64 56 61 6c 75 65 29 3b 0d 0a 09  efinedValue);...
0b80: 7d 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69  });...e.addPrimi
0b90: 74 69 76 65 28 22 2e 3f 22 2c 20 56 61 6c 75 65  tive(".?", Value
0ba0: 4c 61 79 65 72 2c 20 28 54 61 62 6c 65 20 74 2c  Layer, (Table t,
0bb0: 20 53 74 72 56 61 6c 75 65 20 73 29 7b 0d 0a 09   StrValue s){...
0bc0: 09 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56  .return new IntV
0bd0: 61 6c 75 65 28 74 2e 68 61 73 28 73 2e 64 61 74  alue(t.has(s.dat
0be0: 61 2c 20 56 61 6c 75 65 4c 61 79 65 72 29 29 3b  a, ValueLayer));
0bf0: 0d 0a 09 7d 29 3b 0d 0a 09 65 2e 61 64 64 50 72  ...});...e.addPr
0c00: 69 6d 69 74 69 76 65 28 22 2e 3d 22 2c 20 56 61  imitive(".=", Va
0c10: 6c 75 65 4c 61 79 65 72 2c 20 28 54 61 62 6c 65  lueLayer, (Table
0c20: 20 74 2c 20 53 74 72 56 61 6c 75 65 20 73 2c 20   t, StrValue s, 
0c30: 56 61 6c 75 65 20 76 29 7b 0d 0a 09 09 61 75 74  Value v){....aut
0c40: 6f 20 74 32 20 3d 20 6e 65 77 20 54 61 62 6c 65  o t2 = new Table
0c50: 28 74 2c 20 54 61 62 6c 65 2e 4b 69 6e 64 2e 4e  (t, Table.Kind.N
0c60: 6f 74 50 72 6f 70 61 67 61 74 65 53 65 74 29 3b  otPropagateSet);
0c70: 0d 0a 09 09 74 32 2e 73 65 74 28 73 2e 64 61 74  ....t2.set(s.dat
0c80: 61 2c 20 56 61 6c 75 65 4c 61 79 65 72 2c 20 76  a, ValueLayer, v
0c90: 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20 74 32 3b  );....return t2;
0ca0: 0d 0a 09 7d 29 3b 0d 0a 09 65 2e 61 64 64 50 72  ...});...e.addPr
0cb0: 69 6d 69 74 69 76 65 28 22 7b 7d 22 2c 20 56 61  imitive("{}", Va
0cc0: 6c 75 65 4c 61 79 65 72 2c 20 28 29 7b 0d 0a 09  lueLayer, (){...
0cd0: 09 72 65 74 75 72 6e 20 6e 65 77 20 54 61 62 6c  .return new Tabl
0ce0: 65 3b 0d 0a 09 7d 29 3b 0d 0a 09 2f 2f 20 49 4f  e;...});...// IO
0cf0: 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69 76  ...e.addPrimitiv
0d00: 65 28 22 70 72 69 6e 74 22 2c 20 56 61 6c 75 65  e("print", Value
0d10: 4c 61 79 65 72 2c 20 28 56 61 6c 75 65 20 61 29  Layer, (Value a)
0d20: 7b 20 77 72 69 74 65 6c 6e 28 61 29 3b 20 72 65  { writeln(a); re
0d30: 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75  turn new IntValu
0d40: 65 28 30 29 3b 20 7d 29 3b 0d 0a 7d 0d 0a        e(0); });..}..