File Annotation
Not logged in
5afe8e3f26 2010-11-13        kinaba: @@type = fun(x){
5afe8e3f26 2010-11-13        kinaba:   if( _isint(x) ) { "int" }
5afe8e3f26 2010-11-13        kinaba:   else { if( _isstr(x) ) { "str" }
5afe8e3f26 2010-11-13        kinaba:   else { if( _isfun(x) ) { x }
5afe8e3f26 2010-11-13        kinaba:   else { if( _isundefined(x) ) { "undefined" }
5afe8e3f26 2010-11-13        kinaba:   else { "any" }}}}
5afe8e3f26 2010-11-13        kinaba: };
5afe8e3f26 2010-11-13        kinaba: 
5afe8e3f26 2010-11-13        kinaba: def binop(a,b,c) {
f86026acb8 2010-11-21        kinaba:   fun(x,y){@value(
5afe8e3f26 2010-11-13        kinaba:     if( @type(x)=="undefined" || @type(y)=="undefined" ) { "undefined" } else {
5afe8e3f26 2010-11-13        kinaba:       if( @type(x)==a && @type(y)==b ) { c } else { "error" }
5afe8e3f26 2010-11-13        kinaba:     }
5afe8e3f26 2010-11-13        kinaba:   )}
5afe8e3f26 2010-11-13        kinaba: };
5afe8e3f26 2010-11-13        kinaba: 
5afe8e3f26 2010-11-13        kinaba: @type "+" = binop("int", "int", "int");
5afe8e3f26 2010-11-13        kinaba: @type "-" = binop("int", "int", "int");
5afe8e3f26 2010-11-13        kinaba: @type "<" = binop("int", "int", "int");
5afe8e3f26 2010-11-13        kinaba: @type ">" = binop("int", "int", "int");
5afe8e3f26 2010-11-13        kinaba: 
5afe8e3f26 2010-11-13        kinaba: def mergeType(a,b) {
5afe8e3f26 2010-11-13        kinaba:   if( a == "undefined" ) { if(b=="undefined"){"error"}else{b} } else { a }
5afe8e3f26 2010-11-13        kinaba: };
5afe8e3f26 2010-11-13        kinaba: 
f86026acb8 2010-11-21        kinaba: @type "if" = fun(c,t,e) {@value(
5afe8e3f26 2010-11-13        kinaba:  if(@type(c)=="int" ) { mergeType(@type(t()), @type(e())) } else { "error" }
5afe8e3f26 2010-11-13        kinaba: )};