diff options
| author | mryouse | 2022-05-10 03:32:25 +0000 |
|---|---|---|
| committer | mryouse | 2022-05-10 03:32:25 +0000 |
| commit | e2aff5eee62157d718e88628d9dd7e7a6aa19211 (patch) | |
| tree | 3b2076f88c3605a97c7bfd48816c0332e347b166 | |
| parent | 7795c8931404e0c43d21986f05aa9fdb2aefa9f2 (diff) | |
subtract and multiply
| -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() |
