From 050c84921c9e180ae6de53ca877653b330d37876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Reuh=20Fildadut?= Date: Sun, 31 Dec 2023 14:55:28 +0100 Subject: [PATCH] Add identifier wrap for aliases --- anselme/stdlib/closure.lua | 21 +++++++++++++-------- test/results/alias identifier.ans | 9 +++++++++ test/tests/alias identifier.ans | 9 +++++++++ 3 files changed, 31 insertions(+), 8 deletions(-) create mode 100644 test/results/alias identifier.ans create mode 100644 test/tests/alias identifier.ans diff --git a/anselme/stdlib/closure.lua b/anselme/stdlib/closure.lua index 7f502fa..45ff5cb 100644 --- a/anselme/stdlib/closure.lua +++ b/anselme/stdlib/closure.lua @@ -1,5 +1,5 @@ local ast = require("anselme.ast") -local Nil, Boolean, Definition, Call, Function, ParameterTuple, FunctionParameter, Identifier, Overload = ast.Nil, ast.Boolean, ast.Definition, ast.Call, ast.Function, ast.ParameterTuple, ast.FunctionParameter, ast.Identifier, ast.Overload +local Nil, Boolean, Definition, Call, Function, ParameterTuple, FunctionParameter, Identifier, Overload, Assignment = ast.Nil, ast.Boolean, ast.Definition, ast.Call, ast.Function, ast.ParameterTuple, ast.FunctionParameter, ast.Identifier, ast.Overload, ast.Assignment local assert0 = require("anselme.common").assert0 return { @@ -47,16 +47,21 @@ return { local exp = q.expression local get = Function:new(ParameterTuple:new(), exp):eval(state) + local set_exp if Call:is(exp) then - local set_param = ParameterTuple:new() - set_param:insert_assignment(FunctionParameter:new(Identifier:new("value"))) - local assign_expr = Call:new(exp.func, exp.arguments:with_assignment(Identifier:new("value"))) - local set = Function:new(set_param, assign_expr):eval(state) - - return Overload:new(get, set) + set_exp = Call:new(exp.func, exp.arguments:with_assignment(Identifier:new("value"))) + elseif Identifier:is(exp) then + set_exp = Assignment:new(exp, Identifier:new("value")) end - return get + if set_exp then + local set_param = ParameterTuple:new() + set_param:insert_assignment(FunctionParameter:new(Identifier:new("value"))) + local set = Function:new(set_param, set_exp):eval(state) + return Overload:new(get, set) + else + return get + end end } } diff --git a/test/results/alias identifier.ans b/test/results/alias identifier.ans new file mode 100644 index 0000000..f766716 --- /dev/null +++ b/test/results/alias identifier.ans @@ -0,0 +1,9 @@ +--# run #-- +--- text --- +| {}"" {}"4" {}" = " {}"4" {}" = 4" | +--- text --- +| {}"" {}"12" {}" = " {}"12" {}" = 12" | +--- return --- +() +--# saved #-- +{} \ No newline at end of file diff --git a/test/tests/alias identifier.ans b/test/tests/alias identifier.ans new file mode 100644 index 0000000..b5d5300 --- /dev/null +++ b/test/tests/alias identifier.ans @@ -0,0 +1,9 @@ +:l = 4 + +:&c => l + +| {c} = {l} = 4 + +c = 12 + +| {c} = {l} = 12