aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormryouse2022-05-10 03:32:25 +0000
committermryouse2022-05-10 03:32:25 +0000
commite2aff5eee62157d718e88628d9dd7e7a6aa19211 (patch)
tree3b2076f88c3605a97c7bfd48816c0332e347b166
parent7795c8931404e0c43d21986f05aa9fdb2aefa9f2 (diff)
subtract and multiply
-rw-r--r--std.py27
1 files changed, 26 insertions, 1 deletions
diff --git a/std.py b/std.py
index 96988f3..f957b53 100644
--- a/std.py
+++ b/std.py
@@ -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()