diff options
author | Eduardo Julian | 2018-01-03 23:55:58 -0400 |
---|---|---|
committer | Eduardo Julian | 2018-01-03 23:55:58 -0400 |
commit | 91a14e9b4c6611399d33166710081982cf984a00 (patch) | |
tree | c6536c612a6009c9c7d45345f78c58970e02c035 /new-luxc/source/luxc/lang/extension/analysis/common.lux | |
parent | b83ef3a5cfeb863d297cdffc232b5eb85daa7347 (diff) |
- Added "Box" support to new-luxc.
Diffstat (limited to '')
-rw-r--r-- | new-luxc/source/luxc/lang/extension/analysis/common.lux | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/new-luxc/source/luxc/lang/extension/analysis/common.lux b/new-luxc/source/luxc/lang/extension/analysis/common.lux index 079001b26..1a1c8c650 100644 --- a/new-luxc/source/luxc/lang/extension/analysis/common.lux +++ b/new-luxc/source/luxc/lang/extension/analysis/common.lux @@ -392,6 +392,51 @@ (install "compare-and-swap" atom//compare-and-swap) ))) +(type: (Box ! a) + (#.Primitive "#Box" (#.Cons ! (#.Cons a #.Nil)))) + +(def: (box//new proc) + (-> Text ///.Analysis) + (function [analyse eval args] + (case args + (^ (list initC)) + (do macro.Monad<Meta> + [[var-id varT] (&.with-type-env tc.var) + _ (&.infer (type (All [!] (Box ! varT)))) + initA (&.with-type varT + (analyse initC))] + (wrap (la.procedure proc (list initA)))) + + _ + (&.throw Incorrect-Procedure-Arity (wrong-arity proc +1 (list.size args)))))) + +(def: (box//read proc) + (-> Text ///.Analysis) + (function [analyse eval args] + (do macro.Monad<Meta> + [[thread-id threadT] (&.with-type-env tc.var) + [var-id varT] (&.with-type-env tc.var)] + ((unary (type (Box threadT varT)) varT proc) + analyse eval args)))) + +(def: (box//write proc) + (-> Text ///.Analysis) + (function [analyse eval args] + (do macro.Monad<Meta> + [[thread-id threadT] (&.with-type-env tc.var) + [var-id varT] (&.with-type-env tc.var)] + ((binary varT (type (Box threadT varT)) Unit proc) + analyse eval args)))) + +(def: box-procs + Bundle + (<| (prefix "box") + (|> (dict.new text.Hash<Text>) + (install "new" box//new) + (install "read" box//read) + (install "write" box//write) + ))) + (def: process-procs Bundle (<| (prefix "process") @@ -415,5 +460,6 @@ (dict.merge array-procs) (dict.merge math-procs) (dict.merge atom-procs) + (dict.merge box-procs) (dict.merge process-procs) (dict.merge io-procs)))) |