aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool/compiler/phase
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/tool/compiler/phase')
-rw-r--r--stdlib/source/lux/tool/compiler/phase/extension/analysis/jvm.lux15
-rw-r--r--stdlib/source/lux/tool/compiler/phase/generation.lux16
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)