diff options
Diffstat (limited to 'stdlib/source/lux/tool/compiler/phase')
-rw-r--r-- | stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux | 15 | ||||
-rw-r--r-- | stdlib/source/lux/tool/compiler/phase/generation.lux | 16 |
2 files changed, 27 insertions, 4 deletions
diff --git a/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux b/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux index 63f0561c0..98cf8baf8 100644 --- a/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux +++ b/stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux @@ -50,7 +50,10 @@ ["/#" // #_ [reference (#+)] ["#." analysis (#+ Analysis Operation Phase Handler Bundle)] - ["#." synthesis]]]]]) + ["#." synthesis] + [meta + [archive + [descriptor (#+ Module)]]]]]]]) (def: reflection (|>> jvm.reflection reflection.reflection)) (def: signature (|>> jvm.signature signature.signature)) @@ -1890,6 +1893,12 @@ mapping)) jvm-alias.fresh))))) +(def: (anonymous-class-name module id) + (-> Module Nat Text) + (let [global (text.replace-all .module-separator ..jvm-package-separator module) + local (format "anonymous-class" (%.nat id))] + (format global ..jvm-package-separator local))) + (def: class::anonymous Handler (..custom @@ -1916,9 +1925,7 @@ name (///.lift (do macro.monad [where macro.current-module-name id macro.count] - (wrap (format (text.replace-all .module-separator ..jvm-package-separator where) - ..jvm-package-separator - "anonymous-class" (%.nat id))))) + (wrap (..anonymous-class-name where id)))) super-classT (typeA.with-env (luxT.check (luxT.class mapping) (..signature super-class))) super-interfaceT+ (typeA.with-env diff --git a/stdlib/source/lux/tool/compiler/phase/generation.lux b/stdlib/source/lux/tool/compiler/phase/generation.lux index 198ca4bb4..2f6e28ed2 100644 --- a/stdlib/source/lux/tool/compiler/phase/generation.lux +++ b/stdlib/source/lux/tool/compiler/phase/generation.lux @@ -103,6 +103,22 @@ #counter 0 #name-cache (dictionary.new name.hash)}) +(def: #export (with-specific-context specific-scope expr) + (All [anchor expression directive output] + (-> Text + (Operation anchor expression directive output) + (Operation anchor expression directive output))) + (function (_ [bundle state]) + (let [old (get@ #context state)] + (case (expr [bundle (set@ #context [specific-scope 0] state)]) + (#try.Success [[bundle' state'] + output]) + (#try.Success [[bundle' (set@ #context old state')] + output]) + + (#try.Failure error) + (#try.Failure error))))) + (def: #export (with-context expr) (All [anchor expression directive output] (-> (Operation anchor expression directive output) |