🐐 Per destructuring better

This commit is contained in:
2026-05-30 17:57:44 +02:00
parent d6b064efcd
commit 19f8cb5232
4 changed files with 49 additions and 66 deletions
+16 -8
View File
@@ -138,15 +138,21 @@ control_tests = [
("PER a, b IN [[I, II], [III, IV]] FAC { DIC(a + b) }",
Program([], [PerStatement(
DataArray([DataArray([Numeral("I"), Numeral("II")]), DataArray([Numeral("III"), Numeral("IV")])]),
[ID("a"), ID("b")],
[ExpressionStatement(BuiltIn("DIC", [BinOp(ID("a"), ID("b"), "SYMBOL_PLUS")]))])]),
ID("#per_item"),
[
DesignaDestructure([ID("a"), ID("b")], ID("#per_item")),
ExpressionStatement(BuiltIn("DIC", [BinOp(ID("a"), ID("b"), "SYMBOL_PLUS")])),
])]),
ValStr("VII"), "III\nVII\n"),
# PER destructuring: three variables
("PER a, b, c IN [[I, II, III]] FAC { DIC(a + b + c) }",
Program([], [PerStatement(
DataArray([DataArray([Numeral("I"), Numeral("II"), Numeral("III")])]),
[ID("a"), ID("b"), ID("c")],
[ExpressionStatement(BuiltIn("DIC", [BinOp(BinOp(ID("a"), ID("b"), "SYMBOL_PLUS"), ID("c"), "SYMBOL_PLUS")]))])]),
ID("#per_item"),
[
DesignaDestructure([ID("a"), ID("b"), ID("c")], ID("#per_item")),
ExpressionStatement(BuiltIn("DIC", [BinOp(BinOp(ID("a"), ID("b"), "SYMBOL_PLUS"), ID("c"), "SYMBOL_PLUS")])),
])]),
ValStr("VI"), "VI\n"),
]
@@ -287,8 +293,9 @@ loop_edge_tests = [
Designa(ID("r"), Numeral("I")),
PerStatement(
DataArray([DataArray([Numeral("I"), Numeral("II")]), DataArray([Numeral("III"), Numeral("IV")]), DataArray([Numeral("V"), Numeral("VI")])]),
[ID("a"), ID("b")],
[SiStatement(BinOp(ID("a"), Numeral("III"), "KEYWORD_EST"), [Erumpe()], None),
ID("#per_item"),
[DesignaDestructure([ID("a"), ID("b")], ID("#per_item")),
SiStatement(BinOp(ID("a"), Numeral("III"), "KEYWORD_EST"), [Erumpe()], None),
Designa(ID("r"), BinOp(BinOp(ID("r"), ID("a"), "SYMBOL_PLUS"), ID("b"), "SYMBOL_PLUS"))],
),
ExpressionStatement(ID("r")),
@@ -300,8 +307,9 @@ loop_edge_tests = [
Defini(ID("f"), [],
[PerStatement(
DataArray([DataArray([Numeral("I"), Numeral("II")]), DataArray([Numeral("III"), Numeral("IV")])]),
[ID("a"), ID("b")],
[SiStatement(BinOp(ID("a"), Numeral("III"), "KEYWORD_EST"), [Redi([ID("b")])], None)],
ID("#per_item"),
[DesignaDestructure([ID("a"), ID("b")], ID("#per_item")),
SiStatement(BinOp(ID("a"), Numeral("III"), "KEYWORD_EST"), [Redi([ID("b")])], None)],
)]),
ExpressionStatement(Invoca(ID("f"), [])),
]),