diff options
| -rw-r--r-- | std.py | 27 | 
1 files changed, 26 insertions, 1 deletions
| @@ -15,12 +15,25 @@ def std_print(arg):      #return []  # TODO this should return empty list      return NebLiteral(NebType.BOOL, True) +# math  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 std_subtract(arg1, arg2): +    typ = NebType.INT +    if NebType.FLOAT in (arg1.type_, arg2.type_): +        typ = NebType.FLOAT +    return NebLiteral(typ, arg1.value - arg2.value) + +def std_multiply(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} @@ -38,5 +51,17 @@ def build_std():      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) -     + +    subtract_int_int = FuncImpl(NebFunction("-", [NebType.INT, NebType.INT], NebType.INT), std_subtract) +    subtract_int_float = FuncImpl(NebFunction("-", [NebType.INT, NebType.FLOAT], NebType.FLOAT), std_subtract) +    subtract_float_int = FuncImpl(NebFunction("-", [NebType.FLOAT, NebType.INT], NebType.FLOAT), std_subtract) +    subtract_float_float = FuncImpl(NebFunction("-", [NebType.FLOAT, NebType.FLOAT], NebType.FLOAT), std_subtract) +    STD["-"] = build_sig_dict(subtract_int_int, subtract_int_float, subtract_float_int, subtract_float_float) + +    multiply_int_int = FuncImpl(NebFunction("*", [NebType.INT, NebType.INT], NebType.INT), std_multiply) +    multiply_int_float = FuncImpl(NebFunction("*", [NebType.INT, NebType.FLOAT], NebType.FLOAT), std_multiply) +    multiply_float_int = FuncImpl(NebFunction("*", [NebType.FLOAT, NebType.INT], NebType.FLOAT), std_multiply) +    multiply_float_float = FuncImpl(NebFunction("*", [NebType.FLOAT, NebType.FLOAT], NebType.FLOAT), std_multiply) +    STD["*"] = build_sig_dict(multiply_int_int, multiply_int_float, multiply_float_int, multiply_float_float) +  build_std() | 
