Hex Artifact Content
Not logged in

Artifact c9a55d8e7b3293ae87367d7e4e6c3f032534e99c:


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: 66 75 6e 28 78 29 20 29 20 7b 20 78 20 7d 0a 20  fun(x) ) { x }. 
0070: 20 65 6c 73 65 20 7b 20 69 66 28 20 5f 69 73 75   else { if( _isu
0080: 6e 64 65 66 69 6e 65 64 28 78 29 20 29 20 7b 20  ndefined(x) ) { 
0090: 22 75 6e 64 65 66 69 6e 65 64 22 20 7d 0a 20 20  "undefined" }.  
00a0: 65 6c 73 65 20 7b 20 22 61 6e 79 22 20 7d 7d 7d  else { "any" }}}
00b0: 7d 0a 7d 3b 0a 0a 64 65 66 20 62 69 6e 6f 70 28  }.};..def binop(
00c0: 61 2c 62 2c 63 29 20 7b 0a 20 20 66 75 6e 28 78  a,b,c) {.  fun(x
00d0: 2c 79 29 7b 40 76 28 0a 20 20 20 20 69 66 28 20  ,y){@v(.    if( 
00e0: 40 74 79 70 65 28 78 29 3d 3d 22 75 6e 64 65 66  @type(x)=="undef
00f0: 69 6e 65 64 22 20 7c 7c 20 40 74 79 70 65 28 79  ined" || @type(y
0100: 29 3d 3d 22 75 6e 64 65 66 69 6e 65 64 22 20 29  )=="undefined" )
0110: 20 7b 20 22 75 6e 64 65 66 69 6e 65 64 22 20 7d   { "undefined" }
0120: 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 69 66   else {.      if
0130: 28 20 40 74 79 70 65 28 78 29 3d 3d 61 20 26 26  ( @type(x)==a &&
0140: 20 40 74 79 70 65 28 79 29 3d 3d 62 20 29 20 7b   @type(y)==b ) {
0150: 20 63 20 7d 20 65 6c 73 65 20 7b 20 22 65 72 72   c } else { "err
0160: 6f 72 22 20 7d 0a 20 20 20 20 7d 0a 20 20 29 7d  or" }.    }.  )}
0170: 0a 7d 3b 0a 0a 40 74 79 70 65 20 22 2b 22 20 3d  .};..@type "+" =
0180: 20 62 69 6e 6f 70 28 22 69 6e 74 22 2c 20 22 69   binop("int", "i
0190: 6e 74 22 2c 20 22 69 6e 74 22 29 3b 0a 40 74 79  nt", "int");.@ty
01a0: 70 65 20 22 2d 22 20 3d 20 62 69 6e 6f 70 28 22  pe "-" = binop("
01b0: 69 6e 74 22 2c 20 22 69 6e 74 22 2c 20 22 69 6e  int", "int", "in
01c0: 74 22 29 3b 0a 40 74 79 70 65 20 22 3c 22 20 3d  t");.@type "<" =
01d0: 20 62 69 6e 6f 70 28 22 69 6e 74 22 2c 20 22 69   binop("int", "i
01e0: 6e 74 22 2c 20 22 69 6e 74 22 29 3b 0a 40 74 79  nt", "int");.@ty
01f0: 70 65 20 22 3e 22 20 3d 20 62 69 6e 6f 70 28 22  pe ">" = binop("
0200: 69 6e 74 22 2c 20 22 69 6e 74 22 2c 20 22 69 6e  int", "int", "in
0210: 74 22 29 3b 0a 0a 64 65 66 20 6d 65 72 67 65 54  t");..def mergeT
0220: 79 70 65 28 61 2c 62 29 20 7b 0a 20 20 69 66 28  ype(a,b) {.  if(
0230: 20 61 20 3d 3d 20 22 75 6e 64 65 66 69 6e 65 64   a == "undefined
0240: 22 20 29 20 7b 20 69 66 28 62 3d 3d 22 75 6e 64  " ) { if(b=="und
0250: 65 66 69 6e 65 64 22 29 7b 22 65 72 72 6f 72 22  efined"){"error"
0260: 7d 65 6c 73 65 7b 62 7d 20 7d 20 65 6c 73 65 20  }else{b} } else 
0270: 7b 20 61 20 7d 0a 7d 3b 0a 0a 40 74 79 70 65 20  { a }.};..@type 
0280: 22 69 66 22 20 3d 20 66 75 6e 28 63 2c 74 2c 65  "if" = fun(c,t,e
0290: 29 20 7b 40 76 28 0a 20 69 66 28 40 74 79 70 65  ) {@v(. if(@type
02a0: 28 63 29 3d 3d 22 69 6e 74 22 20 29 20 7b 20 6d  (c)=="int" ) { m
02b0: 65 72 67 65 54 79 70 65 28 40 74 79 70 65 28 74  ergeType(@type(t
02c0: 28 29 29 2c 20 40 74 79 70 65 28 65 28 29 29 29  ()), @type(e()))
02d0: 20 7d 20 65 6c 73 65 20 7b 20 22 65 72 72 6f 72   } else { "error
02e0: 22 20 7d 0a 29 7d 3b 0a                          " }.)};.