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 66 72 65 73 68 3b 0d 0a 69 6d 70 6f 72 my.fresh;..impor
0100: 74 20 70 6f 6c 65 6d 79 2e 76 61 6c 75 65 3b 0d t polemy.value;.
0110: 0a 69 6d 70 6f 72 74 20 70 6f 6c 65 6d 79 2e 65 .import polemy.e
0120: 76 61 6c 3b 0a 69 6d 70 6f 72 74 20 73 74 64 2e val;.import std.
0130: 73 74 64 69 6f 3b 0a 69 6d 70 6f 72 74 20 73 74 stdio;.import st
0140: 64 2e 72 61 6e 64 6f 6d 3b 0d 0a 0d 0a 2f 2f 2f d.random;....///
0150: 20 65 6e 72 6f 6c 6c 20 74 68 65 20 6e 61 74 69 enroll the nati
0160: 76 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f ve implementatio
0170: 6e 73 20 6f 66 20 70 72 69 6d 69 74 69 76 65 20 ns of primitive
0180: 66 75 6e 63 74 69 6f 6e 73 0d 0a 0d 0a 76 6f 69 functions....voi
0190: 64 20 65 6e 72 6f 6c 6c 52 75 6e 74 69 6d 65 4c d enrollRuntimeL
01a0: 69 62 72 61 72 79 28 20 45 76 61 6c 75 61 74 6f ibrary( Evaluato
01b0: 72 20 65 20 29 0d 0a 7b 0d 0a 09 2f 2f 20 61 72 r e )..{...// ar
01c0: 69 74 68 6d 65 74 69 63 20 6f 70 65 72 61 74 69 ithmetic operati
01d0: 6f 6e 73 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 ons...e.addPrimi
01e0: 74 69 76 65 28 22 2b 22 2c 20 20 56 61 6c 75 65 tive("+", Value
01f0: 4c 61 79 65 72 2c 0d 0a 09 09 28 49 6e 74 56 61 Layer,....(IntVa
0200: 6c 75 65 20 6c 68 73 2c 20 49 6e 74 56 61 6c 75 lue lhs, IntValu
0210: 65 20 72 68 73 29 7b 72 65 74 75 72 6e 20 6e 65 e rhs){return ne
0220: 77 20 49 6e 74 56 61 6c 75 65 28 6c 68 73 2e 64 w IntValue(lhs.d
0230: 61 74 61 20 2b 20 72 68 73 2e 64 61 74 61 29 3b ata + rhs.data);
0240: 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d } );...e.addPrim
0250: 69 74 69 76 65 28 22 2d 22 2c 20 20 56 61 6c 75 itive("-", Valu
0260: 65 4c 61 79 65 72 2c 0d 0a 09 09 28 49 6e 74 56 eLayer,....(IntV
0270: 61 6c 75 65 20 6c 68 73 2c 20 49 6e 74 56 61 6c alue lhs, IntVal
0280: 75 65 20 72 68 73 29 7b 72 65 74 75 72 6e 20 6e ue rhs){return n
0290: 65 77 20 49 6e 74 56 61 6c 75 65 28 6c 68 73 2e ew IntValue(lhs.
02a0: 64 61 74 61 20 2d 20 72 68 73 2e 64 61 74 61 29 data - rhs.data)
02b0: 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 ;} );...e.addPri
02c0: 6d 69 74 69 76 65 28 22 2a 22 2c 20 20 56 61 6c mitive("*", Val
02d0: 75 65 4c 61 79 65 72 2c 0d 0a 09 09 28 49 6e 74 ueLayer,....(Int
02e0: 56 61 6c 75 65 20 6c 68 73 2c 20 49 6e 74 56 61 Value lhs, IntVa
02f0: 6c 75 65 20 72 68 73 29 7b 72 65 74 75 72 6e 20 lue rhs){return
0300: 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 6c 68 73 new IntValue(lhs
0310: 2e 64 61 74 61 20 2a 20 72 68 73 2e 64 61 74 61 .data * rhs.data
0320: 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 );} );...e.addPr
0330: 69 6d 69 74 69 76 65 28 22 2f 22 2c 20 20 56 61 imitive("/", Va
0340: 6c 75 65 4c 61 79 65 72 2c 0d 0a 09 09 28 49 6e lueLayer,....(In
0350: 74 56 61 6c 75 65 20 6c 68 73 2c 20 49 6e 74 56 tValue lhs, IntV
0360: 61 6c 75 65 20 72 68 73 29 7b 0d 0a 09 09 09 69 alue rhs){.....i
0370: 66 28 20 72 68 73 2e 64 61 74 61 20 3d 3d 20 30 f( rhs.data == 0
0380: 20 29 0d 0a 09 09 09 09 74 68 72 6f 77 20 67 65 )......throw ge
0390: 6e 65 78 21 52 75 6e 74 69 6d 65 45 78 63 65 70 nex!RuntimeExcep
03a0: 74 69 6f 6e 28 22 64 69 76 69 73 69 6f 6e 20 62 tion("division b
03b0: 79 20 30 22 29 3b 0d 0a 09 09 09 72 65 74 75 72 y 0");.....retur
03c0: 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 6c n new IntValue(l
03d0: 68 73 2e 64 61 74 61 20 2f 20 72 68 73 2e 64 61 hs.data / rhs.da
03e0: 74 61 29 3b 0d 0a 09 09 7d 29 3b 0d 0a 09 65 2e ta);....});...e.
03f0: 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 25 22 addPrimitive("%"
0400: 2c 20 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a , ValueLayer,..
0410: 09 09 28 49 6e 74 56 61 6c 75 65 20 6c 68 73 2c ..(IntValue lhs,
0420: 20 49 6e 74 56 61 6c 75 65 20 72 68 73 29 7b 72 IntValue rhs){r
0430: 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c eturn new IntVal
0440: 75 65 28 6c 68 73 2e 64 61 74 61 20 25 20 72 68 ue(lhs.data % rh
0450: 73 2e 64 61 74 61 29 3b 7d 20 29 3b 0d 0a 09 65 s.data);} );...e
0460: 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 7c .addPrimitive("|
0470: 7c 22 2c 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d |", ValueLayer,.
0480: 0a 09 09 28 49 6e 74 56 61 6c 75 65 20 6c 68 73 ...(IntValue lhs
0490: 2c 20 49 6e 74 56 61 6c 75 65 20 72 68 73 29 7b , IntValue rhs){
04a0: 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 return new IntVa
04b0: 6c 75 65 28 6c 68 73 2e 64 61 74 61 21 3d 30 20 lue(lhs.data!=0
04c0: 7c 7c 20 72 68 73 2e 64 61 74 61 21 3d 30 29 3b || rhs.data!=0);
04d0: 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d } );...e.addPrim
04e0: 69 74 69 76 65 28 22 26 26 22 2c 20 56 61 6c 75 itive("&&", Valu
04f0: 65 4c 61 79 65 72 2c 0d 0a 09 09 28 49 6e 74 56 eLayer,....(IntV
0500: 61 6c 75 65 20 6c 68 73 2c 20 49 6e 74 56 61 6c alue lhs, IntVal
0510: 75 65 20 72 68 73 29 7b 72 65 74 75 72 6e 20 6e ue rhs){return n
0520: 65 77 20 49 6e 74 56 61 6c 75 65 28 6c 68 73 2e ew IntValue(lhs.
0530: 64 61 74 61 21 3d 30 20 26 26 20 72 68 73 2e 64 data!=0 && rhs.d
0540: 61 74 61 21 3d 30 29 3b 7d 20 29 3b 0d 0a 09 2f ata!=0);} );.../
0550: 2f 20 73 74 72 69 6e 67 20 6f 70 65 72 61 74 69 / string operati
0560: 6f 6e 28 73 29 0d 0a 09 65 2e 61 64 64 50 72 69 on(s)...e.addPri
0570: 6d 69 74 69 76 65 28 22 7e 22 2c 20 20 56 61 6c mitive("~", Val
0580: 75 65 4c 61 79 65 72 2c 0d 0a 09 09 28 56 61 6c ueLayer,....(Val
0590: 75 65 20 6c 68 73 2c 20 56 61 6c 75 65 20 72 68 ue lhs, Value rh
05a0: 73 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 53 74 s){return new St
05b0: 72 56 61 6c 75 65 28 6c 68 73 2e 74 6f 53 74 72 rValue(lhs.toStr
05c0: 69 6e 67 20 7e 20 72 68 73 2e 74 6f 53 74 72 69 ing ~ rhs.toStri
05d0: 6e 67 29 3b 7d 20 29 3b 0d 0a 09 2f 2f 20 63 6f ng);} );...// co
05e0: 6d 70 61 72 69 73 6f 6e 0d 0a 09 65 2e 61 64 64 mparison...e.add
05f0: 50 72 69 6d 69 74 69 76 65 28 22 3c 22 2c 20 20 Primitive("<",
0600: 56 61 6c 75 65 4c 61 79 65 72 2c 20 28 56 61 6c ValueLayer, (Val
0610: 75 65 20 6c 68 73 2c 20 56 61 6c 75 65 20 72 68 ue lhs, Value rh
0620: 73 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e s){return new In
0630: 74 56 61 6c 75 65 28 6c 68 73 20 3c 20 72 68 73 tValue(lhs < rhs
0640: 29 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 );} );...e.addPr
0650: 69 6d 69 74 69 76 65 28 22 3e 22 2c 20 20 56 61 imitive(">", Va
0660: 6c 75 65 4c 61 79 65 72 2c 20 28 56 61 6c 75 65 lueLayer, (Value
0670: 20 6c 68 73 2c 20 56 61 6c 75 65 20 72 68 73 29 lhs, Value rhs)
0680: 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 {return new IntV
0690: 61 6c 75 65 28 6c 68 73 20 3e 20 72 68 73 29 3b alue(lhs > rhs);
06a0: 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d } );...e.addPrim
06b0: 69 74 69 76 65 28 22 3c 3d 22 2c 20 56 61 6c 75 itive("<=", Valu
06c0: 65 4c 61 79 65 72 2c 20 28 56 61 6c 75 65 20 6c eLayer, (Value l
06d0: 68 73 2c 20 56 61 6c 75 65 20 72 68 73 29 7b 72 hs, Value rhs){r
06e0: 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c eturn new IntVal
06f0: 75 65 28 6c 68 73 20 3c 3d 20 72 68 73 29 3b 7d ue(lhs <= rhs);}
0700: 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 );...e.addPrimi
0710: 74 69 76 65 28 22 3e 3d 22 2c 20 56 61 6c 75 65 tive(">=", Value
0720: 4c 61 79 65 72 2c 20 28 56 61 6c 75 65 20 6c 68 Layer, (Value lh
0730: 73 2c 20 56 61 6c 75 65 20 72 68 73 29 7b 72 65 s, Value rhs){re
0740: 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 turn new IntValu
0750: 65 28 6c 68 73 20 3e 3d 20 72 68 73 29 3b 7d 20 e(lhs >= rhs);}
0760: 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 );...e.addPrimit
0770: 69 76 65 28 22 3d 3d 22 2c 20 56 61 6c 75 65 4c ive("==", ValueL
0780: 61 79 65 72 2c 20 28 56 61 6c 75 65 20 6c 68 73 ayer, (Value lhs
0790: 2c 20 56 61 6c 75 65 20 72 68 73 29 7b 72 65 74 , Value rhs){ret
07a0: 75 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 urn new IntValue
07b0: 28 6c 68 73 20 3d 3d 20 72 68 73 29 3b 7d 20 29 (lhs == rhs);} )
07c0: 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69 ;...e.addPrimiti
07d0: 76 65 28 22 21 3d 22 2c 20 56 61 6c 75 65 4c 61 ve("!=", ValueLa
07e0: 79 65 72 2c 20 28 56 61 6c 75 65 20 6c 68 73 2c yer, (Value lhs,
07f0: 20 56 61 6c 75 65 20 72 68 73 29 7b 72 65 74 75 Value rhs){retu
0800: 72 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 rn new IntValue(
0810: 6c 68 73 20 21 3d 20 72 68 73 29 3b 7d 20 29 3b lhs != rhs);} );
0820: 0d 0a 09 2f 2f 20 63 6f 6e 74 72 6f 6c 20 66 6c ...// control fl
0830: 6f 77 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 ow...e.addPrimit
0840: 69 76 65 28 22 69 66 22 2c 20 56 61 6c 75 65 4c ive("if", ValueL
0850: 61 79 65 72 2c 20 28 49 6e 74 56 61 6c 75 65 20 ayer, (IntValue
0860: 78 2c 20 46 75 6e 56 61 6c 75 65 20 66 74 2c 20 x, FunValue ft,
0870: 46 75 6e 56 61 6c 75 65 20 66 65 29 7b 0d 0a 09 FunValue fe){...
0880: 09 61 75 74 6f 20 74 6f 52 75 6e 20 3d 20 28 78 .auto toRun = (x
0890: 2e 64 61 74 61 3d 3d 30 20 3f 20 66 65 20 3a 20 .data==0 ? fe :
08a0: 66 74 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20 74 ft);....return t
08b0: 6f 52 75 6e 2e 69 6e 76 6f 6b 65 28 56 61 6c 75 oRun.invoke(Valu
08c0: 65 4c 61 79 65 72 2c 20 74 6f 52 75 6e 2e 64 65 eLayer, toRun.de
08d0: 66 69 6e 69 74 69 6f 6e 43 6f 6e 74 65 78 74 28 finitionContext(
08e0: 29 2c 20 6e 75 6c 6c 29 3b 0d 0a 09 7d 29 3b 0d ), null);...});.
08f0: 0a 09 2f 2f 20 74 79 70 65 20 74 65 73 74 0d 0a ..// type test..
0900: 09 65 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 .e.addPrimitive(
0910: 22 5f 69 73 69 6e 74 22 2c 20 56 61 6c 75 65 4c "_isint", ValueL
0920: 61 79 65 72 2c 0d 0a 09 09 28 56 61 6c 75 65 20 ayer,....(Value
0930: 76 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e v){return new In
0940: 74 56 61 6c 75 65 28 63 61 73 74 28 49 6e 74 56 tValue(cast(IntV
0950: 61 6c 75 65 29 76 20 21 69 73 20 6e 75 6c 6c 29 alue)v !is null)
0960: 3b 7d 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 ;} );...e.addPri
0970: 6d 69 74 69 76 65 28 22 5f 69 73 73 74 72 22 2c mitive("_isstr",
0980: 20 56 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09 09 ValueLayer,....
0990: 28 56 61 6c 75 65 20 76 29 7b 72 65 74 75 72 6e (Value v){return
09a0: 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 63 61 new IntValue(ca
09b0: 73 74 28 53 74 72 56 61 6c 75 65 29 76 20 21 69 st(StrValue)v !i
09c0: 73 20 6e 75 6c 6c 29 3b 7d 20 29 3b 0d 0a 09 65 s null);} );...e
09d0: 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 5f .addPrimitive("_
09e0: 69 73 66 75 6e 22 2c 20 56 61 6c 75 65 4c 61 79 isfun", ValueLay
09f0: 65 72 2c 0d 0a 09 09 28 56 61 6c 75 65 20 76 29 er,....(Value v)
0a00: 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 56 {return new IntV
0a10: 61 6c 75 65 28 63 61 73 74 28 46 75 6e 56 61 6c alue(cast(FunVal
0a20: 75 65 29 76 20 21 69 73 20 6e 75 6c 6c 29 3b 7d ue)v !is null);}
0a30: 20 29 3b 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 );...e.addPrimi
0a40: 74 69 76 65 28 22 5f 69 73 62 6f 74 22 2c 20 56 tive("_isbot", V
0a50: 61 6c 75 65 4c 61 79 65 72 2c 0d 0a 09 09 28 56 alueLayer,....(V
0a60: 61 6c 75 65 20 76 29 7b 72 65 74 75 72 6e 20 6e alue v){return n
0a70: 65 77 20 49 6e 74 56 61 6c 75 65 28 63 61 73 74 ew IntValue(cast
0a80: 28 42 6f 74 74 6f 6d 56 61 6c 75 65 29 76 20 21 (BottomValue)v !
0a90: 69 73 20 6e 75 6c 6c 29 3b 7d 20 29 3b 0d 0a 09 is null);} );...
0aa0: 65 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 e.addPrimitive("
0ab0: 5f 69 73 74 62 6c 22 2c 20 56 61 6c 75 65 4c 61 _istbl", ValueLa
0ac0: 79 65 72 2c 0d 0a 09 09 28 56 61 6c 75 65 20 76 yer,....(Value v
0ad0: 29 7b 72 65 74 75 72 6e 20 6e 65 77 20 49 6e 74 ){return new Int
0ae0: 56 61 6c 75 65 28 63 61 73 74 28 54 61 62 6c 65 Value(cast(Table
0af0: 29 76 20 21 69 73 20 6e 75 6c 6c 29 3b 7d 20 29 )v !is null);} )
0b00: 3b 0d 0a 09 2f 2f 20 74 61 62 6c 65 0d 0a 09 65 ;...// table...e
0b10: 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 2e .addPrimitive(".
0b20: 22 2c 20 56 61 6c 75 65 4c 61 79 65 72 2c 20 28 ", ValueLayer, (
0b30: 54 61 62 6c 65 20 74 2c 20 53 74 72 56 61 6c 75 Table t, StrValu
0b40: 65 20 73 29 7b 0d 0a 09 09 69 66 28 20 74 2e 68 e s){....if( t.h
0b50: 61 73 28 73 2e 64 61 74 61 2c 20 56 61 6c 75 65 as(s.data, Value
0b60: 4c 61 79 65 72 29 20 29 0d 0a 09 09 09 72 65 74 Layer) ).....ret
0b70: 75 72 6e 20 74 2e 67 65 74 28 73 2e 64 61 74 61 urn t.get(s.data
0b80: 2c 20 56 61 6c 75 65 4c 61 79 65 72 29 3b 0d 0a , ValueLayer);..
0b90: 09 09 74 68 72 6f 77 20 67 65 6e 65 78 21 52 75 ..throw genex!Ru
0ba0: 6e 74 69 6d 65 45 78 63 65 70 74 69 6f 6e 28 74 ntimeException(t
0bb0: 65 78 74 28 22 74 61 62 6c 65 20 64 6f 20 6e 6f ext("table do no
0bc0: 74 20 68 61 76 65 20 74 68 65 20 66 69 65 6c 64 t have the field
0bd0: 20 22 2c 73 29 29 3b 0d 0a 09 7d 29 3b 0d 0a 09 ",s));...});...
0be0: 65 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 22 e.addPrimitive("
0bf0: 2e 3f 22 2c 20 56 61 6c 75 65 4c 61 79 65 72 2c .?", ValueLayer,
0c00: 20 28 54 61 62 6c 65 20 74 2c 20 53 74 72 56 61 (Table t, StrVa
0c10: 6c 75 65 20 73 29 7b 0d 0a 09 09 72 65 74 75 72 lue s){....retur
0c20: 6e 20 6e 65 77 20 49 6e 74 56 61 6c 75 65 28 74 n new IntValue(t
0c30: 2e 68 61 73 28 73 2e 64 61 74 61 2c 20 56 61 6c .has(s.data, Val
0c40: 75 65 4c 61 79 65 72 29 29 3b 0d 0a 09 7d 29 3b ueLayer));...});
0c50: 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69 76 ...e.addPrimitiv
0c60: 65 28 22 2e 3d 22 2c 20 56 61 6c 75 65 4c 61 79 e(".=", ValueLay
0c70: 65 72 2c 20 28 54 61 62 6c 65 20 74 2c 20 53 74 er, (Table t, St
0c80: 72 56 61 6c 75 65 20 73 2c 20 56 61 6c 75 65 20 rValue s, Value
0c90: 76 29 7b 0d 0a 09 09 61 75 74 6f 20 74 32 20 3d v){....auto t2 =
0ca0: 20 6e 65 77 20 54 61 62 6c 65 28 74 2c 20 54 61 new Table(t, Ta
0cb0: 62 6c 65 2e 4b 69 6e 64 2e 4e 6f 74 50 72 6f 70 ble.Kind.NotProp
0cc0: 61 67 61 74 65 53 65 74 29 3b 0d 0a 09 09 74 32 agateSet);....t2
0cd0: 2e 73 65 74 28 73 2e 64 61 74 61 2c 20 56 61 6c .set(s.data, Val
0ce0: 75 65 4c 61 79 65 72 2c 20 76 29 3b 0d 0a 09 09 ueLayer, v);....
0cf0: 72 65 74 75 72 6e 20 74 32 3b 0d 0a 09 7d 29 3b return t2;...});
0d00: 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69 76 ...e.addPrimitiv
0d10: 65 28 22 7b 7d 22 2c 20 56 61 6c 75 65 4c 61 79 e("{}", ValueLay
0d20: 65 72 2c 20 28 29 7b 0d 0a 09 09 72 65 74 75 72 er, (){....retur
0d30: 6e 20 6e 65 77 20 54 61 62 6c 65 3b 0d 0a 09 7d n new Table;...}
0d40: 29 3b 0d 0a 09 2f 2f 20 49 4f 20 61 6e 64 20 6f );...// IO and o
0d50: 74 68 65 72 73 0d 0a 09 65 2e 61 64 64 50 72 69 thers...e.addPri
0d60: 6d 69 74 69 76 65 28 22 70 72 69 6e 74 22 2c 20 mitive("print",
0d70: 56 61 6c 75 65 4c 61 79 65 72 2c 20 28 56 61 6c ValueLayer, (Val
0d80: 75 65 20 61 29 7b 20 77 72 69 74 65 6c 6e 28 61 ue a){ writeln(a
0d90: 29 3b 20 72 65 74 75 72 6e 20 61 3b 20 7d 29 3b ); return a; });
0da0: 0d 0a 09 65 2e 61 64 64 50 72 69 6d 69 74 69 76 ...e.addPrimitiv
0db0: 65 28 22 67 65 6e 73 79 6d 22 2c 20 56 61 6c 75 e("gensym", Valu
0dc0: 65 4c 61 79 65 72 2c 20 28 29 7b 20 72 65 74 75 eLayer, (){ retu
0dd0: 72 6e 20 6e 65 77 20 53 74 72 56 61 6c 75 65 28 rn new StrValue(
0de0: 66 72 65 73 68 56 61 72 4e 61 6d 65 28 29 29 3b freshVarName());
0df0: 20 7d 29 3b 0d 0a 09 61 75 74 6f 20 72 61 6e 64 });...auto rand
0e00: 20 3d 20 4d 74 31 39 39 33 37 28 75 6e 70 72 65 = Mt19937(unpre
0e10: 64 69 63 74 61 62 6c 65 53 65 65 64 29 3b 0d 0a dictableSeed);..
0e20: 09 65 2e 61 64 64 50 72 69 6d 69 74 69 76 65 28 .e.addPrimitive(
0e30: 22 72 61 6e 64 22 2c 20 56 61 6c 75 65 4c 61 79 "rand", ValueLay
0e40: 65 72 2c 20 28 49 6e 74 56 61 6c 75 65 20 6e 29 er, (IntValue n)
0e50: 7b 0d 0a 09 09 72 65 74 75 72 6e 20 6e 65 77 20 {....return new
0e60: 49 6e 74 56 61 6c 75 65 28 20 75 6e 69 66 6f 72 IntValue( unifor
0e70: 6d 28 30 2c 63 61 73 74 28 69 6e 74 29 6e 2e 64 m(0,cast(int)n.d
0e80: 61 74 61 2e 74 6f 49 6e 74 28 29 2c 72 61 6e 64 ata.toInt(),rand
0e90: 29 20 29 3b 0d 0a 09 7d 29 3b 0d 0a 7d 0d 0a ) );...});..}..