🐐 Modulo
This commit is contained in:
@@ -37,7 +37,9 @@ OP_STR = {
|
||||
"SYMBOL_PLUS": "+", "SYMBOL_MINUS": "-",
|
||||
"SYMBOL_TIMES": "*", "SYMBOL_DIVIDE": "/",
|
||||
"SYMBOL_AMPERSAND": "&",
|
||||
"KEYWORD_EST": "EST", "KEYWORD_MINVS": "MINVS",
|
||||
"KEYWORD_RELIQVVM": "RELIQVVM",
|
||||
"KEYWORD_EST": "EST", "KEYWORD_DISPAR": "DISPAR",
|
||||
"KEYWORD_MINVS": "MINVS",
|
||||
"KEYWORD_PLVS": "PLVS", "KEYWORD_ET": "ET", "KEYWORD_AVT": "AVT",
|
||||
}
|
||||
|
||||
@@ -586,6 +588,14 @@ class BinOp(Node):
|
||||
if isinstance(lv, Fraction) or isinstance(rv, Fraction) or "FRACTIO" in vtable["#modules"]:
|
||||
return vtable, ValFrac(Fraction(lv or 0) / Fraction(rv or 0))
|
||||
return vtable, ValInt((lv or 0) // (rv or 0))
|
||||
case "KEYWORD_RELIQVVM":
|
||||
if isinstance(lv, (str, list)) or isinstance(rv, (str, list)):
|
||||
raise CentvrionError("Cannot use RELIQVVM on strings or arrays")
|
||||
if (rv or 0) == 0:
|
||||
raise CentvrionError("Modulo by zero")
|
||||
if isinstance(lv, Fraction) or isinstance(rv, Fraction) or "FRACTIO" in vtable["#modules"]:
|
||||
return vtable, ValFrac(Fraction(lv or 0) % Fraction(rv or 0))
|
||||
return vtable, ValInt((lv or 0) % (rv or 0))
|
||||
case "KEYWORD_MINVS":
|
||||
if isinstance(lv, (str, list)) or isinstance(rv, (str, list)):
|
||||
raise CentvrionError("Cannot compare strings or arrays with MINVS")
|
||||
@@ -596,6 +606,8 @@ class BinOp(Node):
|
||||
return vtable, ValBool((lv or 0) > (rv or 0))
|
||||
case "KEYWORD_EST":
|
||||
return vtable, ValBool(lv == rv)
|
||||
case "KEYWORD_DISPAR":
|
||||
return vtable, ValBool(lv != rv)
|
||||
case "KEYWORD_ET":
|
||||
return vtable, ValBool(bool(left) and bool(right))
|
||||
case "KEYWORD_AVT":
|
||||
|
||||
Reference in New Issue
Block a user