Artifact b35cfd66e862f7bf189142d9927955d8905ac7b1:
0000: 40 40 74 79 70 65 20 3d 20 66 75 6e 28 78 29 7b @@type = fun(x){
0010: 0a 20 20 69 66 28 20 5f 69 73 69 6e 74 28 78 29 . if( _isint(x)
0020: 20 29 20 7b 20 22 69 6e 74 22 20 7d 0a 20 20 65 ) { "int" }. e
0030: 6c 73 65 20 7b 20 69 66 28 20 5f 69 73 73 74 72 lse { if( _isstr
0040: 28 78 29 20 29 20 7b 20 22 73 74 72 22 20 7d 0a (x) ) { "str" }.
0050: 20 20 65 6c 73 65 20 7b 20 69 66 28 20 5f 69 73 else { if( _is
0060: 75 6e 64 65 66 69 6e 65 64 28 78 29 20 29 20 7b undefined(x) ) {
0070: 20 22 75 6e 64 65 66 69 6e 65 64 22 20 7d 0a 20 "undefined" }.
0080: 20 65 6c 73 65 20 7b 20 22 61 6e 79 22 20 7d 7d else { "any" }}
0090: 7d 0a 7d 3b 0a 0a 64 65 66 20 62 69 6e 6f 70 28 }.};..def binop(
00a0: 61 2c 62 2c 63 29 20 7b 0a 20 20 66 75 6e 28 78 a,b,c) {. fun(x
00b0: 2c 79 29 7b 40 76 61 6c 75 65 28 0a 20 20 20 20 ,y){@value(.
00c0: 69 66 28 20 40 74 79 70 65 28 78 29 3d 3d 22 75 if( @type(x)=="u
00d0: 6e 64 65 66 69 6e 65 64 22 20 7c 7c 20 40 74 79 ndefined" || @ty
00e0: 70 65 28 79 29 3d 3d 22 75 6e 64 65 66 69 6e 65 pe(y)=="undefine
00f0: 64 22 20 29 20 7b 20 22 75 6e 64 65 66 69 6e 65 d" ) { "undefine
0100: 64 22 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 d" } else {.
0110: 20 20 69 66 28 20 40 74 79 70 65 28 78 29 3d 3d if( @type(x)==
0120: 61 20 26 26 20 40 74 79 70 65 28 79 29 3d 3d 62 a && @type(y)==b
0130: 20 29 20 7b 20 63 20 7d 20 65 6c 73 65 20 7b 20 ) { c } else {
0140: 22 65 72 72 6f 72 22 20 7d 0a 20 20 20 20 7d 0a "error" }. }.
0150: 20 20 29 7d 0a 7d 3b 0a 0a 40 74 79 70 65 20 22 )}.};..@type "
0160: 2b 22 20 3d 20 62 69 6e 6f 70 28 22 69 6e 74 22 +" = binop("int"
0170: 2c 20 22 69 6e 74 22 2c 20 22 69 6e 74 22 29 3b , "int", "int");
0180: 0a 40 74 79 70 65 20 22 2d 22 20 3d 20 62 69 6e .@type "-" = bin
0190: 6f 70 28 22 69 6e 74 22 2c 20 22 69 6e 74 22 2c op("int", "int",
01a0: 20 22 69 6e 74 22 29 3b 0a 40 74 79 70 65 20 22 "int");.@type "
01b0: 3c 22 20 3d 20 62 69 6e 6f 70 28 22 69 6e 74 22 <" = binop("int"
01c0: 2c 20 22 69 6e 74 22 2c 20 22 69 6e 74 22 29 3b , "int", "int");
01d0: 0a 40 74 79 70 65 20 22 3e 22 20 3d 20 62 69 6e .@type ">" = bin
01e0: 6f 70 28 22 69 6e 74 22 2c 20 22 69 6e 74 22 2c op("int", "int",
01f0: 20 22 69 6e 74 22 29 3b 0a 0a 64 65 66 20 6d 65 "int");..def me
0200: 72 67 65 54 79 70 65 28 61 2c 62 29 20 7b 0a 20 rgeType(a,b) {.
0210: 20 69 66 28 20 61 20 3d 3d 20 22 75 6e 64 65 66 if( a == "undef
0220: 69 6e 65 64 22 20 29 20 7b 20 69 66 28 62 3d 3d ined" ) { if(b==
0230: 22 75 6e 64 65 66 69 6e 65 64 22 29 7b 22 65 72 "undefined"){"er
0240: 72 6f 72 22 7d 65 6c 73 65 7b 62 7d 20 7d 20 65 ror"}else{b} } e
0250: 6c 73 65 20 7b 20 61 20 7d 0a 7d 3b 0a 0a 40 74 lse { a }.};..@t
0260: 79 70 65 20 22 69 66 22 20 3d 20 66 75 6e 28 63 ype "if" = fun(c
0270: 2c 74 2c 65 29 20 7b 40 76 61 6c 75 65 28 0a 20 ,t,e) {@value(.
0280: 69 66 28 40 74 79 70 65 28 63 29 3d 3d 22 69 6e if(@type(c)=="in
0290: 74 22 20 29 20 7b 20 6d 65 72 67 65 54 79 70 65 t" ) { mergeType
02a0: 28 40 74 79 70 65 28 74 28 29 29 2c 20 40 74 79 (@type(t()), @ty
02b0: 70 65 28 65 28 29 29 29 20 7d 20 65 6c 73 65 20 pe(e())) } else
02c0: 7b 20 22 65 72 72 6f 72 22 20 7d 0a 29 7d 3b 0a { "error" }.)};.