diff options
Diffstat (limited to '')
-rw-r--r-- | new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux b/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux index 336293dc4..84c42244e 100644 --- a/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux +++ b/new-luxc/source/luxc/lang/translation/procedure/common.jvm.lux @@ -141,6 +141,8 @@ ($i.label @end) ))) +(def: unitI $.Inst ($i.string hostL.unit)) + ## [Procedures] ## [[Lux]] (def: (lux//is [leftI rightI]) @@ -513,7 +515,7 @@ messageI ($i.CHECKCAST "java.lang.String") ($i.INVOKEVIRTUAL "java.io.PrintStream" "println" string-method false) - ($i.string hostL.unit))) + unitI)) (def: (io//error messageI) Unary @@ -559,6 +561,31 @@ ($i.INVOKEVIRTUAL atom-class "compareAndSet" ($t.method (list $Object $Object) (#.Some $t.boolean) (list)) false) ($i.wrap #$.Boolean))) +## [[Box]] +(def: empty-boxI + $.Inst + (|>> ($i.int 1) ($i.ANEWARRAY ($t.binary-name "java.lang.Object")))) + +(def: check-boxI + $.Inst + ($i.CHECKCAST ($t.descriptor $Object-Array))) + +(def: (box//new initI) + Unary + (|>> empty-boxI + $i.DUP ($i.int 0) initI $i.AASTORE)) + +(def: (box//read boxI) + Unary + (|>> boxI check-boxI + ($i.int 0) $i.AALOAD)) + +(def: (box//write [valueI boxI]) + Binary + (|>> boxI check-boxI + ($i.int 0) valueI $i.AASTORE + unitI)) + ## [[Processes]] (def: (process//concurrency-level []) Nullary @@ -745,6 +772,14 @@ (install "read" (unary atom//read)) (install "compare-and-swap" (trinary atom//compare-and-swap))))) +(def: box-procs + Bundle + (<| (prefix "box") + (|> (dict.new text.Hash<Text>) + (install "new" (unary box//new)) + (install "read" (unary box//read)) + (install "write" (binary box//write))))) + (def: process-procs Bundle (<| (prefix "process") @@ -769,5 +804,6 @@ (dict.merge math-procs) (dict.merge io-procs) (dict.merge atom-procs) + (dict.merge box-procs) (dict.merge process-procs) ))) |