🐐 Modulo

This commit is contained in:
2026-04-16 20:34:06 +02:00
parent e2ce25aa24
commit c570d72b02
10 changed files with 122 additions and 7 deletions

View File

@@ -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":