🐐 Numbers as strings when needed
This commit is contained in:
@@ -418,9 +418,14 @@ class BinOp(Node):
|
||||
return vtable, ValNul()
|
||||
return vtable, ValInt((lv or 0) + (rv or 0))
|
||||
case "SYMBOL_COLON":
|
||||
lv = lv if lv is not None else ""
|
||||
rv = rv if rv is not None else ""
|
||||
return vtable, ValStr(lv + rv)
|
||||
magnvm = "MAGNVM" in vtable["#modules"]
|
||||
svbnvlla = "SVBNVLLA" in vtable["#modules"]
|
||||
def _coerce(v):
|
||||
if v is None: return ""
|
||||
if isinstance(v, bool): return "VERITAS" if v else "FALSITAS"
|
||||
if isinstance(v, int): return int_to_num(v, magnvm, svbnvlla)
|
||||
return v
|
||||
return vtable, ValStr(_coerce(lv) + _coerce(rv))
|
||||
case "SYMBOL_MINUS":
|
||||
return vtable, ValInt((lv or 0) - (rv or 0))
|
||||
case "SYMBOL_TIMES":
|
||||
|
||||
3
tests.py
3
tests.py
@@ -611,6 +611,9 @@ string_concat_tests = [
|
||||
('NVLLVS : "hello"', Program([], [ExpressionStatement(BinOp(Nullus(), String("hello"), "SYMBOL_COLON"))]), ValStr("hello")),
|
||||
('"hello" : NVLLVS', Program([], [ExpressionStatement(BinOp(String("hello"), Nullus(), "SYMBOL_COLON"))]), ValStr("hello")),
|
||||
('NVLLVS : NVLLVS', Program([], [ExpressionStatement(BinOp(Nullus(), Nullus(), "SYMBOL_COLON"))]), ValStr("")),
|
||||
# integers coerce to Roman numerals in string context
|
||||
('"value: " : V', Program([], [ExpressionStatement(BinOp(String("value: "), Numeral("V"), "SYMBOL_COLON"))]), ValStr("value: V")),
|
||||
('X : " items"', Program([], [ExpressionStatement(BinOp(Numeral("X"), String(" items"), "SYMBOL_COLON"))]), ValStr("X items")),
|
||||
]
|
||||
|
||||
class TestStringConcat(unittest.TestCase):
|
||||
|
||||
Reference in New Issue
Block a user