diff options
| author | Arun Isaac | 2025-12-17 16:33:06 +0000 |
|---|---|---|
| committer | Arun Isaac | 2025-12-17 16:33:06 +0000 |
| commit | 433650cdf5c74cf4016434bd11d313158bf9792d (patch) | |
| tree | bd19564de1b9e5f853969edfb86f810d1c260386 | |
| parent | bd4ccd3afdd185c1030336d86c2c15726f9e874a (diff) | |
| download | ravanan-main.tar.gz ravanan-main.tar.lz ravanan-main.zip | |
| -rw-r--r-- | ravanan/javascript.scm | 18 | ||||
| -rw-r--r-- | tests/javascript.scm | 8 |
2 files changed, 25 insertions, 1 deletions
diff --git a/ravanan/javascript.scm b/ravanan/javascript.scm index 1edad00..eebf082 100644 --- a/ravanan/javascript.scm +++ b/ravanan/javascript.scm @@ -82,6 +82,16 @@ (define-peg-pattern javascript-expression all (and (ignore "$") javascript-subexpression)) +(define-peg-pattern javascript-function-body-subexpression body + (and "{" + (* (or (and (not-followed-by (or "{" "}")) + peg-any) + javascript-function-body-subexpression)) + "}")) + +(define-peg-pattern javascript-function-body all + (and (ignore "$") javascript-function-body-subexpression)) + (define-peg-pattern string-literal body (* (and (not-followed-by "$(") peg-any))) @@ -89,6 +99,7 @@ (define-peg-pattern javascript all (* (or parameter-reference javascript-expression + javascript-function-body string-literal))) (define* (evaluate-expression-tree-1 expression-tree context expression-lib) @@ -146,7 +157,12 @@ keys @code{\"inputs\"}, @code{\"self\"} and @code{\"runtime\"}. expression-lib))))) ;; This is a more complex javascript expression. Fall back to node. (('javascript-expression expression) - (evaluate-using-node expression context expression-lib)))) + (evaluate-using-node expression context expression-lib)) + ;; This is a javascript function body. Fall back to node. + (('javascript-function-body function-body) + (evaluate-using-node (string-append "(function() {" function-body "})()") + context + expression-lib)))) (define (evaluate-using-node expression context expression-lib) "Evaluate javascript @var{expression} using the node javascript engine in diff --git a/tests/javascript.scm b/tests/javascript.scm index 9f86e7f..4a58f3a 100644 --- a/tests/javascript.scm +++ b/tests/javascript.scm @@ -178,4 +178,12 @@ (evaluate-javascript-expression "$(1 - (2 - 1))" '())) +(test-equal "evaluate javascript function body" + 2 + (evaluate-javascript-expression "${switch (inputs.message) { case \"foo\": return 1; case \"bar\": return 2; default: return 3}}" + '(("inputs" . (("message" . "bar") + ("threads" . 48))) + ("self" . #f) + ("runtime" . #f)))) + (test-end "javascript") |
