aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux
diff options
context:
space:
mode:
authorEduardo Julian2019-03-26 19:22:42 -0400
committerEduardo Julian2019-03-26 19:22:42 -0400
commit5ce3411d68cf11daa0ff3e5171afced429696480 (patch)
tree03c923233d24623e0c9dfed53acc91b64b5ed683 /new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux
parent91cd93a50347d39c286366c32c723fd861c5975e (diff)
WIP: Moved Python code-generation machinery over to stdlib.
Diffstat (limited to '')
-rw-r--r--new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux365
1 files changed, 0 insertions, 365 deletions
diff --git a/new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux b/new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux
deleted file mode 100644
index e5beb9872..000000000
--- a/new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux
+++ /dev/null
@@ -1,365 +0,0 @@
-(.module:
- lux
- (lux (control ["p" parser "p/" Monad<Parser>]
- [monad #+ do])
- (data text/format
- (coll [list "list/" Monad<List>]))
- [macro]
- (macro [code]
- ["s" syntax #+ syntax:])
- [io #+ Process])
- [//]
- (luxc [lang]
- (lang (host [python #+ Expression Statement @@]))))
-
-(def: prefix Text "LuxRuntime")
-
-(def: #export unit Expression (python.string //.unit))
-
-(def: (flag value)
- (-> Bit Expression)
- (if value
- (python.string "")
- python.none))
-
-(def: (variant' tag last? value)
- (-> Expression Expression Expression Expression)
- (python.dict (list [(python.string //.variant-tag-field) tag]
- [(python.string //.variant-flag-field) last?]
- [(python.string //.variant-value-field) value])))
-
-(def: #export (variant tag last? value)
- (-> Nat Bit Expression Expression)
- (variant' (python.int (.int tag))
- (flag last?)
- value))
-
-(def: #export none
- Expression
- (variant +0 #0 unit))
-
-(def: #export some
- (-> Expression Expression)
- (variant +1 #1))
-
-(def: #export left
- (-> Expression Expression)
- (variant +0 #0))
-
-(def: #export right
- (-> Expression Expression)
- (variant +1 #1))
-
-(type: Runtime Statement)
-
-(def: declaration
- (s.Syntax [Text (List Text)])
- (p.either (p.seq s.local-identifier (p/wrap (list)))
- (s.form (p.seq s.local-identifier (p.some s.local-identifier)))))
-
-(syntax: (runtime: {[name args] declaration}
- definition)
- (let [implementation (code.local-identifier (format "@@" name))
- runtime (format "__" prefix "__" (lang.normalize-name name))
- $runtime (` (python.var (~ (code.text runtime))))
- @runtime (` (@@ (~ $runtime)))
- argsC+ (list/map code.local-identifier args)
- argsLC+ (list/map (|>> lang.normalize-name code.text (~) (python.var) (`))
- args)
- declaration (` ((~ (code.local-identifier name))
- (~+ argsC+)))
- type (` (-> (~+ (list.repeat (list.size argsC+) (` python.Expression)))
- python.Expression))]
- (wrap (list (` (def: (~' #export) (~ declaration)
- (~ type)
- (python.apply (list (~+ argsC+)) (~ @runtime))))
- (` (def: (~ implementation)
- python.Statement
- (~ (case argsC+
- #.Nil
- (` (python.set! (list (~ $runtime)) (~ definition)))
-
- _
- (` (let [(~+ (|> (list.zip2 argsC+ argsLC+)
- (list/map (function (_ [left right])
- (list left (` (@@ (~ right))))))
- list/join))]
- (python.def! (~ $runtime)
- (list (~+ argsLC+))
- (~ definition))))))))))))
-
-(syntax: (with-vars {vars (s.tuple (p.many s.local-identifier))}
- body)
- (wrap (list (` (let [(~+ (|> vars
- (list/map (function (_ var)
- (list (code.local-identifier var)
- (` (python.var (~ (code.text (lang.normalize-name var))))))))
- list/join))]
- (~ body))))))
-
-(runtime: (lux//try op)
- (let [$error (python.var "error")
- $value (python.var "value")]
- (python.try! ($_ python.then!
- (python.set! (list $value) (python.apply (list unit) op))
- (python.return! (right (@@ $value))))
- (list [(list "Exception") $error
- (python.return! (left (python.apply (list (@@ $error)) (python.global "str"))))]))))
-
-(runtime: (lux//program-args program-args)
- (let [$inputs (python.var "inputs")
- $value (python.var "value")]
- ($_ python.then!
- (python.set! (list $inputs) none)
- (<| (python.for-in! $value program-args)
- (python.set! (list $inputs)
- (some (python.tuple (list (@@ $value) (@@ $inputs))))))
- (python.return! (@@ $inputs)))))
-
-(def: runtime//lux
- Runtime
- ($_ python.then!
- @@lux//try
- @@lux//program-args))
-
-(runtime: (io//log! message)
- ($_ python.then!
- (python.print! message)
- (python.return! ..unit)))
-
-(def: (exception message)
- (-> Expression Expression)
- (python.apply (list message) (python.global "Exception")))
-
-(runtime: (io//throw! message)
- ($_ python.then!
- (python.raise! (exception message))
- (python.return! ..unit)))
-
-(runtime: (io//exit! code)
- ($_ python.then!
- (python.import! "sys")
- (python.do! (|> (python.global "sys") (python.send (list code) "exit")))
- (python.return! ..unit)))
-
-(runtime: (io//current-time! _)
- ($_ python.then!
- (python.import! "time")
- (python.return! (let [time (|> (python.global "time")
- (python.send (list) "time")
- (python.* (python.int 1,000)))]
- (python.apply (list time) (python.global "int"))))))
-
-(def: runtime//io
- Runtime
- ($_ python.then!
- @@io//log!
- @@io//throw!
- @@io//exit!
- @@io//current-time!))
-
-(runtime: (product//left product index)
- (let [$index_min_length (python.var "index_min_length")]
- ($_ python.then!
- (python.set! (list $index_min_length) (python.+ (python.int 1) index))
- (python.if! (python.> (@@ $index_min_length) (python.length product))
- ## No need for recursion
- (python.return! (python.nth index product))
- ## Needs recursion
- (python.return! (product//left (python.nth (python.- (python.int 1)
- (python.length product))
- product)
- (python.- (python.length product)
- (@@ $index_min_length))))))))
-
-(runtime: (product//right product index)
- (let [$index_min_length (python.var "index_min_length")]
- ($_ python.then!
- (python.set! (list $index_min_length) (python.+ (python.int 1) index))
- (python.cond! (list [(python.= (@@ $index_min_length) (python.length product))
- ## Last element.
- (python.return! (python.nth index product))]
- [(python.< (@@ $index_min_length) (python.length product))
- ## Needs recursion
- (python.return! (product//right (python.nth (python.- (python.int 1)
- (python.length product))
- product)
- (python.- (python.length product)
- (@@ $index_min_length))))])
- ## Must slice
- (python.return! (python.slice-from index product))))))
-
-(runtime: (sum//get sum wantedTag wantsLast)
- (let [no-match! (python.return! python.none)
- sum-tag (python.nth (python.string //.variant-tag-field) sum)
- sum-flag (python.nth (python.string //.variant-flag-field) sum)
- sum-value (python.nth (python.string //.variant-value-field) sum)
- is-last? (python.= (python.string "") sum-flag)
- test-recursion! (python.if! is-last?
- ## Must recurse.
- (python.return! (sum//get sum-value (python.- sum-tag wantedTag) wantsLast))
- no-match!)]
- (python.cond! (list [(python.= sum-tag wantedTag)
- (python.if! (python.= wantsLast sum-flag)
- (python.return! sum-value)
- test-recursion!)]
-
- [(python.> sum-tag wantedTag)
- test-recursion!]
-
- [(python.and (python.< sum-tag wantedTag)
- (python.= (python.string "") wantsLast))
- (python.return! (variant' (python.- wantedTag sum-tag) sum-flag sum-value))])
-
- no-match!)))
-
-(def: runtime//adt
- Runtime
- ($_ python.then!
- @@product//left
- @@product//right
- @@sum//get))
-
-(def: full-64-bits (python.code "0xFFFFFFFFFFFFFFFF"))
-
-(runtime: (bit//64 input)
- (with-vars [capped]
- (python.cond! (list [(|> input (python.> full-64-bits))
- (python.return! (|> input (python.bit-and full-64-bits) bit//64))]
- [(|> input (python.> (python.code "0x7FFFFFFFFFFFFFFF")))
- ($_ python.then!
- (python.set! (list capped)
- (python.apply (list (|> (python.code "0x10000000000000000")
- (python.- input)))
- (python.global "int")))
- (python.if! (|> (@@ capped) (python.<= (python.code "9223372036854775807L")))
- (python.return! (|> (@@ capped) (python.* (python.int -1))))
- (python.return! (python.code "-9223372036854775808L"))))])
- (python.return! input))))
-
-(runtime: (bit//logical-right-shift param subject)
- (let [mask (|> (python.int 1)
- (python.bit-shl (python.- param (python.int 64)))
- (python.- (python.int 1)))]
- (python.return! (|> subject
- (python.bit-shr param)
- (python.bit-and mask)))))
-
-(def: runtime//bit
- Runtime
- ($_ python.then!
- @@bit//64
- @@bit//logical-right-shift))
-
-(runtime: (frac//decode input)
- (let [$ex (python.var "ex")]
- (python.try!
- (python.return! (..some (python.apply (list input) (python.global "float"))))
- (list [(list "Exception") $ex
- (python.return! ..none)]))))
-
-(def: runtime//frac
- Runtime
- ($_ python.then!
- @@frac//decode))
-
-(runtime: (text//index subject param start)
- (with-vars [idx]
- ($_ python.then!
- (python.set! (list idx) (python.send (list param start) "find" subject))
- (python.if! (python.= (python.int -1) (@@ idx))
- (python.return! ..none)
- (python.return! (..some (@@ idx)))))))
-
-(def: inc (|>> (python.+ (python.int 1))))
-
-(do-template [<name> <top-cmp>]
- [(def: (<name> top value)
- (-> Expression Expression Expression)
- (python.and (|> value (python.>= (python.int 0)))
- (|> value (<top-cmp> top))))]
-
- [within? python.<]
- [up-to? python.<=]
- )
-
-(runtime: (text//clip @text @from @to)
- (with-vars [length]
- ($_ python.then!
- (python.set! (list length) (python.length @text))
- (python.if! ($_ python.and
- (|> @to (within? (@@ length)))
- (|> @from (up-to? @to)))
- (python.return! (..some (|> @text (python.slice @from (inc @to)))))
- (python.return! ..none)))))
-
-(runtime: (text//char text idx)
- (python.if! (|> idx (within? (python.length text)))
- (python.return! (..some (python.apply (list (|> text (python.slice idx (inc idx))))
- (python.global "ord"))))
- (python.return! ..none)))
-
-(def: runtime//text
- Runtime
- ($_ python.then!
- @@text//index
- @@text//clip
- @@text//char))
-
-(def: (check-index-out-of-bounds array idx body!)
- (-> Expression Expression Statement Statement)
- (python.if! (|> idx (python.<= (python.length array)))
- body!
- (python.raise! (exception (python.string "Array index out of bounds!")))))
-
-(runtime: (array//get array idx)
- (with-vars [temp]
- (<| (check-index-out-of-bounds array idx)
- ($_ python.then!
- (python.set! (list temp) (python.nth idx array))
- (python.if! (python.= python.none (@@ temp))
- (python.return! ..none)
- (python.return! (..some (@@ temp))))))))
-
-(runtime: (array//put array idx value)
- (<| (check-index-out-of-bounds array idx)
- ($_ python.then!
- (python.set-nth! idx value array)
- (python.return! array))))
-
-(def: runtime//array
- Runtime
- ($_ python.then!
- @@array//get
- @@array//put))
-
-(runtime: (box//write value box)
- ($_ python.then!
- (python.set-nth! (python.int 0) value box)
- (python.return! ..unit)))
-
-(def: runtime//box
- Runtime
- @@box//write)
-
-(def: runtime
- Runtime
- ($_ python.then!
- runtime//lux
- runtime//adt
- runtime//bit
- runtime//frac
- runtime//text
- runtime//array
- runtime//box
- runtime//io
- ))
-
-(def: #export artifact Text (format prefix ".py"))
-
-(def: #export translate
- (Meta (Process Any))
- (do macro.Monad<Meta>
- [_ //.init-module-buffer
- _ (//.save runtime)]
- (//.save-module! artifact)))