From c54fa4344f53a632299a07778ff0fe25fdbb1874 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20Reuh=20Fildadut?= Date: Tue, 16 Jan 2024 14:34:18 +0100 Subject: [PATCH] [stdlib] add optional default value for table and struct call --- anselme/stdlib/script.lua | 6 +++--- anselme/stdlib/structures.lua | 20 ++++++++++++++++++++ test/tests/map index accross checkpoints.ans | 2 +- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/anselme/stdlib/script.lua b/anselme/stdlib/script.lua index 216ef21..c0c4219 100644 --- a/anselme/stdlib/script.lua +++ b/anselme/stdlib/script.lua @@ -7,7 +7,7 @@ return [[ :resume target = () fn.:check = $(anchor::is anchor) - fn.reached(anchor) = (fn.reached(anchor) | 0) + 1 + fn.reached(anchor) = fn.reached(anchor, 0) + 1 fn.:checkpoint = $(anchor::is anchor, on resume=attached block(default=())) :resuming = resuming(1) /* calling function is resuming */ if(on resume) @@ -15,12 +15,12 @@ return [[ if(resume target == anchor | resuming) on resume! else! - fn.reached(anchor) = (fn.reached(anchor) | 0) + 1 + fn.reached(anchor) = fn.reached(anchor, 0) + 1 merge branch! else! fn.current checkpoint = anchor if(resume target != anchor) - fn.reached(anchor) = (fn.reached(anchor) | 0) + 1 + fn.reached(anchor) = fn.reached(anchor, 0) + 1 merge branch! :f = $ diff --git a/anselme/stdlib/structures.lua b/anselme/stdlib/structures.lua index bede562..d8789b6 100644 --- a/anselme/stdlib/structures.lua +++ b/anselme/stdlib/structures.lua @@ -112,6 +112,16 @@ return { return s:get(k) end }, + { + "_!", "(s::is struct, key, default)", + function(state, s, k, default) + if s:has(k) then + return s:get(k) + else + return default + end + end + }, { "has", "(s::is struct, key)", function(state, s, k) @@ -137,6 +147,16 @@ return { return t:get(state, key) end }, + { + "_!", "(t::is table, key, default)", + function(state, t, key, default) + if t:has(state, key) then + return t:get(state, key) + else + return default + end + end + }, { "_!", "(t::is table, key) = value", function(state, t, key, value) diff --git a/test/tests/map index accross checkpoints.ans b/test/tests/map index accross checkpoints.ans index c155346..4535c8f 100644 --- a/test/tests/map index accross checkpoints.ans +++ b/test/tests/map index accross checkpoints.ans @@ -27,6 +27,6 @@ x={4} - |no={a(x)} + |no={a(x,())} f!