diff options
author | Eduardo Julian | 2019-04-27 23:41:47 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-04-27 23:41:47 -0400 |
commit | af7f85c4eb724f2888ecce9c8b52d6d3bb1cd807 (patch) | |
tree | 9d2b80257b5c82ebcc9f17bd32e9771ea51cc708 /new-luxc/source/luxc/lang/translation/jvm | |
parent | aa7f1d12ae98da9726bf8bbdd3c494a671e3f94b (diff) |
Moved JVM type machinery to stdlib.
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/jvm')
8 files changed, 157 insertions, 144 deletions
diff --git a/new-luxc/source/luxc/lang/translation/jvm/case.lux b/new-luxc/source/luxc/lang/translation/jvm/case.lux index 43d11c71e..3c50f6124 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/case.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/case.lux @@ -8,15 +8,17 @@ [data [text format]] + [target + [jvm + ["$t" type]]] [tool [compiler ["." synthesis (#+ Path Synthesis)] - ["." phase ("operation/." monad)]]]] + ["." phase ("operation@." monad)]]]] [luxc [lang [host ["$" jvm (#+ Label Inst Operation Phase) - ["$t" type] ["_" inst]]]]] ["." // (#+ $Object) ["." runtime]]) @@ -63,34 +65,34 @@ (-> Phase Nat Label Label Path (Operation Inst)) (.case path #synthesis.Pop - (operation/wrap popI) + (operation@wrap popI) (#synthesis.Bind register) - (operation/wrap (|>> peekI + (operation@wrap (|>> peekI (_.ASTORE register))) (^ (synthesis.path/bit value)) - (operation/wrap (.let [jumpI (.if value _.IFEQ _.IFNE)] + (operation@wrap (.let [jumpI (.if value _.IFEQ _.IFNE)] (|>> peekI - (_.unwrap #$.Boolean) + (_.unwrap #$t.Boolean) (jumpI @else)))) (^ (synthesis.path/i64 value)) - (operation/wrap (|>> peekI - (_.unwrap #$.Long) + (operation@wrap (|>> peekI + (_.unwrap #$t.Long) (_.long (.int value)) _.LCMP (_.IFNE @else))) (^ (synthesis.path/f64 value)) - (operation/wrap (|>> peekI - (_.unwrap #$.Double) + (operation@wrap (|>> peekI + (_.unwrap #$t.Double) (_.double value) _.DCMPL (_.IFNE @else))) (^ (synthesis.path/text value)) - (operation/wrap (|>> peekI + (operation@wrap (|>> peekI (_.string value) (_.INVOKEVIRTUAL "java.lang.Object" "equals" @@ -110,7 +112,7 @@ (^template [<pattern> <flag> <prepare>] (^ (<pattern> idx)) - (operation/wrap (<| _.with-label (function (_ @success)) + (operation@wrap (<| _.with-label (function (_ @success)) _.with-label (function (_ @fail)) (|>> peekI (_.CHECKCAST ($t.descriptor runtime.$Variant)) @@ -133,7 +135,7 @@ [synthesis.side/right (_.string "") .inc]) (^ (synthesis.member/left lefts)) - (operation/wrap (.let [accessI (.case lefts + (operation@wrap (.let [accessI (.case lefts 0 _.AALOAD @@ -151,7 +153,7 @@ pushI))) (^ (synthesis.member/right lefts)) - (operation/wrap (|>> peekI + (operation@wrap (|>> peekI (_.CHECKCAST ($t.descriptor runtime.$Tuple)) (_.int (.int lefts)) (_.INVOKESTATIC //.runtime-class @@ -205,7 +207,7 @@ (wrap (<| _.with-label (function (_ @else)) _.with-label (function (_ @end)) (|>> testI - (_.unwrap #$.Boolean) + (_.unwrap #$t.Boolean) (_.IFEQ @else) thenI (_.GOTO @end) diff --git a/new-luxc/source/luxc/lang/translation/jvm/function.lux b/new-luxc/source/luxc/lang/translation/jvm/function.lux index 0fea18acd..ae876c3fc 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/function.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/function.lux @@ -1,5 +1,5 @@ (.module: - [lux (#- function) + [lux (#- Type function) [abstract ["." monad (#+ do)]] [control @@ -10,6 +10,9 @@ format] [collection ["." list ("#/." functor monoid)]]] + [target + [jvm + ["." type (#+ Type Method)]]] [tool [compiler [analysis (#+ Arity)] @@ -21,7 +24,6 @@ [lang [host ["$" jvm (#+ Label Inst Def Operation Phase) - ["." type] ["." def] ["_" inst]]]]] ["." // @@ -30,22 +32,22 @@ (def: arity-field Text "arity") -(def: $Object $.Type (type.class "java.lang.Object" (list))) +(def: $Object Type (type.class "java.lang.Object" (list))) (def: (poly-arg? arity) (-> Arity Bit) (n/> 1 arity)) (def: (reset-method class) - (-> Text $.Method) + (-> Text Method) (type.method (list) (#.Some (type.class class (list))) (list))) (def: (captured-args env) - (-> (List Variable) (List $.Type)) + (-> (List Variable) (List Type)) (list.repeat (list.size env) $Object)) (def: (init-method env arity) - (-> (List Variable) Arity $.Method) + (-> (List Variable) Arity Method) (if (poly-arg? arity) (type.method (list.concat (list (captured-args env) (list type.int) @@ -158,7 +160,7 @@ _.ARETURN))) (def: function-init-method - $.Method + Method (type.method (list type.int) #.None (list))) (def: (function-init arity env-size) diff --git a/new-luxc/source/luxc/lang/translation/jvm/primitive.lux b/new-luxc/source/luxc/lang/translation/jvm/primitive.lux index f9d9034ea..b97e50419 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/primitive.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/primitive.lux @@ -5,19 +5,21 @@ [data [text format]] + [target + [jvm + ["$t" type]]] [tool [compiler - [phase ("operation/." monad)]]]] + [phase ("operation@." monad)]]]] [luxc [lang [host ["." jvm (#+ Inst Operation) - ["_" inst] - ["$t" type]]]]]) + ["_" inst]]]]]) (def: #export (bit value) (-> Bit (Operation Inst)) - (operation/wrap (_.GETSTATIC "java.lang.Boolean" + (operation@wrap (_.GETSTATIC "java.lang.Boolean" (if value "TRUE" "FALSE") ($t.class "java.lang.Boolean" (list))))) @@ -25,9 +27,9 @@ [(def: #export (<name> value) (-> <type> (Operation Inst)) (let [loadI (|> value <load>)] - (operation/wrap (|>> loadI <wrap>))))] + (operation@wrap (|>> loadI <wrap>))))] - [i64 (I64 Any) (<| _.long .int) (_.wrap #jvm.Long)] - [f64 Frac _.double (_.wrap #jvm.Double)] + [i64 (I64 Any) (<| _.long .int) (_.wrap #$t.Long)] + [f64 Frac _.double (_.wrap #$t.Double)] [text Text _.string (<|)] ) diff --git a/new-luxc/source/luxc/lang/translation/jvm/procedure/common.lux b/new-luxc/source/luxc/lang/translation/jvm/procedure/common.lux index aeaa1d664..cead0848e 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/procedure/common.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/procedure/common.lux @@ -1,5 +1,5 @@ (.module: - [lux #* + [lux (#- Type) [abstract ["." monad (#+ do)]] [control @@ -10,6 +10,9 @@ format] [collection ["." dictionary]]] + [target + [jvm + ["_t" type (#+ Type Method)]]] [tool [compiler ["." synthesis (#+ Synthesis)] @@ -23,8 +26,7 @@ [luxc [lang [host - ["$" jvm (#+ Label Inst Method Bundle) - ["_t" type] + ["$" jvm (#+ Label Inst Bundle) ["_" inst]]]]] ["." /// ["." runtime]]) @@ -33,12 +35,12 @@ (#static MIN_VALUE Double) (#static MAX_VALUE Double)) -(def: $Object-Array $.Type (_t.array 1 ///.$Object)) -(def: $String $.Type (_t.class "java.lang.String" (list))) -(def: $CharSequence $.Type (_t.class "java.lang.CharSequence" (list))) +(def: $Object-Array Type (_t.array 1 ///.$Object)) +(def: $String Type (_t.class "java.lang.String" (list))) +(def: $CharSequence Type (_t.class "java.lang.CharSequence" (list))) -(def: lux-intI Inst (|>> _.I2L (_.wrap #$.Long))) -(def: jvm-intI Inst (|>> (_.unwrap #$.Long) _.L2I)) +(def: lux-intI Inst (|>> _.I2L (_.wrap #_t.Long))) +(def: jvm-intI Inst (|>> (_.unwrap #_t.Long) _.L2I)) (def: check-stringI Inst (_.CHECKCAST "java.lang.String")) (def: (predicateI tester) @@ -73,9 +75,9 @@ (template [<name> <op>] [(def: (<name> [maskI inputI]) (Binary Inst) - (|>> inputI (_.unwrap #$.Long) - maskI (_.unwrap #$.Long) - <op> (_.wrap #$.Long)))] + (|>> inputI (_.unwrap #_t.Long) + maskI (_.unwrap #_t.Long) + <op> (_.wrap #_t.Long)))] [bit::and _.LAND] [bit::or _.LOR] @@ -85,10 +87,10 @@ (template [<name> <op>] [(def: (<name> [shiftI inputI]) (Binary Inst) - (|>> inputI (_.unwrap #$.Long) + (|>> inputI (_.unwrap #_t.Long) shiftI jvm-intI <op> - (_.wrap #$.Long)))] + (_.wrap #_t.Long)))] [bit::left-shift _.LSHL] [bit::arithmetic-right-shift _.LSHR] @@ -100,9 +102,9 @@ (Nullary Inst) (|>> <const> (_.wrap <type>)))] - [frac::smallest (_.double (Double::MIN_VALUE)) #$.Double] - [frac::min (_.double (f/* -1.0 (Double::MAX_VALUE))) #$.Double] - [frac::max (_.double (Double::MAX_VALUE)) #$.Double] + [frac::smallest (_.double (Double::MIN_VALUE)) #_t.Double] + [frac::min (_.double (f/* -1.0 (Double::MAX_VALUE))) #_t.Double] + [frac::max (_.double (Double::MAX_VALUE)) #_t.Double] ) (template [<name> <type> <op>] @@ -113,17 +115,17 @@ <op> (_.wrap <type>)))] - [i64::+ #$.Long _.LADD] - [i64::- #$.Long _.LSUB] - [int::* #$.Long _.LMUL] - [int::/ #$.Long _.LDIV] - [int::% #$.Long _.LREM] + [i64::+ #_t.Long _.LADD] + [i64::- #_t.Long _.LSUB] + [int::* #_t.Long _.LMUL] + [int::/ #_t.Long _.LDIV] + [int::% #_t.Long _.LREM] - [frac::+ #$.Double _.DADD] - [frac::- #$.Double _.DSUB] - [frac::* #$.Double _.DMUL] - [frac::/ #$.Double _.DDIV] - [frac::% #$.Double _.DREM] + [frac::+ #_t.Double _.DADD] + [frac::- #_t.Double _.DSUB] + [frac::* #_t.Double _.DMUL] + [frac::/ #_t.Double _.DDIV] + [frac::% #_t.Double _.DREM] ) (template [<eq> <lt> <unwrap> <cmp>] @@ -139,8 +141,8 @@ [<eq> +0] [<lt> -1])] - [i64::= int::< (_.unwrap #$.Long) _.LCMP] - [frac::= frac::< (_.unwrap #$.Double) _.DCMPG] + [i64::= int::< (_.unwrap #_t.Long) _.LCMP] + [frac::= frac::< (_.unwrap #_t.Double) _.DCMPG] ) (template [<name> <prepare> <transform>] @@ -148,12 +150,12 @@ (Unary Inst) (|>> inputI <prepare> <transform>))] - [int::frac (_.unwrap #$.Long) (<| (_.wrap #$.Double) _.L2D)] - [int::char (_.unwrap #$.Long) + [int::frac (_.unwrap #_t.Long) (<| (_.wrap #_t.Double) _.L2D)] + [int::char (_.unwrap #_t.Long) ((|>> _.L2I _.I2C (_.INVOKESTATIC "java.lang.Character" "toString" (_t.method (list _t.char) (#.Some $String) (list)) #0)))] - [frac::int (_.unwrap #$.Double) (<| (_.wrap #$.Long) _.D2L)] - [frac::encode (_.unwrap #$.Double) + [frac::int (_.unwrap #_t.Double) (<| (_.wrap #_t.Long) _.D2L)] + [frac::encode (_.unwrap #_t.Double) (_.INVOKESTATIC "java.lang.Double" "toString" (_t.method (list _t.double) (#.Some $String) (list)) #0)] [frac::decode ..check-stringI (_.INVOKESTATIC ///.runtime-class "decode_frac" (_t.method (list $String) (#.Some $Object-Array) (list)) #0)] @@ -175,7 +177,7 @@ [text::= (<|) (<|) (_.INVOKEVIRTUAL "java.lang.Object" "equals" (_t.method (list ///.$Object) (#.Some _t.boolean) (list)) #0) - (_.wrap #$.Boolean)] + (_.wrap #_t.Boolean)] [text::< ..check-stringI ..check-stringI (_.INVOKEVIRTUAL "java.lang.String" "compareTo" (_t.method (list $String) (#.Some _t.int) (list)) #0) (predicateI _.IFLT)] @@ -244,7 +246,7 @@ (def: (io::current-time _) (Nullary Inst) (|>> (_.INVOKESTATIC "java.lang.System" "currentTimeMillis" (_t.method (list) (#.Some _t.long) (list)) #0) - (_.wrap #$.Long))) + (_.wrap #_t.Long))) (def: bundle::lux Bundle diff --git a/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux b/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux index c4bc66923..7d9cd9cc5 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/procedure/host.lux @@ -1,5 +1,5 @@ (.module: - [lux (#- int char) + [lux (#- Type int char) [abstract ["." monad (#+ do)]] [control @@ -14,6 +14,9 @@ [collection ["." list ("#@." functor)] ["." dictionary (#+ Dictionary)]]] + [target + [jvm + ["_t" type (#+ Primitive Type Method)]]] [tool [compiler ["." synthesis (#+ Synthesis %synthesis)] @@ -27,8 +30,7 @@ [luxc [lang [host - ["$" jvm (#+ Primitive Label Inst Method Handler Bundle Operation) - ["_t" type] + ["$" jvm (#+ Label Inst Handler Bundle Operation) ["_" inst]]]]]) (template [<name>] @@ -57,30 +59,30 @@ (|>> inputI <conversion>)))] - [conversion::double-to-float #$.Double _.D2F #$.Float] - [conversion::double-to-int #$.Double _.D2I #$.Int] - [conversion::double-to-long #$.Double _.D2L #$.Long] - [conversion::float-to-double #$.Float _.F2D #$.Double] - [conversion::float-to-int #$.Float _.F2I #$.Int] - [conversion::float-to-long #$.Float _.F2L #$.Long] - [conversion::int-to-byte #$.Int _.I2B #$.Byte] - [conversion::int-to-char #$.Int _.I2C #$.Char] - [conversion::int-to-double #$.Int _.I2D #$.Double] - [conversion::int-to-float #$.Int _.I2F #$.Float] - [conversion::int-to-long #$.Int _.I2L #$.Long] - [conversion::int-to-short #$.Int _.I2S #$.Short] - [conversion::long-to-double #$.Long _.L2D #$.Double] - [conversion::long-to-float #$.Long _.L2F #$.Float] - [conversion::long-to-int #$.Long _.L2I #$.Int] - [conversion::long-to-short #$.Long L2S #$.Short] - [conversion::long-to-byte #$.Long L2B #$.Byte] - [conversion::long-to-char #$.Long L2C #$.Char] - [conversion::char-to-byte #$.Char _.I2B #$.Byte] - [conversion::char-to-short #$.Char _.I2S #$.Short] - [conversion::char-to-int #$.Char _.NOP #$.Int] - [conversion::char-to-long #$.Char _.I2L #$.Long] - [conversion::byte-to-long #$.Byte _.I2L #$.Long] - [conversion::short-to-long #$.Short _.I2L #$.Long] + [conversion::double-to-float #_t.Double _.D2F #_t.Float] + [conversion::double-to-int #_t.Double _.D2I #_t.Int] + [conversion::double-to-long #_t.Double _.D2L #_t.Long] + [conversion::float-to-double #_t.Float _.F2D #_t.Double] + [conversion::float-to-int #_t.Float _.F2I #_t.Int] + [conversion::float-to-long #_t.Float _.F2L #_t.Long] + [conversion::int-to-byte #_t.Int _.I2B #_t.Byte] + [conversion::int-to-char #_t.Int _.I2C #_t.Char] + [conversion::int-to-double #_t.Int _.I2D #_t.Double] + [conversion::int-to-float #_t.Int _.I2F #_t.Float] + [conversion::int-to-long #_t.Int _.I2L #_t.Long] + [conversion::int-to-short #_t.Int _.I2S #_t.Short] + [conversion::long-to-double #_t.Long _.L2D #_t.Double] + [conversion::long-to-float #_t.Long _.L2F #_t.Float] + [conversion::long-to-int #_t.Long _.L2I #_t.Int] + [conversion::long-to-short #_t.Long L2S #_t.Short] + [conversion::long-to-byte #_t.Long L2B #_t.Byte] + [conversion::long-to-char #_t.Long L2C #_t.Char] + [conversion::char-to-byte #_t.Char _.I2B #_t.Byte] + [conversion::char-to-short #_t.Char _.I2S #_t.Short] + [conversion::char-to-int #_t.Char _.NOP #_t.Int] + [conversion::char-to-long #_t.Char _.I2L #_t.Long] + [conversion::byte-to-long #_t.Byte _.I2L #_t.Long] + [conversion::short-to-long #_t.Short _.I2L #_t.Long] ) (def: conversion @@ -281,7 +283,7 @@ ))) (def: (array-java-type nesting elem-class) - (-> Nat Text $.Type) + (-> Nat Text Type) (_t.array nesting (case elem-class "boolean" _t.boolean @@ -447,7 +449,7 @@ [objectI (generate objectS)] (wrap (|>> objectI (_.INSTANCEOF class) - (_.wrap #$.Boolean)))) + (_.wrap #_t.Boolean)))) _ (phase.throw extension.invalid-syntax [proc %synthesis inputs]))) @@ -466,14 +468,14 @@ [<object> <primitive>] (wrap (|>> valueI (_.unwrap <type>)))) - (["boolean" "java.lang.Boolean" #$.Boolean] - ["byte" "java.lang.Byte" #$.Byte] - ["short" "java.lang.Short" #$.Short] - ["int" "java.lang.Integer" #$.Int] - ["long" "java.lang.Long" #$.Long] - ["float" "java.lang.Float" #$.Float] - ["double" "java.lang.Double" #$.Double] - ["char" "java.lang.Character" #$.Char]) + (["boolean" "java.lang.Boolean" #_t.Boolean] + ["byte" "java.lang.Byte" #_t.Byte] + ["short" "java.lang.Short" #_t.Short] + ["int" "java.lang.Integer" #_t.Int] + ["long" "java.lang.Long" #_t.Long] + ["float" "java.lang.Float" #_t.Float] + ["double" "java.lang.Double" #_t.Double] + ["char" "java.lang.Character" #_t.Char]) _ (wrap valueI))) @@ -496,14 +498,14 @@ (def: primitives (Dictionary Text Primitive) - (|> (list ["boolean" #$.Boolean] - ["byte" #$.Byte] - ["short" #$.Short] - ["int" #$.Int] - ["long" #$.Long] - ["float" #$.Float] - ["double" #$.Double] - ["char" #$.Char]) + (|> (list ["boolean" #_t.Boolean] + ["byte" #_t.Byte] + ["short" #_t.Short] + ["int" #_t.Int] + ["long" #_t.Long] + ["float" #_t.Float] + ["double" #_t.Double] + ["char" #_t.Char]) (dictionary.from-list text.hash))) (def: (static::get proc generate inputs) @@ -516,7 +518,7 @@ [] (case (dictionary.get unboxed primitives) (#.Some primitive) - (wrap (_.GETSTATIC class field (#$.Primitive primitive))) + (wrap (_.GETSTATIC class field (#_t.Primitive primitive))) #.None (wrap (_.GETSTATIC class field (_t.class unboxed (list)))))) @@ -536,7 +538,7 @@ (case (dictionary.get unboxed primitives) (#.Some primitive) (wrap (|>> valueI - (_.PUTSTATIC class field (#$.Primitive primitive)) + (_.PUTSTATIC class field (#_t.Primitive primitive)) (_.string synthesis.unit))) #.None @@ -561,7 +563,7 @@ (#.Some primitive) (wrap (|>> objectI (_.CHECKCAST class) - (_.GETFIELD class field (#$.Primitive primitive)))) + (_.GETFIELD class field (#_t.Primitive primitive)))) #.None (wrap (|>> objectI @@ -588,7 +590,7 @@ (_.CHECKCAST class) _.DUP valueI - (_.PUTFIELD class field (#$.Primitive primitive)))) + (_.PUTFIELD class field (#_t.Primitive primitive)))) #.None (wrap (|>> objectI @@ -602,7 +604,7 @@ (phase.throw extension.invalid-syntax [proc %synthesis inputs]))) (def: base-type - (l.Parser $.Type) + (l.Parser Type) ($_ p.either (p.after (l.this "boolean") (p@wrap _t.boolean)) (p.after (l.this "byte") (p@wrap _t.byte)) @@ -618,14 +620,14 @@ )) (def: java-type - (l.Parser $.Type) + (l.Parser Type) (do p.monad [raw base-type nesting (p.some (l.this "[]"))] (wrap (_t.array (list.size nesting) raw)))) (def: (generate-type argD) - (-> Text (Operation $.Type)) + (-> Text (Operation Type)) (case (l.run argD java-type) (#error.Failure error) (phase.throw invalid-syntax-for-jvm-type argD) @@ -635,7 +637,7 @@ (def: (generate-arg generate argS) (-> (-> Synthesis (Operation Inst)) Synthesis - (Operation [$.Type Inst])) + (Operation [Type Inst])) (case argS (^ (synthesis.tuple (list (synthesis.text argD) argS))) (do phase.monad @@ -647,7 +649,7 @@ (phase.throw invalid-syntax-for-argument-generation ""))) (def: (method-return-type description) - (-> Text (Operation (Maybe $.Type))) + (-> Text (Operation (Maybe Type))) (case description "void" (phase@wrap #.None) @@ -656,7 +658,7 @@ (phase@map (|>> #.Some) (generate-type description)))) (def: (prepare-argI [type argI]) - (-> [$.Type Inst] Inst) + (-> [Type Inst] Inst) (case (_t.class-name type) (#.Some class-name) (|>> argI diff --git a/new-luxc/source/luxc/lang/translation/jvm/reference.lux b/new-luxc/source/luxc/lang/translation/jvm/reference.lux index c821a9de2..63fd0685a 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/reference.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/reference.lux @@ -9,13 +9,12 @@ [compiler ["." name] ["." reference (#+ Register Variable)] - ["." phase ("operation/." monad) + ["." phase ("operation@." monad) ["." generation]]]]] [luxc [lang [host [jvm (#+ Inst Operation) - ["$t" type] ["_" inst]]]]] ["." //]) @@ -39,7 +38,7 @@ (def: local (-> Register (Operation Inst)) - (|>> _.ALOAD operation/wrap)) + (|>> _.ALOAD operation@wrap)) (def: #export (variable variable) (-> Variable (Operation Inst)) @@ -54,4 +53,4 @@ (-> Name (Operation Inst)) (do phase.monad [bytecode-name (generation.remember name)] - (operation/wrap (_.GETSTATIC bytecode-name //.value-field //.$Object)))) + (operation@wrap (_.GETSTATIC bytecode-name //.value-field //.$Object)))) diff --git a/new-luxc/source/luxc/lang/translation/jvm/runtime.lux b/new-luxc/source/luxc/lang/translation/jvm/runtime.lux index d21729d0e..fa250e2bf 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/runtime.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/runtime.lux @@ -1,5 +1,5 @@ (.module: - [lux #* + [lux (#- Type) [abstract [monad (#+ do)]] [data @@ -8,6 +8,9 @@ [collection ["." list ("#/." functor)]]] ["." math] + [target + [jvm + ["$t" type (#+ Type Method)]]] [tool [compiler [analysis (#+ Arity)] @@ -17,24 +20,23 @@ [luxc [lang [host - ["$" jvm (#+ Label Inst Method Def Operation) - ["$t" type] + ["$" jvm (#+ Label Inst Def Operation) ["$d" def] ["_" inst]]]]] ["." // (#+ ByteCode)]) -(def: $Object $.Type ($t.class "java.lang.Object" (list))) -(def: $Object-Array $.Type ($t.array 1 $Object)) -(def: $String $.Type ($t.class "java.lang.String" (list))) -(def: #export $Stack $.Type ($t.array 1 $Object)) -(def: #export $Tuple $.Type $Object-Array) -(def: #export $Variant $.Type $Object-Array) -(def: #export $Tag $.Type $t.int) -(def: #export $Flag $.Type $Object) -(def: #export $Datum $.Type $Object) -(def: #export $Function $.Type ($t.class //.function-class (list))) -(def: $Throwable $.Type ($t.class "java.lang.Throwable" (list))) -(def: $Runtime $.Type ($t.class "java.lang.Runtime" (list))) +(def: $Object Type ($t.class "java.lang.Object" (list))) +(def: $Object-Array Type ($t.array 1 $Object)) +(def: $String Type ($t.class "java.lang.String" (list))) +(def: #export $Stack Type ($t.array 1 $Object)) +(def: #export $Tuple Type $Object-Array) +(def: #export $Variant Type $Object-Array) +(def: #export $Tag Type $t.int) +(def: #export $Flag Type $Object) +(def: #export $Datum Type $Object) +(def: #export $Function Type ($t.class //.function-class (list))) +(def: $Throwable Type ($t.class "java.lang.Throwable" (list))) +(def: $Runtime Type ($t.class "java.lang.Runtime" (list))) (def: #export logI Inst @@ -105,7 +107,7 @@ (def: adt-methods Def - (let [store-tagI (|>> _.DUP (_.int +0) (_.ILOAD 0) (_.wrap #$.Int) _.AASTORE) + (let [store-tagI (|>> _.DUP (_.int +0) (_.ILOAD 0) (_.wrap #$t.Int) _.AASTORE) store-flagI (|>> _.DUP (_.int +1) (_.ALOAD 1) _.AASTORE) store-valueI (|>> _.DUP (_.int +2) (_.ALOAD 2) _.AASTORE)] (|>> ($d.method #$.Public $.staticM "variant_make" @@ -127,7 +129,7 @@ (try-methodI (|>> (_.ALOAD 0) (_.INVOKESTATIC "java.lang.Double" "parseDouble" ($t.method (list $String) (#.Some $t.double) (list)) #0) - (_.wrap #$.Double)))) + (_.wrap #$t.Double)))) )) (def: pm-methods @@ -191,7 +193,7 @@ (function (_ idx) (|>> (_.int (.int idx)) _.AALOAD))) tagI (: Inst - (|>> (variant-partI 0) (_.unwrap #$.Int))) + (|>> (variant-partI 0) (_.unwrap #$t.Int))) flagI (variant-partI 1) datumI (variant-partI 2) shortenI (|>> (_.ALOAD 0) tagI ## Get tag diff --git a/new-luxc/source/luxc/lang/translation/jvm/structure.lux b/new-luxc/source/luxc/lang/translation/jvm/structure.lux index 527228c8e..5cfe233fe 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/structure.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/structure.lux @@ -1,5 +1,5 @@ (.module: - [lux #* + [lux (#- Type) [abstract ["." monad (#+ do)]] [control @@ -9,6 +9,9 @@ format] [collection ["." list]]] + [target + [jvm + ["$t" type (#+ Type)]]] [tool [compiler [synthesis (#+ Synthesis)] @@ -16,8 +19,7 @@ [luxc [lang [host - ["." jvm (#+ Inst Operation Phase) - ["$t" type] + [jvm (#+ Inst Operation Phase) ["_" inst]]]]] ["." //]) @@ -25,7 +27,7 @@ (ex.report ["Expected size" ">= 2"] ["Actual size" (%n size)])) -(def: $Object jvm.Type ($t.class "java.lang.Object" (list))) +(def: $Object ($t.class "java.lang.Object" (list))) (def: #export (tuple translate members) (-> Phase (List Synthesis) (Operation Inst)) |