From 91a14e9b4c6611399d33166710081982cf984a00 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Wed, 3 Jan 2018 23:55:58 -0400 Subject: - Added "Box" support to new-luxc. --- .../luxc/lang/translation/procedure/common.jvm.lux | 38 +++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) (limited to 'new-luxc/source/luxc/lang/translation/procedure') 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) + (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) ))) -- cgit v1.2.3