diff options
Diffstat (limited to 'stdlib')
15 files changed, 55 insertions, 88 deletions
diff --git a/stdlib/source/lux/data/format/tar.lux b/stdlib/source/lux/data/format/tar.lux index f796b7a6c..7d4968239 100644 --- a/stdlib/source/lux/data/format/tar.lux +++ b/stdlib/source/lux/data/format/tar.lux @@ -235,7 +235,7 @@ (recur (dec end)) _ - (binary.slice 0 (dec end) string)))))))) + (binary.slice 0 (inc end) string)))))))) (template [<type> <representation> <size> <exception> <in> <out> <writer> <parser> <none>] [(abstract: #export <type> diff --git a/stdlib/source/lux/time/instant.lux b/stdlib/source/lux/time/instant.lux index 48bc5414a..4658c75d4 100644 --- a/stdlib/source/lux/time/instant.lux +++ b/stdlib/source/lux/time/instant.lux @@ -1,5 +1,6 @@ (.module: [lux #* + ["@" target] [abstract [equivalence (#+ Equivalence)] [order (#+ Order)] @@ -19,7 +20,8 @@ ["." row]]] [math [number - ["i" int]]] + ["i" int] + ["f" frac]]] [type abstract]] ["." // (#+ Time) @@ -151,7 +153,43 @@ (def: #export now (IO Instant) - (io (..from_millis ("lux io current-time")))) + (io (..from_millis (for {@.old ("jvm invokestatic:java.lang.System:currentTimeMillis:") + @.jvm (|> ("jvm member invoke static" [] "java.lang.System" "currentTimeMillis" []) + (: (primitive "java.lang.Long")) + (:coerce Int)) + @.js (let [date ("js object new" ("js constant" "Date") [])] + (|> ("js object do" "getTime" date []) + (:coerce Frac) + "lux f64 i64")) + @.python (let [time ("python import" "time")] + (|> ("python object do" "time" time []) + (:coerce Frac) + (f.* +1,000.0) + "lux f64 i64")) + @.lua (|> ("lua constant" "os.time") + "lua apply" + (:coerce Int) + (i.* +1,000)) + @.ruby (let [% ("ruby constant" "Time") + % ("ruby object do" % "now")] + (|> ("ruby object do" % "to_f") + (:coerce Frac) + (f.* +1,000.0) + "lux f64 i64")) + @.php (|> ("php constant" "time") + "php apply" + (:coerce Int) + (i.* +1,000)) + @.scheme (|> ("scheme constant" "current-second") + (:coerce Int) + (i.* +1,000) + ("scheme apply" ("scheme constant" "exact")) + ("scheme apply" ("scheme constant" "truncate"))) + @.common_lisp (|> ("common_lisp constant" "get-universal-time") + "common_lisp apply" + (:coerce Int) + (i.* +1,000)) + })))) (template [<field> <type> <post_processing>] [(def: #export (<field> instant) @@ -189,6 +227,7 @@ (def: #export (from_date_time date time) (-> Date Time Instant) - (..from_millis - (i.+ (i.* (date.to_days date) (duration.to_millis duration.day)) - (.int (//.to_millis time))))) + (|> (date.to_days date) + (i.* (duration.to_millis duration.day)) + (i.+ (.int (//.to_millis time))) + ..from_millis)) diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/analysis/lux.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/analysis/lux.lux index 4e6a9f7ff..17c27fe4f 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/analysis/lux.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/analysis/lux.lux @@ -238,8 +238,7 @@ (|> ///bundle.empty (///bundle.install "log" (unary Text Any)) (///bundle.install "error" (unary Text Nothing)) - (///bundle.install "exit" (unary Int Nothing)) - (///bundle.install "current-time" (nullary Int))))) + (///bundle.install "exit" (unary Int Nothing))))) (def: I64* (type (I64 Any))) diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux index b47bade2d..d1ad7bd99 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/common_lisp/common.lux @@ -156,8 +156,7 @@ (def: (io//log! message) (Unary (Expression Any)) - (_.progn (list (_.pprint/1 message) - ## (_.write-line/1 message) + (_.progn (list (_.write-line/1 message) //runtime.unit))) (def: io_procs @@ -166,7 +165,6 @@ (|> /.empty (/.install "log" (unary ..io//log!)) (/.install "error" (unary _.error/1)) - ## (/.install "current-time" (nullary (function.constant (//runtime.io//current_time //runtime.unit)))) ))) (def: #export bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/js/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/js/common.lux index ca0e8daa9..deffe31d8 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/js/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/js/common.lux @@ -90,12 +90,6 @@ (//runtime.io//log messageG) //runtime.unit)) -(def: (io//current_time _) - (Nullary Expression) - (|> (_.new (_.var "Date") (list)) - (_.do "getTime" (list)) - //runtime.i64//from_number)) - ## TODO: Get rid of this ASAP (def: lux::syntax_char_case! (..custom [($_ <>.and @@ -183,8 +177,7 @@ (<| (/.prefix "io") (|> /.empty (/.install "log" (unary io//log)) - (/.install "error" (unary //runtime.io//error)) - (/.install "current-time" (nullary io//current_time))))) + (/.install "error" (unary //runtime.io//error))))) (def: #export bundle Bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux index a9251f4d6..24f82d1ef 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/jvm/common.lux @@ -396,29 +396,12 @@ (_.invokespecial ..$Error "<init>" ..string-method) _.athrow)) -(def: exit-method (type.method [(list type.int) type.void (list)])) -(def: (io::exit codeG) - (Unary (Bytecode Any)) - ($_ _.compose - codeG ..jvm-int - (_.invokestatic ..$System "exit" ..exit-method) - _.aconst-null)) - -(def: time-method (type.method [(list) type.long (list)])) -(def: (io::current-time _) - (Nullary (Bytecode Any)) - ($_ _.compose - (_.invokestatic ..$System "currentTimeMillis" ..time-method) - (///value.wrap type.long))) - (def: bundle::io Bundle (<| (/////bundle.prefix "io") (|> (: Bundle /////bundle.empty) (/////bundle.install "log" (unary ..io::log)) - (/////bundle.install "error" (unary ..io::error)) - (/////bundle.install "exit" (unary ..io::exit)) - (/////bundle.install "current-time" (nullary ..io::current-time))))) + (/////bundle.install "error" (unary ..io::error))))) (def: #export bundle Bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux index 33a952596..b22dd6d53 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/lua/common.lux @@ -167,10 +167,7 @@ (<| (/.prefix "io") (|> /.empty (/.install "log" (unary ..io//log!)) - (/.install "error" (unary (!unary "error"))) - (/.install "current-time" (nullary (function.constant (|> (_.var "os.time") - (_.apply/* (list)) - (_.* (_.int +1,000))))))))) + (/.install "error" (unary (!unary "error")))))) (def: #export bundle Bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux index 19e8c8e12..3784c001c 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/php/common.lux @@ -173,18 +173,12 @@ (/.install "clip" (trinary ..text//clip)) ))) -(def: io//current-time - (Nullary Expression) - (|>> _.time/0 - (_.* (_.int +1,000)))) - (def: io_procs Bundle (<| (/.prefix "io") (|> /.empty (/.install "log" (unary //runtime.io//log!)) - (/.install "error" (unary //runtime.io//throw!)) - (/.install "current-time" (nullary ..io//current-time))))) + (/.install "error" (unary //runtime.io//throw!))))) (def: #export bundle Bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux index d7133aa70..66e09f33b 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/python/common.lux @@ -157,8 +157,7 @@ (<| (/.prefix "io") (|> /.empty (/.install "log" (unary //runtime.io//log!)) - (/.install "error" (unary //runtime.io//throw!)) - (/.install "current-time" (nullary (function.constant (//runtime.io//current_time! //runtime.unit))))))) + (/.install "error" (unary //runtime.io//throw!))))) (def: #export bundle Bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux index 39ba71730..030b3b239 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/ruby/common.lux @@ -166,21 +166,13 @@ (Unary Expression) _.raise) -(def: (io//current_time! _) - (Nullary Expression) - (|> (_.local "Time") - (_.do "now" (list)) - (_.do "to_f" (list)) - (_.* (_.float +1000.0)) - (_.do "to_i" (list)))) - (def: io_procs Bundle (<| (/.prefix "io") (|> /.empty (/.install "log" (unary ..io//log!)) (/.install "error" (unary ..io//error!)) - (/.install "current-time" (nullary ..io//current_time!))))) + ))) (def: #export bundle Bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux index 71a122eff..4f1258794 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/extension/generation/scheme/common.lux @@ -160,7 +160,6 @@ (|> /.empty (/.install "log" (unary ..io//log!)) (/.install "error" (unary _.raise/1)) - (/.install "current-time" (nullary (function.constant (//runtime.io//current_time //runtime.unit)))) ))) (def: #export bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/extension/common.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/extension/common.lux index 750688dd6..574995de9 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/extension/common.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/extension/common.lux @@ -123,9 +123,7 @@ (|> bundle.empty (bundle.install "log" (unary (|>> _.print/1 ..void))) (bundle.install "error" (unary _.error/1)) - (bundle.install "exit" (unary ///runtime.io//exit)) - (bundle.install "current-time" (nullary (function (_ _) - (///runtime.io//current-time ///runtime.unit))))))) + ))) (def: #export bundle Bundle diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux index cc50cc49f..fd7ffc48b 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/common_lisp/runtime.lux @@ -266,14 +266,9 @@ (_.call/* (_.var "excl:exit") (list code))) (_.call/* (_.var "cl-user::quit") (list code))))) -(runtime: (io//current_time _) - (_.*/2 [(_.int +1,000) - (_.get-universal-time/0 [])])) - (def: runtime//io (List (Expression Any)) - (list @io//exit - @io//current_time)) + (list @io//exit)) (def: runtime (_.progn ($_ list\compose diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux index ec8ff641f..f12c8f08b 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/python/runtime.lux @@ -190,20 +190,11 @@ (runtime: (io//throw! message) (_.raise (_.Exception/1 message))) -(runtime: (io//current_time! _) - ($_ _.then - (_.import "time") - (_.return (|> (_.var "time") - (_.do "time" (list)) - (_.* (_.int +1,000)) - _.int/1)))) - (def: runtime//io (Statement Any) ($_ _.then @io//log! @io//throw! - @io//current_time! )) (def: last_index diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux index f27dc1154..612cb3153 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/generation/scheme/runtime.lux @@ -343,15 +343,6 @@ @array//write )) -(runtime: (io//current_time _) - (|> (_.apply/0 (_.var "current-second")) - (_.*/2 (_.int +1,000)) - _.exact/1 - _.truncate/1)) - -(def: runtime//io - (_.begin (list @io//current_time))) - (def: runtime Computation (_.begin (list @slice @@ -361,7 +352,6 @@ runtime//f64 runtime//text runtime//array - runtime//io ))) (def: #export generate |