Artifact Content
Not logged in

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  )};