Artifact c9a55d8e7b3293ae87367d7e4e6c3f032534e99c
1 @@type = fun(x){
2 if( _isint(x) ) { "int" }
3 else { if( _isstr(x) ) { "str" }
4 else { if( _isfun(x) ) { x }
5 else { if( _isundefined(x) ) { "undefined" }
6 else { "any" }}}}
7 };
8
9 def binop(a,b,c) {
10 fun(x,y){@v(
11 if( @type(x)=="undefined" || @type(y)=="undefined" ) { "undefined" } else {
12 if( @type(x)==a && @type(y)==b ) { c } else { "error" }
13 }
14 )}
15 };
16
17 @type "+" = binop("int", "int", "int");
18 @type "-" = binop("int", "int", "int");
19 @type "<" = binop("int", "int", "int");
20 @type ">" = binop("int", "int", "int");
21
22 def mergeType(a,b) {
23 if( a == "undefined" ) { if(b=="undefined"){"error"}else{b} } else { a }
24 };
25
26 @type "if" = fun(c,t,e) {@v(
27 if(@type(c)=="int" ) { mergeType(@type(t()), @type(e())) } else { "error" }
28 )};