diff options
Diffstat (limited to 'std.py')
| -rw-r--r-- | std.py | 24 | 
1 files changed, 17 insertions, 7 deletions
| @@ -15,18 +15,28 @@ def std_print(arg):      #return []  # TODO this should return empty list      return NebLiteral(NebType.BOOL, True) +def std_add(arg1, arg2): +    typ = NebType.INT +    if NebType.FLOAT in (arg1.type_, arg2.type_): +        typ = NebType.FLOAT +    return NebLiteral(typ, arg1.value + arg2.value) + +def build_sig_dict(*args): +    return {arg.func.in_sig(): arg for arg in args} +  def build_std():      print_string = FuncImpl(NebFunction("print", [NebType.STRING], NebType.BOOL), std_print) -    STD["print"] = { -        print_string.func.in_sig(): print_string -    } +    STD["print"] = build_sig_dict(print_string)      exit_ = FuncImpl(NebFunction("exit", [], NebType.BOOL), std_exit)      exit_int = FuncImpl(NebFunction("exit", [NebType.INT], NebType.BOOL), std_exit) +    STD["exit"] = build_sig_dict(exit_, exit_int) -    STD["exit"] = { -        exit_.func.in_sig(): exit_, -        exit_int.func.in_sig(): exit_int -    } +    # arithmetic +    add_int_int = FuncImpl(NebFunction("+", [NebType.INT, NebType.INT], NebType.INT), std_add) +    add_int_float = FuncImpl(NebFunction("+", [NebType.INT, NebType.FLOAT], NebType.FLOAT), std_add) +    add_float_int = FuncImpl(NebFunction("+", [NebType.FLOAT, NebType.INT], NebType.FLOAT), std_add) +    add_float_float = FuncImpl(NebFunction("+", [NebType.FLOAT, NebType.FLOAT], NebType.FLOAT), std_add) +    STD["+"] = build_sig_dict(add_int_int, add_int_float, add_float_int, add_float_float)  build_std() | 
