aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang
diff options
context:
space:
mode:
authorEduardo Julian2019-02-20 00:00:57 -0400
committerEduardo Julian2019-02-20 00:00:57 -0400
commitbe3e93a0688d1fee7fcb6ee464642451b0e43fe0 (patch)
tree8907b8601cc6a31b9b4b85ee424663146e2a980e /new-luxc/source/luxc/lang
parent2b105c8694b87a63bd151cd0966c9d5dcfaae672 (diff)
Moved function machinery over.
Diffstat (limited to 'new-luxc/source/luxc/lang')
-rw-r--r--new-luxc/source/luxc/lang/translation/js/function.jvm.lux77
1 files changed, 0 insertions, 77 deletions
diff --git a/new-luxc/source/luxc/lang/translation/js/function.jvm.lux b/new-luxc/source/luxc/lang/translation/js/function.jvm.lux
deleted file mode 100644
index ef5ea668e..000000000
--- a/new-luxc/source/luxc/lang/translation/js/function.jvm.lux
+++ /dev/null
@@ -1,77 +0,0 @@
-(.module:
- lux
- (lux (control [monad #+ do])
- (data [text]
- text/format
- (coll [list "list/" Functor<List>]))
- [macro])
- (luxc ["&" lang]
- (lang ["ls" synthesis]
- [".L" variable #+ Variable]
- (host [js #+ JS Expression Statement])))
- [//]
- (// [".T" reference]
- [".T" loop]))
-
-(def: #export (translate-apply translate functionS argsS+)
- (-> (-> ls.Synthesis (Meta Expression)) ls.Synthesis (List ls.Synthesis) (Meta Expression))
- (do macro.Monad<Meta>
- [functionJS (translate functionS)
- argsJS+ (monad.map @ translate argsS+)]
- (wrap (format functionJS "(" (text.join-with "," argsJS+) ")"))))
-
-(def: (input-declaration register)
- (format "var " (referenceT.variable (inc register)) " = arguments[" (|> register .int %i) "];"))
-
-(def: (with-closure inits function)
- (-> (List Expression) Expression Expression)
- (let [closure (case inits
- #.Nil
- (list)
-
- _
- (|> (list.n/range +0 (dec (list.size inits)))
- (list/map referenceT.closure)))]
- (format "(function(" (text.join-with "," closure) ") {"
- "return " function
- ";})(" (text.join-with "," inits) ")")))
-
-(def: #export (translate-function translate env arity bodyS)
- (-> (-> ls.Synthesis (Meta Expression))
- (List Variable) ls.Arity ls.Synthesis
- (Meta Expression))
- (do macro.Monad<Meta>
- [[function-name bodyJS] (//.with-sub-context
- (do @
- [function-name //.context]
- (//.with-anchor [function-name +1]
- (translate bodyS))))
- closureJS+ (monad.map @ referenceT.translate-variable env)
- #let [args-initsJS+ (|> (list.n/range +0 (dec arity))
- (list/map input-declaration)
- (text.join-with ""))
- selfJS (format "var " (referenceT.variable +0) " = " function-name ";")
- arityJS (|> arity .int %i)]]
- (wrap (<| (with-closure closureJS+)
- (format "(function " function-name "() {"
- "\"use strict\";"
- "var num_args = arguments.length;"
- "if(num_args == " arityJS ") {"
- selfJS
- args-initsJS+
- (format "while(true) {"
- "return " bodyJS ";"
- "}")
- "}"
- "else if(num_args > " arityJS ") {"
- "return " function-name ".apply(null, [].slice.call(arguments,0," arityJS "))"
- ".apply(null, [].slice.call(arguments," arityJS "));"
- "}"
- ## Less than arity
- "else {"
- "var curried = [].slice.call(arguments);"
- "return function() { "
- "return " function-name ".apply(null, curried.concat([].slice.call(arguments)));"
- " };"
- "}"
- "})")))))