aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/target/jvm/constant/tag.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/target/jvm/constant/tag.lux')
-rw-r--r--stdlib/source/library/lux/target/jvm/constant/tag.lux50
1 files changed, 50 insertions, 0 deletions
diff --git a/stdlib/source/library/lux/target/jvm/constant/tag.lux b/stdlib/source/library/lux/target/jvm/constant/tag.lux
new file mode 100644
index 000000000..414de077b
--- /dev/null
+++ b/stdlib/source/library/lux/target/jvm/constant/tag.lux
@@ -0,0 +1,50 @@
+(.module:
+ [library
+ [lux #*
+ [abstract
+ [equivalence (#+ Equivalence)]]
+ [control
+ ["." try]]
+ [data
+ [format
+ [binary (#+ Writer)]]]
+ [type
+ abstract]]]
+ ["." /// #_
+ [encoding
+ ["#." unsigned (#+ U1) ("u1//." equivalence)]]])
+
+(abstract: #export Tag
+ U1
+
+ (implementation: #export equivalence
+ (Equivalence Tag)
+ (def: (= reference sample)
+ (u1//= (:representation reference)
+ (:representation sample))))
+
+ (template [<code> <name>]
+ [(def: #export <name>
+ Tag
+ (|> <code> ///unsigned.u1 try.assume :abstraction))]
+
+ [01 utf8]
+ [03 integer]
+ [04 float]
+ [05 long]
+ [06 double]
+ [07 class]
+ [08 string]
+ [09 field]
+ [10 method]
+ [11 interface_method]
+ [12 name_and_type]
+ [15 method_handle]
+ [16 method_type]
+ [18 invoke_dynamic]
+ )
+
+ (def: #export writer
+ (Writer Tag)
+ (|>> :representation ///unsigned.writer/1))
+ )