aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/target
diff options
context:
space:
mode:
authorEduardo Julian2019-06-19 22:37:28 -0400
committerEduardo Julian2019-06-19 22:37:28 -0400
commit252e17e22d3e61e08c01e14ca5365d8195cc51b4 (patch)
treed9284c9cf80b3feedfb2bce0da9caf5e7ac162d6 /stdlib/source/lux/target
parent932a1d5941bb80a41cbb11944d67d7366351c89a (diff)
Various fixes.
Diffstat (limited to 'stdlib/source/lux/target')
-rw-r--r--stdlib/source/lux/target/jvm/class.lux2
-rw-r--r--stdlib/source/lux/target/jvm/constant.lux61
-rw-r--r--stdlib/source/lux/target/jvm/descriptor.lux41
3 files changed, 62 insertions, 42 deletions
diff --git a/stdlib/source/lux/target/jvm/class.lux b/stdlib/source/lux/target/jvm/class.lux
index 6fb6f48d4..15b2f5392 100644
--- a/stdlib/source/lux/target/jvm/class.lux
+++ b/stdlib/source/lux/target/jvm/class.lux
@@ -86,7 +86,7 @@
(wrap [@this @super @interfaces])))
(def: #export (class version modifier
- super this interfaces
+ this super interfaces
fields methods attributes)
(-> Major Modifier
Internal Internal (List Internal)
diff --git a/stdlib/source/lux/target/jvm/constant.lux b/stdlib/source/lux/target/jvm/constant.lux
index 3af24af55..aae32e757 100644
--- a/stdlib/source/lux/target/jvm/constant.lux
+++ b/stdlib/source/lux/target/jvm/constant.lux
@@ -134,26 +134,47 @@
(def: #export equivalence
(Equivalence Constant)
- ($_ equivalence.sum
- ## #UTF8
- text.equivalence
- ## #Long
- (..value-equivalence int.equivalence)
- ## #Double
- (..value-equivalence frac.equivalence)
- ## #Class
- ..class-equivalence
- ## #String
- (..value-equivalence //index.equivalence)
- ## #Field
- ..reference-equivalence
- ## #Method
- ..reference-equivalence
- ## #Interface-Method
- ..reference-equivalence
- ## #Name-And-Type
- ..name-and-type-equivalence
- ))
+ ## TODO: Delete the explicit "structure" and use the combinator
+ ## version below as soon as the new format for variants is implemented.
+ (structure
+ (def: (= reference sample)
+ (case [reference sample]
+ (^template [<tag> <equivalence>]
+ [(<tag> reference) (<tag> sample)]
+ (:: <equivalence> = reference sample))
+ ([#UTF8 text.equivalence]
+ [#Long (..value-equivalence int.equivalence)]
+ [#Double (..value-equivalence frac.equivalence)]
+ [#Class ..class-equivalence]
+ [#String (..value-equivalence //index.equivalence)]
+ [#Field ..reference-equivalence]
+ [#Method ..reference-equivalence]
+ [#Interface-Method ..reference-equivalence]
+ [#Name-And-Type ..name-and-type-equivalence])
+
+ _
+ false)))
+ ## ($_ equivalence.sum
+ ## ## #UTF8
+ ## text.equivalence
+ ## ## #Long
+ ## (..value-equivalence int.equivalence)
+ ## ## #Double
+ ## (..value-equivalence frac.equivalence)
+ ## ## #Class
+ ## ..class-equivalence
+ ## ## #String
+ ## (..value-equivalence //index.equivalence)
+ ## ## #Field
+ ## ..reference-equivalence
+ ## ## #Method
+ ## ..reference-equivalence
+ ## ## #Interface-Method
+ ## ..reference-equivalence
+ ## ## #Name-And-Type
+ ## ..name-and-type-equivalence
+ ## )
+ )
(def: #export format
(Format Constant)
diff --git a/stdlib/source/lux/target/jvm/descriptor.lux b/stdlib/source/lux/target/jvm/descriptor.lux
index d350cec65..c98a4b853 100644
--- a/stdlib/source/lux/target/jvm/descriptor.lux
+++ b/stdlib/source/lux/target/jvm/descriptor.lux
@@ -5,14 +5,13 @@
format]
[collection
["." list ("#;." functor)]]]
+ [macro
+ ["." template]]
[type
abstract]]
["." // #_
["#." name (#+ Internal)]])
-(abstract: #export Base' {} Any)
-(abstract: #export Object' {} Any)
-(abstract: #export Array' {} Any)
(abstract: #export Void' {} Any)
(abstract: #export (Value' kind) {} Any)
@@ -28,31 +27,31 @@
(type: #export (Value kind) (Return (Value' kind)))
(type: #export Void (Return Void'))
- (template [<refined> <raw>]
- [(type: #export <refined> (Value <raw>))]
+ (template [<refined>]
+ [(with-expansions [<raw> (template.identifier [<refined> "'"])]
+ (abstract: #export <raw> {} Any)
+ (type: #export <refined> (Value <raw>)))]
- [Base Base']
- [Object Object']
- [Array Array'])
+ [Primitive]
+ [Object]
+ [Array]
+ )
(template [<sigil> <name> <kind>]
[(def: #export <name>
(Descriptor <kind>)
(:abstraction <sigil>))]
- ["Z" boolean Base]
-
- ["B" byte Base]
- ["S" short Base]
- ["I" int Base]
- ["J" long Base]
-
- ["C" char Base]
-
- ["F" float Base]
- ["D" double Base]
-
- ["V" void Void])
+ ["Z" boolean Primitive]
+ ["B" byte Primitive]
+ ["S" short Primitive]
+ ["I" int Primitive]
+ ["J" long Primitive]
+ ["F" float Primitive]
+ ["D" double Primitive]
+ ["C" char Primitive]
+ ["V" void Void]
+ )
(def: #export object
(-> Internal (Descriptor Object))