diff options
Diffstat (limited to 'new-luxc/source/luxc')
6 files changed, 37 insertions, 38 deletions
diff --git a/new-luxc/source/luxc/lang/translation/jvm.lux b/new-luxc/source/luxc/lang/translation/jvm.lux index 390b1497d..569da0bd9 100644 --- a/new-luxc/source/luxc/lang/translation/jvm.lux +++ b/new-luxc/source/luxc/lang/translation/jvm.lux @@ -25,6 +25,9 @@ ["." descriptor]]]] [tool [compiler + [language + [lux + ["." generation]]] [meta [archive [descriptor (#+ Module)] @@ -98,14 +101,9 @@ ## It should be cleaned up ASAP. (def: prefix "lux.") -(def: #export class-name' - (-> Text Text) - (|>> (text.replace-all .module-separator ..class-path-separator) - (format ..prefix))) - -(def: #export (class-name module id) - (-> Module artifact.ID Text) - (format (..class-name' module) ..class-path-separator (%.nat id))) +(def: #export (class-name [module-id artifact-id]) + (-> generation.Context Text) + (format ..prefix (%.nat module-id) ..class-path-separator (%.nat artifact-id))) (def: (evaluate! library loader eval-class valueI) (-> Library ClassLoader Text Inst (Try [Any Definition])) @@ -142,9 +140,9 @@ (loader.store class-name class-bytecode library))] (loader.load class-name loader)))) -(def: (define! library loader module id valueI) - (-> Library ClassLoader Module artifact.ID Inst (Try [Text Any Definition])) - (let [class-name (..class-name module id)] +(def: (define! library loader context valueI) + (-> Library ClassLoader generation.Context Inst (Try [Text Any Definition])) + (let [class-name (..class-name context)] (do try.monad [[value definition] (evaluate! library loader class-name valueI)] (wrap [class-name value definition])))) diff --git a/new-luxc/source/luxc/lang/translation/jvm/expression.lux b/new-luxc/source/luxc/lang/translation/jvm/expression.lux index 441758fec..144e35f9b 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/expression.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/expression.lux @@ -42,7 +42,7 @@ (structure.tuple translate archive members) (^ (synthesis.variable variable)) - (reference.variable variable) + (reference.variable archive variable) (^ (synthesis.constant constant)) (reference.constant archive constant) diff --git a/new-luxc/source/luxc/lang/translation/jvm/extension/host.lux b/new-luxc/source/luxc/lang/translation/jvm/extension/host.lux index cf039db68..408b2a389 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/extension/host.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/extension/host.lux @@ -908,10 +908,10 @@ store-capturedI _.RETURN)))) -(def: (anonymous-instance class env) - (-> (Type Class) Environment (Operation Inst)) +(def: (anonymous-instance archive class env) + (-> Archive (Type Class) Environment (Operation Inst)) (do phase.monad - [captureI+ (monad.map @ ///reference.variable env)] + [captureI+ (monad.map @ (///reference.variable archive) env)] (wrap (|>> (_.NEW class) _.DUP (_.fuse captureI+) diff --git a/new-luxc/source/luxc/lang/translation/jvm/function.lux b/new-luxc/source/luxc/lang/translation/jvm/function.lux index 449855aca..fa91b41df 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/function.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/function.lux @@ -6,6 +6,9 @@ [pipe (#+ when> new>)] ["." function]] [data + ["." product] + [text + ["%" format (#+ format)]] [number ["n" nat] ["i" int]] @@ -24,7 +27,9 @@ [lux [analysis (#+ Environment)] [synthesis (#+ Synthesis Abstraction Apply)] - ["." generation]]]]]] + ["." generation]]] + [meta + [archive (#+ Archive)]]]]] [luxc [lang [host @@ -96,10 +101,10 @@ (list.repeat amount) _.fuse)) -(def: (instance class arity env) - (-> (Type Class) Arity Environment (Operation Inst)) +(def: (instance archive class arity env) + (-> Archive (Type Class) Arity Environment (Operation Inst)) (do phase.monad - [captureI+ (monad.map @ reference.variable env) + [captureI+ (monad.map @ (reference.variable archive) env) #let [argsI (if (poly-arg? arity) (|> (nullsI (dec arity)) (list (_.int +0)) @@ -266,8 +271,8 @@ def.fuse) function.identity)) -(def: #export (with-function @begin class env arity bodyI) - (-> Label Text Environment Arity Inst +(def: #export (with-function archive @begin class env arity bodyI) + (-> Archive Label Text Environment Arity Inst (Operation [Def Inst])) (let [classD (type.class class (list)) applyD (: Def @@ -290,19 +295,19 @@ applyD ))] (do phase.monad - [instanceI (instance classD arity env)] + [instanceI (instance archive classD arity env)] (wrap [functionD instanceI])))) (def: #export (function generate archive [env arity bodyS]) (Generator Abstraction) (do phase.monad [@begin _.make-label - [function-context bodyI] (generation.with-new-context + [function-context bodyI] (generation.with-new-context archive (generation.with-anchor [@begin 1] (generate archive bodyS))) - #let [function-class (//runtime.class-name function-context)] - [functionD instanceI] (with-function @begin function-class env arity bodyI) - _ (generation.save! true ["" function-class] + #let [function-class (//.class-name function-context)] + [functionD instanceI] (with-function archive @begin function-class env arity bodyI) + _ (generation.save! true ["" (%.nat (product.right function-context))] [function-class (def.class #$.V1_6 #$.Public $.finalC function-class (list) diff --git a/new-luxc/source/luxc/lang/translation/jvm/reference.lux b/new-luxc/source/luxc/lang/translation/jvm/reference.lux index ff5d7a96c..4eafecec0 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/reference.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/reference.lux @@ -34,11 +34,11 @@ [partial-name "p"] ) -(def: (foreign variable) - (-> Register (Operation Inst)) +(def: (foreign archive variable) + (-> Archive Register (Operation Inst)) (do phase.monad - [class-name (:: @ map //runtime.class-name - generation.context)] + [class-name (:: @ map //.class-name + (generation.context archive))] (wrap (|>> (_.ALOAD 0) (_.GETFIELD (type.class class-name (list)) (|> variable .nat foreign-name) @@ -48,18 +48,18 @@ (-> Register Inst) (|>> _.ALOAD)) -(def: #export (variable variable) - (-> Variable (Operation Inst)) +(def: #export (variable archive variable) + (-> Archive Variable (Operation Inst)) (case variable (#reference.Local variable) (operation@wrap (local variable)) (#reference.Foreign variable) - (foreign variable))) + (foreign archive variable))) (def: #export (constant archive name) (-> Archive Name (Operation Inst)) (do phase.monad - [class-name (:: @ map //runtime.class-name + [class-name (:: @ map //.class-name (generation.remember archive name))] (wrap (_.GETSTATIC (type.class class-name (list)) //.value-field //.$Value)))) diff --git a/new-luxc/source/luxc/lang/translation/jvm/runtime.lux b/new-luxc/source/luxc/lang/translation/jvm/runtime.lux index 7d6c5427e..55c0aaab1 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/runtime.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/runtime.lux @@ -29,10 +29,6 @@ ["_" inst]]]]] ["." // (#+ ByteCode)]) -(def: #export (class-name [module id]) - (-> generation.Context Text) - (//.class-name module id)) - (def: $Text (type.class "java.lang.String" (list))) (def: #export $Tag type.int) (def: #export $Flag (type.class "java.lang.Object" (list))) |