From 5ce3411d68cf11daa0ff3e5171afced429696480 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 26 Mar 2019 19:22:42 -0400 Subject: WIP: Moved Python code-generation machinery over to stdlib. --- .../luxc/lang/translation/python/runtime.jvm.lux | 365 --------------------- 1 file changed, 365 deletions(-) delete mode 100644 new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux (limited to 'new-luxc/source/luxc/lang/translation/python/runtime.jvm.lux') 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] - [monad #+ do]) - (data text/format - (coll [list "list/" Monad])) - [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 [ ] - [(def: ( top value) - (-> Expression Expression Expression) - (python.and (|> value (python.>= (python.int 0))) - (|> value ( 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 - [_ //.init-module-buffer - _ (//.save runtime)] - (//.save-module! artifact))) -- cgit v1.2.3