aboutsummaryrefslogtreecommitdiff
path: root/lux-php
diff options
context:
space:
mode:
Diffstat (limited to 'lux-php')
-rw-r--r--lux-php/source/program.lux671
1 files changed, 398 insertions, 273 deletions
diff --git a/lux-php/source/program.lux b/lux-php/source/program.lux
index a65999526..ae41496a2 100644
--- a/lux-php/source/program.lux
+++ b/lux-php/source/program.lux
@@ -1,259 +1,300 @@
(.module:
[lux #*
+ [program (#+ program:)]
+ ["." host]
+ ["." debug]
[abstract
["." monad (#+ do)]]
[control
- pipe
+ ["." try (#+ Try)]
["." exception (#+ exception:)]
["." io (#+ IO io)]
- ["p" parser
- [cli (#+ program:)]]]
+ [concurrency
+ ["." promise (#+ Promise)]]]
[data
["." maybe]
- ["." error (#+ Error)]
- [number
- ["." i64]]
- ["." text ("#@." hash)
- format]
+ ["." text ("#\." hash)
+ ["%" format (#+ format)]
+ ["." encoding]]
[collection
- ["." array (#+ Array)]
- ["." list ("#@." functor)]]]
+ ["." array (#+ Array)]]]
[macro
["." template]]
- [world
- ["." file]]
- ["." host (#+ import: interface: do-to object)
+ [math
+ [number (#+ hex)
+ ["n" nat]
+ ["." i64]]]
+ ["." world #_
+ ["." file]
+ ["#/." program]]
+ ["@" target
["_" php]]
[tool
[compiler
- ["." name]
- ["." synthesis]
- [phase
- [macro (#+ Expander)]
- ["." generation
- ["." php
- ["." runtime]
- ["." extension]]]]
+ [phase (#+ Operation Phase)]
+ [reference
+ [variable (#+ Register)]]
+ [language
+ [lux
+ [program (#+ Program)]
+ [generation (#+ Context Host)]
+ ["." synthesis]
+ [analysis
+ [macro (#+ Expander)]]
+ [phase
+ ["." extension (#+ Extender Handler)
+ ["#/." bundle]
+ ["." analysis #_
+ ["#" php]]
+ ["." generation #_
+ ["#" php]]]
+ [generation
+ ["." reference]
+ ["." php
+ ["." runtime]]]]]]
[default
- ["." platform (#+ Platform)]]]]
- ["." debug]]
+ ["." platform (#+ Platform)]]
+ [meta
+ ["." packager #_
+ ["#" script]]]]]]
[program
["/" compositor
- ["/." cli]]])
+ ["#." cli]
+ ["#." static]]])
-(import: #long java/lang/String)
+(host.import: java/lang/String)
-(import: #long (java/lang/Class a))
+(host.import: (java/lang/Class a))
-(import: #long java/lang/Object
- (toString [] java/lang/String)
- (getClass [] (java/lang/Class java/lang/Object)))
+(host.import: java/lang/Object
+ ["#::."
+ (toString [] java/lang/String)
+ (getClass [] (java/lang/Class java/lang/Object))])
-(import: #long java/lang/Integer)
+(host.import: java/lang/Integer)
-(import: #long java/lang/Long
- (intValue [] java/lang/Integer))
+(host.import: java/lang/Long
+ ["#::."
+ (intValue [] java/lang/Integer)])
-(import: #long php/runtime/Memory)
+(host.import: php/runtime/Memory)
-(import: #long php/runtime/Memory$Type
- (#enum ARRAY))
+(host.import: php/runtime/Memory$Type
+ ["#::."
+ (#enum ARRAY)])
-(import: #long php/runtime/memory/NullMemory)
+(host.import: php/runtime/memory/NullMemory)
-(import: #long php/runtime/memory/FalseMemory)
-(import: #long php/runtime/memory/TrueMemory)
+(host.import: php/runtime/memory/FalseMemory)
+(host.import: php/runtime/memory/TrueMemory)
-(import: #long php/runtime/memory/LongMemory
- (new [long])
- (toLong [] long))
+(host.import: php/runtime/memory/LongMemory
+ ["#::."
+ (new [long])
+ (toLong [] long)])
-(import: #long php/runtime/memory/DoubleMemory
- (toDouble [] double))
+(host.import: php/runtime/memory/DoubleMemory
+ ["#::."
+ (toDouble [] double)])
-(import: #long php/runtime/memory/StringMemory
- (new [java/lang/String])
- (toString [] java/lang/String))
+(host.import: php/runtime/memory/StringMemory
+ ["#::."
+ (new [java/lang/String])
+ (toString [] java/lang/String)])
-(import: #long php/runtime/memory/ReferenceMemory
- (getValue [] php/runtime/Memory))
+(host.import: php/runtime/memory/ReferenceMemory
+ ["#::."
+ (getValue [] php/runtime/Memory)])
-(import: #long php/runtime/memory/ArrayMemory
- (new [[java/lang/Object]])
- (size [] int)
- (isMap [] boolean)
- (get [php/runtime/Memory] php/runtime/Memory))
+(host.import: php/runtime/memory/ArrayMemory
+ ["#::."
+ (new [[java/lang/Object]])
+ (size [] int)
+ (isMap [] boolean)
+ (get [php/runtime/Memory] php/runtime/Memory)])
-(import: #long php/runtime/lang/IObject)
+(host.import: php/runtime/lang/IObject)
-(import: #long php/runtime/memory/ObjectMemory
- (value php/runtime/lang/IObject))
+(host.import: php/runtime/memory/ObjectMemory
+ ["#::."
+ (value php/runtime/lang/IObject)])
-(import: #long php/runtime/env/Environment
- (#static current [] php/runtime/env/Environment))
+(host.import: php/runtime/env/Environment
+ ["#::."
+ (#static current [] php/runtime/env/Environment)])
-(import: #long php/runtime/env/TraceInfo
- (new [java/lang/String int int]))
+(host.import: php/runtime/env/TraceInfo
+ ["#::."
+ (new [java/lang/String int int])])
-(import: #long php/runtime/reflection/FunctionEntity)
+(host.import: php/runtime/reflection/FunctionEntity)
-(import: #long php/runtime/invoke/InvokeHelper
- (#static callAny [php/runtime/Memory [php/runtime/Memory] php/runtime/env/Environment php/runtime/env/TraceInfo]
- #try php/runtime/Memory))
+(host.import: php/runtime/invoke/InvokeHelper
+ ["#::."
+ (#static callAny [php/runtime/Memory [php/runtime/Memory] php/runtime/env/Environment php/runtime/env/TraceInfo]
+ #try php/runtime/Memory)])
-(import: #long php/runtime/lang/Closure
- (call [php/runtime/env/Environment [php/runtime/Memory]] #try php/runtime/Memory))
+(host.import: php/runtime/lang/Closure
+ ["#::."
+ (call [php/runtime/env/Environment [php/runtime/Memory]] #try php/runtime/Memory)])
(template [<name>]
- [(interface: <name>
+ [(host.interface: <name>
(getValue [] java/lang/Object))
- (`` (import: (~~ (template.identifier ["program/" <name>]))
- (getValue [] java/lang/Object)))]
+ (`` (host.import: (~~ (template.identifier ["program/" <name>]))
+ ["#::."
+ (getValue [] java/lang/Object)]))]
[StructureValue]
)
(type: Reader
- (-> java/lang/Object (Error Any)))
+ (-> java/lang/Object (Try Any)))
-(exception: (unknown-kind-of-object {object java/lang/Object})
+(exception: (unknown_kind_of_object {object java/lang/Object})
(exception.report
["Class" (java/lang/Object::toString (java/lang/Object::getClass object))]
["Object" (java/lang/Object::toString object)]))
-(def: (lux-structure value)
+(def: (lux_structure value)
(-> (Array java/lang/Object)
- ## php/runtime/memory/ArrayMemory
- php/runtime/Memory)
- (`` (object [] php/runtime/Memory ## php/runtime/memory/ArrayMemory
+ php/runtime/memory/ArrayMemory
+ ## php/runtime/Memory
+ )
+ (`` (host.object [] ## php/runtime/Memory
+ php/runtime/memory/ArrayMemory
[program/StructureValue]
- [{php/runtime/Memory$Type php/runtime/Memory$Type::ARRAY}]
+ [## {php/runtime/Memory$Type php/runtime/Memory$Type::ARRAY}
+ ]
## Methods
(program/StructureValue
- (getValue)
- java/lang/Object
+ [] (getValue self) java/lang/Object
(:assume value))
- ## (php/runtime/memory/ArrayMemory
- ## (size)
- ## int
- ## (exec
- ## (log! "{lux-structure#size}")
- ## (:assume (array.size value))))
+ (php/runtime/memory/ArrayMemory
+ [] (size self)
+ int
+ (exec
+ (debug.log! "{lux_structure#size}")
+ (:assume (array.size value))))
- ## (php/runtime/memory/ArrayMemory
- ## (get {key php/runtime/Memory})
- ## php/runtime/Memory
- ## (exec
- ## (log! (format "{lux-structure#get}" text.new-line
- ## (exception.construct unknown-kind-of-object key)))
- ## (error! "OOPS!")))
-
- ## (php/runtime/memory/ArrayMemory
- ## (getOrCreate {key php/runtime/Memory})
- ## php/runtime/memory/ReferenceMemory
- ## (exec
- ## (log! (format "{lux-structure#getOrCreate}" text.new-line
- ## (exception.construct unknown-kind-of-object key)))
- ## (error! "OOPS!")))
-
- ## (php/runtime/memory/ArrayMemory
- ## (getOrCreateAsShortcut {key php/runtime/Memory})
- ## php/runtime/memory/ReferenceMemory
- ## (exec
- ## (log! (format "{lux-structure#getOrCreateAsShortcut}" text.new-line
- ## (exception.construct unknown-kind-of-object key)))
- ## (error! "OOPS!")))
-
- ## (php/runtime/memory/ArrayMemory
- ## (getByScalarOrCreateAsShortcut {key java/lang/Object})
- ## php/runtime/memory/ReferenceMemory
- ## (exec
- ## (log! (format "{lux-structure#getByScalarOrCreateAsShortcut}" text.new-line
- ## (exception.construct unknown-kind-of-object key)))
- ## (error! "OOPS!")))
-
- ## (php/runtime/memory/ArrayMemory
- ## (getByScalarOrCreate {key java/lang/Object})
- ## php/runtime/memory/ReferenceMemory
- ## (exec
- ## (log! (format "{lux-structure#getByScalarOrCreate}" text.new-line
- ## (exception.construct unknown-kind-of-object key)))
- ## (error! "OOPS!")))
+ (php/runtime/memory/ArrayMemory
+ [] (get self {key php/runtime/Memory})
+ php/runtime/Memory
+ (exec
+ (debug.log! (format "{lux_structure#get}" text.new_line
+ (exception.construct unknown_kind_of_object key)))
+ (error! "OOPS!")))
- ## (php/runtime/memory/ArrayMemory
- ## (getByScalar {key java/lang/Object})
- ## php/runtime/memory/ReferenceMemory
- ## (exec
- ## (log! (format "{lux-structure#getByScalar}" text.new-line
- ## (exception.construct unknown-kind-of-object key)))
- ## (error! "OOPS!")))
+ (php/runtime/memory/ArrayMemory
+ [] (getOrCreate self {key php/runtime/Memory})
+ php/runtime/memory/ReferenceMemory
+ (exec
+ (debug.log! (format "{lux_structure#getOrCreate}" text.new_line
+ (exception.construct unknown_kind_of_object key)))
+ (error! "OOPS!")))
- (php/runtime/Memory
- (refOfIndex {trace php/runtime/env/TraceInfo}
- {index php/runtime/Memory})
- php/runtime/Memory
+ (php/runtime/memory/ArrayMemory
+ [] (getOrCreateAsShortcut self {key php/runtime/Memory})
+ php/runtime/memory/ReferenceMemory
(exec
- (log! (format "{lux-structure#refOfIndex}" text.new-line
- (exception.construct unknown-kind-of-object index)))
+ (debug.log! (format "{lux_structure#getOrCreateAsShortcut}" text.new_line
+ (exception.construct unknown_kind_of_object key)))
(error! "OOPS!")))
- (php/runtime/Memory
- (refOfIndexAsShortcut {trace php/runtime/env/TraceInfo}
- {index php/runtime/Memory})
- php/runtime/Memory
+ (php/runtime/memory/ArrayMemory
+ [] (getByScalarOrCreateAsShortcut self {key java/lang/Object})
+ php/runtime/memory/ReferenceMemory
(exec
- (log! (format "{lux-structure#refOfIndexAsShortcut}" text.new-line
- (exception.construct unknown-kind-of-object index)))
+ (debug.log! (format "{lux_structure#getByScalarOrCreateAsShortcut}" text.new_line
+ (exception.construct unknown_kind_of_object key)))
(error! "OOPS!")))
- (php/runtime/Memory
- (refOfIndex {trace php/runtime/env/TraceInfo}
- {index long})
- php/runtime/Memory
+ (php/runtime/memory/ArrayMemory
+ [] (getByScalarOrCreate self {key java/lang/Object})
+ php/runtime/memory/ReferenceMemory
(exec
- (log! (format "{lux-structure#refOfIndex long}" text.new-line
- (exception.construct unknown-kind-of-object index)))
+ (debug.log! (format "{lux_structure#getByScalarOrCreate}" text.new_line
+ (exception.construct unknown_kind_of_object key)))
(error! "OOPS!")))
- (php/runtime/Memory
- (refOfIndex {trace php/runtime/env/TraceInfo}
- {index java/lang/String})
- php/runtime/Memory
+ (php/runtime/memory/ArrayMemory
+ [] (getByScalar self {key java/lang/Object})
+ php/runtime/memory/ReferenceMemory
(exec
- (log! (format "{lux-structure#refOfIndex java/lang/String}" text.new-line
- (exception.construct unknown-kind-of-object index)))
+ (debug.log! (format "{lux_structure#getByScalar}" text.new_line
+ (exception.construct unknown_kind_of_object key)))
(error! "OOPS!")))
- (~~ (template [<name>]
- [(php/runtime/Memory (<name>) php/runtime/Memory (undefined))]
+ ## (php/runtime/Memory
+ ## [] (refOfIndex self
+ ## {trace php/runtime/env/TraceInfo}
+ ## {index php/runtime/Memory})
+ ## php/runtime/Memory
+ ## (exec
+ ## (log! (format "{lux_structure#refOfIndex}" text.new_line
+ ## (exception.construct unknown_kind_of_object index)))
+ ## (error! "OOPS!")))
- [inc] [dec] [negative] [toNumeric]
- ))
+ ## (php/runtime/Memory
+ ## [] (refOfIndexAsShortcut self
+ ## {trace php/runtime/env/TraceInfo}
+ ## {index php/runtime/Memory})
+ ## php/runtime/Memory
+ ## (exec
+ ## (log! (format "{lux_structure#refOfIndexAsShortcut}" text.new_line
+ ## (exception.construct unknown_kind_of_object index)))
+ ## (error! "OOPS!")))
- (~~ (template [<name>]
- [(php/runtime/Memory (<name> {other php/runtime/Memory}) php/runtime/Memory (undefined))]
+ ## (php/runtime/Memory
+ ## [] (refOfIndex self
+ ## {trace php/runtime/env/TraceInfo}
+ ## {index long})
+ ## php/runtime/Memory
+ ## (exec
+ ## (log! (format "{lux_structure#refOfIndex long}" text.new_line
+ ## (exception.construct unknown_kind_of_object index)))
+ ## (error! "OOPS!")))
- [plus] [minus] [mul] [pow] [div]
- [identical] [equal] [notEqual]
- [smaller] [smallerEq] [greater] [greaterEq]
- ))
+ ## (php/runtime/Memory
+ ## [] (refOfIndex self
+ ## {trace php/runtime/env/TraceInfo}
+ ## {index java/lang/String})
+ ## php/runtime/Memory
+ ## (exec
+ ## (log! (format "{lux_structure#refOfIndex java/lang/String}" text.new_line
+ ## (exception.construct unknown_kind_of_object index)))
+ ## (error! "OOPS!")))
+
+ ## (~~ (template [<name>]
+ ## [(php/runtime/Memory [] (<name> self) php/runtime/Memory (undefined))]
+
+ ## [inc] [dec] [negative] [toNumeric]
+ ## ))
- (php/runtime/Memory (toLong) long (undefined))
- (php/runtime/Memory (toDouble) double (undefined))
- (php/runtime/Memory (toBoolean) boolean (undefined))
- (php/runtime/Memory (toString) java/lang/String (undefined))
- (php/runtime/Memory (getBinaryBytes {input java/nio/charset/Charset}) ByteArray (undefined))
+ ## (~~ (template [<name>]
+ ## [(php/runtime/Memory [] (<name> self {other php/runtime/Memory}) php/runtime/Memory (undefined))]
+
+ ## [plus] [minus] [mul] [pow] [div]
+ ## [identical] [equal] [notEqual]
+ ## [smaller] [smallerEq] [greater] [greaterEq]
+ ## ))
+
+ ## (php/runtime/Memory [] (toLong self) long (undefined))
+ ## (php/runtime/Memory [] (toDouble self) double (undefined))
+ ## (php/runtime/Memory [] (toBoolean self) boolean (undefined))
+ ## (php/runtime/Memory [] (toString self) java/lang/String (undefined))
+ ## (php/runtime/Memory [] (getBinaryBytes self {input java/nio/charset/Charset}) ByteArray (undefined))
)))
-(def: (read-tuple read host-object)
- (-> Reader php/runtime/memory/ArrayMemory (Error Any))
- (let [size (:coerce Nat (php/runtime/memory/ArrayMemory::size host-object))]
+(def: (read_tuple read host_object)
+ (-> Reader php/runtime/memory/ArrayMemory (Try Any))
+ (let [size (:coerce Nat (php/runtime/memory/ArrayMemory::size host_object))]
(loop [idx 0
output (:coerce (Array Any) (array.new size))]
- (if (n/< size idx)
- (let [value (|> host-object
+ (if (n.< size idx)
+ (let [value (|> host_object
(php/runtime/memory/ArrayMemory::get (php/runtime/memory/LongMemory::new (.int idx)))
(:coerce php/runtime/memory/ReferenceMemory)
php/runtime/memory/ReferenceMemory::getValue)]
@@ -263,47 +304,47 @@
#.None
(case (read value)
- (#error.Failure error)
- (#error.Failure error)
+ (#try.Failure error)
+ (#try.Failure error)
- (#error.Success lux-value)
- (recur (inc idx) (array.write idx lux-value output)))))
- (#error.Success output)))))
+ (#try.Success lux_value)
+ (recur (inc idx) (array.write! idx lux_value output)))))
+ (#try.Success output)))))
-(def: (read-variant read host-object)
- (-> Reader php/runtime/memory/ArrayMemory (Error Any))
- (case [(|> host-object
- (php/runtime/memory/ArrayMemory::get (php/runtime/memory/StringMemory::new runtime.variant-tag-field))
+(def: (read_variant read host_object)
+ (-> Reader php/runtime/memory/ArrayMemory (Try Any))
+ (case [(|> host_object
+ (php/runtime/memory/ArrayMemory::get (php/runtime/memory/StringMemory::new runtime.variant_tag_field))
read)
- (|> host-object
- (php/runtime/memory/ArrayMemory::get (php/runtime/memory/StringMemory::new runtime.variant-value-field))
+ (|> host_object
+ (php/runtime/memory/ArrayMemory::get (php/runtime/memory/StringMemory::new runtime.variant_value_field))
read)]
- [(#error.Success tag) (#error.Success value)]
- (#error.Success [(java/lang/Long::intValue (:coerce java/lang/Long tag))
- (: Any
- (case (|> host-object
- (php/runtime/memory/ArrayMemory::get (php/runtime/memory/StringMemory::new runtime.variant-flag-field))
- (:coerce php/runtime/memory/ReferenceMemory)
- php/runtime/memory/ReferenceMemory::getValue
- (host.check php/runtime/memory/NullMemory))
- (#.Some _)
- (host.null)
-
- #.None
- synthesis.unit))
- value])
+ [(#try.Success tag) (#try.Success value)]
+ (#try.Success [(java/lang/Long::intValue (:coerce java/lang/Long tag))
+ (: Any
+ (case (|> host_object
+ (php/runtime/memory/ArrayMemory::get (php/runtime/memory/StringMemory::new runtime.variant_flag_field))
+ (:coerce php/runtime/memory/ReferenceMemory)
+ php/runtime/memory/ReferenceMemory::getValue
+ (host.check php/runtime/memory/NullMemory))
+ (#.Some _)
+ (host.null)
+
+ #.None
+ synthesis.unit))
+ value])
_
- (exception.throw ..unknown-kind-of-object host-object)))
+ (exception.throw ..unknown_kind_of_object host_object)))
-(exception: #export nulll-has-no-lux-representation)
+(exception: #export nulll_has_no_lux_representation)
-(def: (read host-object)
+(def: (read host_object)
Reader
(`` (<| (~~ (template [<class> <constant>]
- [(case (host.check <class> host-object)
+ [(case (host.check <class> host_object)
(#.Some _)
- (#error.Success <constant>)
+ (#try.Success <constant>)
#.None)]
@@ -311,46 +352,48 @@
[php/runtime/memory/TrueMemory true]
))
(~~ (template [<class> <post>]
- [(case (host.check <class> host-object)
+ [(case (host.check <class> host_object)
(#.Some value)
(`` (|> value (~~ (template.splice <post>))))
#.None)]
- [php/runtime/memory/LongMemory [php/runtime/memory/LongMemory::toLong #error.Success]]
- [php/runtime/memory/DoubleMemory [php/runtime/memory/DoubleMemory::toDouble #error.Success]]
- [php/runtime/memory/StringMemory [php/runtime/memory/StringMemory::toString #error.Success]]
+ [php/runtime/memory/LongMemory [php/runtime/memory/LongMemory::toLong #try.Success]]
+ [php/runtime/memory/DoubleMemory [php/runtime/memory/DoubleMemory::toDouble #try.Success]]
+ [php/runtime/memory/StringMemory [php/runtime/memory/StringMemory::toString #try.Success]]
[php/runtime/memory/ReferenceMemory [php/runtime/memory/ReferenceMemory::getValue read]]
- [php/runtime/memory/ObjectMemory [#error.Success]]
+ [php/runtime/memory/ObjectMemory [#try.Success]]
))
- (case (host.check php/runtime/memory/ArrayMemory host-object)
+ (case (host.check php/runtime/memory/ArrayMemory host_object)
(#.Some value)
(if (php/runtime/memory/ArrayMemory::isMap value)
- (read-variant read value)
- (read-tuple read value))
+ (read_variant read value)
+ (read_tuple read value))
#.None)
- (exception.throw ..unknown-kind-of-object host-object)
+ (exception.throw ..unknown_kind_of_object host_object)
)))
-(exception: (cannot-apply-a-non-function {object java/lang/Object})
+(exception: (cannot_apply_a_non_function {object java/lang/Object})
(exception.report
["Class" (java/lang/Object::toString (java/lang/Object::getClass object))]
["Non-function" (java/lang/Object::toString object)]))
-(import: #long javax/script/ScriptEngine
- (eval [String] #try Object))
+(host.import: javax/script/ScriptEngine
+ ["#::."
+ (eval [java/lang/String] #try Object)])
-(import: #long org/develnext/jphp/scripting/JPHPScriptEngine
- (new []))
+(host.import: org/develnext/jphp/scripting/JPHPScriptEngine
+ ["#::."
+ (new [])])
-(def: (ensure-macro macro)
+(def: (ensure_macro macro)
## (-> Macro (Maybe php/runtime/lang/Closure))
## (do maybe.monad
- ## [object-memory (|> macro
+ ## [object_memory (|> macro
## (:coerce java/lang/Object)
## (host.check php/runtime/memory/ObjectMemory))]
- ## (|> object-memory
+ ## (|> object_memory
## php/runtime/memory/ObjectMemory::value
## (host.check php/runtime/lang/Closure)))
(-> Macro (Maybe php/runtime/memory/ObjectMemory))
@@ -358,103 +401,185 @@
(:coerce java/lang/Object)
(host.check php/runtime/memory/ObjectMemory)))
-(def: (call-macro inputs lux macro)
+(def: (call_macro inputs lux macro)
(-> (List Code) Lux
php/runtime/memory/ObjectMemory
## php/runtime/lang/Closure
- (Error (Error [Lux (List Code)])))
+ (Try (Try [Lux (List Code)])))
(<| :assume
- (do error.monad
- [#let [_ (log! (format "{call-macro 0} " (exception.construct ..unknown-kind-of-object (:coerce java/lang/Object (php/runtime/memory/ObjectMemory::value macro)))))]
+ (do try.monad
+ [#let [_ (debug.log! (format "{call_macro 0} " (exception.construct ..unknown_kind_of_object (:coerce java/lang/Object (php/runtime/memory/ObjectMemory::value macro)))))]
output (php/runtime/lang/Closure::call (php/runtime/env/Environment::current)
(|> (host.array php/runtime/Memory 3)
- (host.array-write 0 macro)
- (host.array-write 1
+ (host.array_write 0 macro)
+ (host.array_write 1
## (php/runtime/memory/ArrayMemory::new (:coerce (Array java/lang/Object) inputs))
- (lux-structure (:coerce (Array java/lang/Object) inputs))
+ (lux_structure (:coerce (Array java/lang/Object) inputs))
)
- (host.array-write 2
+ (host.array_write 2
## (php/runtime/memory/ArrayMemory::new (:coerce (Array java/lang/Object) lux))
- (lux-structure (:coerce (Array java/lang/Object) lux))
+ (lux_structure (:coerce (Array java/lang/Object) lux))
))
(:coerce php/runtime/lang/Closure
(php/runtime/memory/ObjectMemory::value macro)))
## output (php/runtime/invoke/InvokeHelper::callAny macro
## (|> (host.array php/runtime/Memory 2)
- ## ## (host.array-write 0 macro)
- ## ## (host.array-write 1 macro)
- ## (host.array-write 0 ## (php/runtime/memory/ArrayMemory::new (:coerce (Array java/lang/Object) inputs))
- ## (lux-structure (:coerce (Array java/lang/Object) inputs))
+ ## ## (host.array_write 0 macro)
+ ## ## (host.array_write 1 macro)
+ ## (host.array_write 0 ## (php/runtime/memory/ArrayMemory::new (:coerce (Array java/lang/Object) inputs))
+ ## (lux_structure (:coerce (Array java/lang/Object) inputs))
## )
- ## (host.array-write 1 ## (php/runtime/memory/ArrayMemory::new (:coerce (Array java/lang/Object) lux))
- ## (lux-structure (:coerce (Array java/lang/Object) lux))
+ ## (host.array_write 1 ## (php/runtime/memory/ArrayMemory::new (:coerce (Array java/lang/Object) lux))
+ ## (lux_structure (:coerce (Array java/lang/Object) lux))
## ))
## (php/runtime/env/Environment::current)
## (php/runtime/env/TraceInfo::new "" +0 +0))
- #let [_ (log! (format "{call-macro 1} " (debug.inspect output)))
- _ (log! (format "{call-macro 2} " (exception.construct ..unknown-kind-of-object (:coerce java/lang/Object output))))]]
+ #let [_ (debug.log! (format "{call_macro 1} " (debug.inspect output)))
+ _ (debug.log! (format "{call_macro 2} " (exception.construct ..unknown_kind_of_object (:coerce java/lang/Object output))))]]
(..read (:coerce java/lang/Object output)))))
(def: (expander macro inputs lux)
Expander
- (case (ensure-macro macro)
+ (case (ensure_macro macro)
(#.Some macro)
- (call-macro inputs lux macro)
+ (call_macro inputs lux macro)
#.None
- (exception.throw cannot-apply-a-non-function (:coerce java/lang/Object macro)))
- )
+ (exception.throw ..cannot_apply_a_non_function (:coerce java/lang/Object macro))))
(def: separator "___")
-(type: Host
- (generation.Host (_.Expression Any) _.Statement))
-
(def: host
- (IO Host)
+ (IO (Host _.Expression _.Statement))
(io (let [interpreter (org/develnext/jphp/scripting/JPHPScriptEngine::new)
- run! (: (-> Text (_.Code Any) (Error Any))
- (function (_ dummy-name code)
- (do error.monad
+ run! (: (-> (_.Code Any) (Try Any))
+ (function (_ code)
+ (do try.monad
[output (javax/script/ScriptEngine::eval (format "<?php " (_.code code)) interpreter)]
(..read output))))]
- (: Host
+ (: (Host _.Expression _.Statement)
(structure
- (def: (evaluate! dummy-name code)
- (run! dummy-name (_.return code)))
+ (def: (evaluate! context code)
+ (run! (_.return code)))
(def: execute! run!)
- (def: (define! [module name] input)
- (let [global (format (text.replace-all .module-separator ..separator module)
- ..separator (name.normalize name)
- "___" (%n (text@hash name)))
+ (def: (define! context input)
+ (let [global (reference.artifact context)
@global (_.global global)]
- (do error.monad
+ (do try.monad
[#let [definition (_.; (_.set @global input))]
- _ (run! global definition)
- value (run! global (_.return @global))]
- (wrap [global value definition])))))))))
+ _ (run! definition)
+ value (run! (_.return @global))]
+ (wrap [global value definition]))))
+
+ (def: (ingest context content)
+ (|> content (\ encoding.utf8 decode) try.assume (:coerce _.Statement)))
+
+ (def: (re_learn context content)
+ (run! content))
+
+ (def: (re_load context content)
+ (do try.monad
+ [_ (run! content)]
+ (run! (_.return (_.var (reference.artifact context)))))))))))
(def: platform
- (IO (Platform IO _.Var (_.Expression Any) _.Statement))
+ (IO (Platform _.Var _.Expression _.Statement))
(do io.monad
[host ..host]
- (wrap {#platform.&monad io.monad
- #platform.&file-system file.system
+ (wrap {#platform.&file_system (file.async file.default)
#platform.host host
#platform.phase php.generate
- #platform.runtime runtime.generate})))
+ #platform.runtime runtime.generate
+ #platform.write (|>> _.code (\ encoding.utf8 encode))})))
-(def: (program program)
- (-> (_.Expression Any) _.Statement)
- (_.; (_.apply/2 [(runtime.lux//program-args _.command-line-arguments)
+(def: (program context program)
+ (Program _.Expression _.Statement)
+ (_.; (_.apply/2 [(runtime.lux//program_args _.command_line_arguments)
_.null]
program)))
-(program: [{service /cli.service}]
- (/.compiler ..expander
- ..platform
- extension.bundle
- ..program
- service))
+(for {@.old
+ (def: extender
+ Extender
+ ## TODO: Stop relying on coercions ASAP.
+ (<| (:coerce Extender)
+ (function (@self handler))
+ (:coerce Handler)
+ (function (@self name phase))
+ (:coerce Phase)
+ (function (@self archive parameters))
+ (:coerce Operation)
+ (function (@self state))
+ (:coerce Try)
+ try.assume
+ (:coerce Try)
+ (do try.monad
+ [handler (try.from_maybe (..ensure_macro handler))
+ #let [to_php (: (-> Any php/runtime/Memory)
+ (|>> (:coerce (Array java/lang/Object)) lux_structure (:coerce php/runtime/Memory)))]
+ output (php/runtime/lang/Closure::call (php/runtime/env/Environment::current)
+ (|> (host.array php/runtime/Memory 6)
+ (host.array_write 0 handler)
+ (host.array_write 1 (php/runtime/memory/StringMemory::new name))
+ (host.array_write 2 (to_php phase))
+ (host.array_write 3 (to_php archive))
+ (host.array_write 4 (to_php parameters))
+ (host.array_write 5 (to_php state)))
+ (:coerce php/runtime/lang/Closure
+ (php/runtime/memory/ObjectMemory::value handler)))]
+ (..read output))))
+
+ @.php
+ (def: (extender handler)
+ Extender
+ (:assume handler))})
+
+(def: (declare_success! _)
+ (-> Any (Promise Any))
+ (promise.future (\ world/program.default exit +0)))
+
+(def: (scope body)
+ (-> _.Statement _.Statement)
+ (let [@program (_.constant "lux_program")]
+ ($_ _.then
+ (_.define_function @program (list) body)
+ (_.; (_.apply/* (list) @program))
+ )))
+
+## (program: [{service /cli.service}]
+## (/.compiler ..expander
+## ..platform
+## extension.bundle
+## ..program
+## service))
+
+(`` (program: [{service /cli.service}]
+ (let [extension ".php"]
+ (do io.monad
+ [platform ..platform]
+ (exec (do promise.monad
+ [_ (/.compiler {#/static.host @.php
+ #/static.host_module_extension extension
+ #/static.target (/cli.target service)
+ #/static.artifact_extension extension}
+ ..expander
+ analysis.bundle
+ (io.io platform)
+ generation.bundle
+ extension/bundle.empty
+ ..program
+ [_.Var _.Expression _.Statement]
+ ..extender
+ service
+ [(packager.package (_.manual "")
+ _.code
+ _.then
+ ..scope)
+ (format (/cli.target service)
+ (\ file.default separator)
+ "program"
+ extension)])]
+ (..declare_success! []))
+ (io.io []))))))