diff options
author | Eduardo Julian | 2019-06-19 22:37:28 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-06-19 22:37:28 -0400 |
commit | 252e17e22d3e61e08c01e14ca5365d8195cc51b4 (patch) | |
tree | d9284c9cf80b3feedfb2bce0da9caf5e7ac162d6 /stdlib/source/lux/target | |
parent | 932a1d5941bb80a41cbb11944d67d7366351c89a (diff) |
Various fixes.
Diffstat (limited to 'stdlib/source/lux/target')
-rw-r--r-- | stdlib/source/lux/target/jvm/class.lux | 2 | ||||
-rw-r--r-- | stdlib/source/lux/target/jvm/constant.lux | 61 | ||||
-rw-r--r-- | stdlib/source/lux/target/jvm/descriptor.lux | 41 |
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)) |