aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authors-ol <s+removethis@s-ol.nu>2022-11-29 21:53:53 +0000
committers-ol <s+removethis@s-ol.nu>2022-11-29 21:53:53 +0000
commite356564ac4611d60612a7fb28703945e40217268 (patch)
treed07b48c775543bda301cd2e9007d6b7376efdca1
parentsupport "download" and "facet" options for mmm-link (diff)
downloadmmm-e356564ac4611d60612a7fb28703945e40217268.tar.gz
mmm-e356564ac4611d60612a7fb28703945e40217268.zip
add dynfn type for non-cacheable evaluation
-rw-r--r--mmm/mmmfs/builtins.moon7
-rw-r--r--mmm/mmmfs/conversion.moon7
-rw-r--r--mmm/mmmfs/fileder.moon4
3 files changed, 15 insertions, 3 deletions
diff --git a/mmm/mmmfs/builtins.moon b/mmm/mmmfs/builtins.moon
index f25544e..0621670 100644
--- a/mmm/mmmfs/builtins.moon
+++ b/mmm/mmmfs/builtins.moon
@@ -59,6 +59,13 @@ converts = {
transform: (val, fileder) => val fileder
}
{
+ inp: 'dynfn -> (.+)',
+ out: '%1',
+ cost: 1,1
+ transform: (val, fileder) => val fileder
+ dynamic: true
+ }
+ {
inp: 'mmm/component',
out: 'mmm/dom',
cost: 3
diff --git a/mmm/mmmfs/conversion.moon b/mmm/mmmfs/conversion.moon
index 44688e6..ac8d9f7 100644
--- a/mmm/mmmfs/conversion.moon
+++ b/mmm/mmmfs/conversion.moon
@@ -155,15 +155,20 @@ print_conversions = (conversions) ->
-- returns converted value
err_and_trace = (msg) -> debug.traceback msg, 2
apply_conversions = (fileder, conversions, value, key) ->
+ static = true
for i=#conversions,1,-1
refs\push!
step = conversions[i]
ok, value = xpcall step.convert.transform, err_and_trace, step, value, fileder, key
refs\pop!
+
+ if step.convert.dynamic
+ static = false
+
if not ok
error "error while converting #{fileder} #{key} from '#{step.from}' to '#{step.to}':\n#{value}"
- value
+ value, static
-- find and apply a conversion path from 'have' to 'want'
-- * have - start type string or list of type strings
diff --git a/mmm/mmmfs/fileder.moon b/mmm/mmmfs/fileder.moon
index cd50a40..5d5ffa2 100644
--- a/mmm/mmmfs/fileder.moon
+++ b/mmm/mmmfs/fileder.moon
@@ -283,8 +283,8 @@ class Fileder
key, conversions = @find want
if key
- value = apply_conversions @, conversions, @facets[key], key
- CACHE\set @, want, value if CACHE
+ value, static = apply_conversions @, conversions, @facets[key], key
+ CACHE\set @, want, value if CACHE and static
value, key
-- like @get, throw if no value or conversion path