aboutsummaryrefslogtreecommitdiffstats
path: root/alv
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2025-08-04 21:25:01 +0000
committers-ol <s+removethis@s-ol.nu>2025-08-04 21:35:25 +0000
commit6c171eace49b3a78e7b6edd679f54a1ad16f15f0 (patch)
tree4c22f6ba83180e90f7b40d89acd7f528b235df56 /alv
parentfix repeated chars in symbol regex in docs and code (diff)
downloadalive-6c171eace49b3a78e7b6edd679f54a1ad16f15f0.tar.gz
alive-6c171eace49b3a78e7b6edd679f54a1ad16f15f0.zip
builtins: add fmt
Diffstat (limited to 'alv')
-rw-r--r--alv/builtins.moon24
1 files changed, 22 insertions, 2 deletions
diff --git a/alv/builtins.moon b/alv/builtins.moon
index da8570f..7640ac8 100644
--- a/alv/builtins.moon
+++ b/alv/builtins.moon
@@ -5,7 +5,9 @@
-- documentation.
--
-- @module builtins
-import Builtin, Op, PureOp, T, FnDef, Input, const, sig, evt, any, Struct, Array
+import
+ Builtin, Op, PureOp, FnDef, Input, Struct, Array
+ T, const, sig, evt, any, template_subst
from require 'alv.base'
import Constant from require 'alv.result'
import Error from require 'alv.error'
@@ -448,7 +450,8 @@ trace = Constant.meta
@out = inputs[2].result
tick: =>
- L\print "trace #{@inputs.prefix!}: #{@inputs.value.result}"
+ value = @inputs.value\type!\pp @inputs.value!
+ L\print "trace #{@inputs.prefix!}: #{value}"
eval: (scope, tail) =>
L\trace "evaling #{@}"
@@ -613,6 +616,22 @@ This is a pure op, so at most one !-stream input is allowed."
pairs = @unwrap_all!
@out\set {key, val for {:key, :val} in *pairs}
+fmt = Constant.meta
+ meta:
+ name: 'fmt'
+ summary: "Perform string interpolation."
+ examples: { '$fmt"…"' }
+ description: "Evaluates substitutions and concatenates them as [string/str][] does.
+
+This is a pure op, so at most one !-stream input is allowed."
+
+ value: class extends PureOp
+ pattern: const! + any!^0
+ type: T.str
+ tick: =>
+ values = [i\type!\pp i!, true for i in *@inputs[2]]
+ @out\set template_subst @inputs[1]!, values
+
loop = Constant.meta
meta:
name: 'loop'
@@ -765,6 +784,7 @@ Constant.meta
'->>': thread_last
:mkarray, :mkstruct
+ :fmt
:loop, :recur