aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/js/runtime.jvm.lux
diff options
context:
space:
mode:
authorEduardo Julian2018-02-21 23:50:39 -0400
committerEduardo Julian2018-02-21 23:50:39 -0400
commit2ec51eee557b7a70a2e19e2d86b86e478ab24d52 (patch)
tree78e2b91934c646f716d231ce91775b02dd22e373 /new-luxc/source/luxc/lang/translation/js/runtime.jvm.lux
parent4369bd0ee320d85590efa9c71db591200fb54cd2 (diff)
- Changed the format for variants in JS.
- Fixed a bug when decoding fracs.
Diffstat (limited to '')
-rw-r--r--new-luxc/source/luxc/lang/translation/js/runtime.jvm.lux33
1 files changed, 23 insertions, 10 deletions
diff --git a/new-luxc/source/luxc/lang/translation/js/runtime.jvm.lux b/new-luxc/source/luxc/lang/translation/js/runtime.jvm.lux
index 0ff5e46b9..8c33b2a82 100644
--- a/new-luxc/source/luxc/lang/translation/js/runtime.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/js/runtime.jvm.lux
@@ -18,9 +18,17 @@
(%t "")
"null"))
+(def: (variant-js tag last? value)
+ (-> //.Expression //.Expression //.Expression //.Expression)
+ (format "{"
+ //.variant-tag-field ": " tag ","
+ //.variant-flag-field ": " last? ","
+ //.variant-value-field ": " value
+ "}"))
+
(def: #export (variant tag last? value)
(-> Nat Bool //.Expression //.Expression)
- (format "[" (%i (nat-to-int tag)) "," (flag last?) "," value "]"))
+ (variant-js (%i (nat-to-int tag)) (flag last?) value))
(def: none
//.Expression
@@ -132,20 +140,25 @@
(runtime: sum//get "sum_get"
(let [no-match "return null;"
- extact-match "return sum[2];"
- test-recursion (format "if(sum[1] === '') {"
+ sum-tag (format "sum." //.variant-tag-field)
+ sum-flag (format "sum." //.variant-flag-field)
+ sum-value (format "sum." //.variant-value-field)
+ is-last? (format sum-flag " === ''")
+ extact-match (format "return " sum-value ";")
+ test-recursion (format "if(" is-last? ") {"
## Must recurse.
- "return " @ "(sum[2], (wantedTag - sum[0]), wantsLast);"
+ "return " @ "(" sum-value ", (wantedTag - " sum-tag "), wantsLast);"
"}"
"else { " no-match " }")]
(format "(function " @ "(sum,wantedTag,wantsLast) {"
- "if(wantedTag === sum[0]) {"
- (format "if(sum[1] === wantsLast) {" extact-match "}"
+ "if(wantedTag === " sum-tag ") {"
+ (format "if(" sum-flag " === wantsLast) {" extact-match "}"
"else {" test-recursion "}")
"}"
- (format "else if(wantedTag > sum[0]) {" test-recursion "}")
- (format "else if(wantedTag < sum[0] && wantsLast === '') {"
- "return [(sum[0]-wantedTag),sum[1],sum[2]];"
+ (format "else if(wantedTag > " sum-tag ") {" test-recursion "}")
+ (format "else if(wantedTag < " sum-tag " && wantsLast === '') {"
+ (let [updated-sum (variant-js (format "(" sum-tag " - wantedTag)") sum-flag sum-value)]
+ (format "return " updated-sum ";"))
"}")
"else { " no-match " }"
"})")))
@@ -235,7 +248,7 @@
"})")))
(bit-operation: bit//and "andI64" "&")
-(bit-operation: bit//or "orI64" "|")
+(bit-operation: bit//or "orI64" "|")
(bit-operation: bit//xor "xorI64" "^")
(runtime: bit//not "notI64"