aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/library/lux/target/jvm/bytecode
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/library/lux/target/jvm/bytecode')
-rw-r--r--stdlib/source/library/lux/target/jvm/bytecode/address.lux76
-rw-r--r--stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux96
-rw-r--r--stdlib/source/library/lux/target/jvm/bytecode/environment/limit/stack.lux72
-rw-r--r--stdlib/source/library/lux/target/jvm/bytecode/instruction.lux34
4 files changed, 135 insertions, 143 deletions
diff --git a/stdlib/source/library/lux/target/jvm/bytecode/address.lux b/stdlib/source/library/lux/target/jvm/bytecode/address.lux
index 063c3eff6..2908238d5 100644
--- a/stdlib/source/library/lux/target/jvm/bytecode/address.lux
+++ b/stdlib/source/library/lux/target/jvm/bytecode/address.lux
@@ -24,53 +24,51 @@
["[1][0]" signed {"+" [S4]}]]]])
(abstract: .public Address
- {}
-
U2
- (def: .public value
- (-> Address U2)
- (|>> :representation))
+ [(def: .public value
+ (-> Address U2)
+ (|>> :representation))
- (def: .public start
- Address
- (|> 0 ///unsigned.u2 try.trusted :abstraction))
+ (def: .public start
+ Address
+ (|> 0 ///unsigned.u2 try.trusted :abstraction))
- (def: .public (move distance)
- (-> U2 (-> Address (Try Address)))
- (|>> :representation
- (///unsigned.+/2 distance)
- (\ try.functor each (|>> :abstraction))))
+ (def: .public (move distance)
+ (-> U2 (-> Address (Try Address)))
+ (|>> :representation
+ (///unsigned.+/2 distance)
+ (\ try.functor each (|>> :abstraction))))
- (def: with_sign
- (-> Address (Try S4))
- (|>> :representation ///unsigned.value .int ///signed.s4))
+ (def: with_sign
+ (-> Address (Try S4))
+ (|>> :representation ///unsigned.value .int ///signed.s4))
- (def: .public (jump from to)
- (-> Address Address (Try Big_Jump))
- (do try.monad
- [from (with_sign from)
- to (with_sign to)]
- (///signed.-/4 from to)))
+ (def: .public (jump from to)
+ (-> Address Address (Try Big_Jump))
+ (do try.monad
+ [from (with_sign from)
+ to (with_sign to)]
+ (///signed.-/4 from to)))
- (def: .public (after? reference subject)
- (-> Address Address Bit)
- (n.> (|> reference :representation ///unsigned.value)
- (|> subject :representation ///unsigned.value)))
+ (def: .public (after? reference subject)
+ (-> Address Address Bit)
+ (n.> (|> reference :representation ///unsigned.value)
+ (|> subject :representation ///unsigned.value)))
- (implementation: .public equivalence
- (Equivalence Address)
-
- (def: (= reference subject)
- (\ ///unsigned.equivalence =
- (:representation reference)
- (:representation subject))))
+ (implementation: .public equivalence
+ (Equivalence Address)
+
+ (def: (= reference subject)
+ (\ ///unsigned.equivalence =
+ (:representation reference)
+ (:representation subject))))
- (def: .public writer
- (Writer Address)
- (|>> :representation ///unsigned.writer/2))
+ (def: .public writer
+ (Writer Address)
+ (|>> :representation ///unsigned.writer/2))
- (def: .public format
- (Format Address)
- (|>> :representation ///unsigned.value %.nat))
+ (def: .public format
+ (Format Address)
+ (|>> :representation ///unsigned.value %.nat))]
)
diff --git a/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux b/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux
index 9a111eb22..13f9343a7 100644
--- a/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux
+++ b/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/registry.lux
@@ -29,65 +29,63 @@
(def: wide 2)
(abstract: .public Registry
- {}
-
U2
- (def: .public registry
- (-> U2 Registry)
- (|>> :abstraction))
+ [(def: .public registry
+ (-> U2 Registry)
+ (|>> :abstraction))
- (def: (minimal type)
- (-> (Type Method) Nat)
- (let [[type_variables inputs output exceptions] (/////type/parser.method type)]
- (|> inputs
- (list\each (function (_ input)
- (if (or (same? /////type.long input)
- (same? /////type.double input))
- ..wide
- ..normal)))
- (list\mix n.+ 0))))
+ (def: (minimal type)
+ (-> (Type Method) Nat)
+ (let [[type_variables inputs output exceptions] (/////type/parser.method type)]
+ (|> inputs
+ (list\each (function (_ input)
+ (if (or (same? /////type.long input)
+ (same? /////type.double input))
+ ..wide
+ ..normal)))
+ (list\mix n.+ 0))))
- (template [<start> <name>]
- [(def: .public <name>
- (-> (Type Method) (Try Registry))
- (|>> ..minimal
- (n.+ <start>)
- /////unsigned.u2
- (try\each ..registry)))]
+ (template [<start> <name>]
+ [(def: .public <name>
+ (-> (Type Method) (Try Registry))
+ (|>> ..minimal
+ (n.+ <start>)
+ /////unsigned.u2
+ (try\each ..registry)))]
- [0 static]
- [1 virtual]
- )
+ [0 static]
+ [1 virtual]
+ )
- (def: .public equivalence
- (Equivalence Registry)
- (\ equivalence.functor each
- (|>> :representation)
- /////unsigned.equivalence))
+ (def: .public equivalence
+ (Equivalence Registry)
+ (\ equivalence.functor each
+ (|>> :representation)
+ /////unsigned.equivalence))
- (def: .public writer
- (Writer Registry)
- (|>> :representation /////unsigned.writer/2))
+ (def: .public writer
+ (Writer Registry)
+ (|>> :representation /////unsigned.writer/2))
- (def: .public (has needed)
- (-> Registry Registry Registry)
- (|>> :representation
- (/////unsigned.max/2 (:representation needed))
- :abstraction))
+ (def: .public (has needed)
+ (-> Registry Registry Registry)
+ (|>> :representation
+ (/////unsigned.max/2 (:representation needed))
+ :abstraction))
- (template [<name> <extra>]
- [(def: .public <name>
- (-> Register Registry)
- (let [extra (|> <extra> /////unsigned.u2 try.trusted)]
- (|>> /////unsigned.lifted/2
- (/////unsigned.+/2 extra)
- try.trusted
- :abstraction)))]
+ (template [<name> <extra>]
+ [(def: .public <name>
+ (-> Register Registry)
+ (let [extra (|> <extra> /////unsigned.u2 try.trusted)]
+ (|>> /////unsigned.lifted/2
+ (/////unsigned.+/2 extra)
+ try.trusted
+ :abstraction)))]
- [for ..normal]
- [for_wide ..wide]
- )
+ [for ..normal]
+ [for_wide ..wide]
+ )]
)
(def: .public length
diff --git a/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/stack.lux b/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/stack.lux
index 48cfba7a8..1118c3b22 100644
--- a/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/stack.lux
+++ b/stdlib/source/library/lux/target/jvm/bytecode/environment/limit/stack.lux
@@ -18,53 +18,51 @@
["[1][0]" unsigned {"+" [U2]}]]])
(abstract: .public Stack
- {}
-
U2
- (template [<frames> <name>]
- [(def: .public <name>
- Stack
- (|> <frames> /////unsigned.u2 maybe.trusted :abstraction))]
+ [(template [<frames> <name>]
+ [(def: .public <name>
+ Stack
+ (|> <frames> /////unsigned.u2 maybe.trusted :abstraction))]
- [0 empty]
- [1 catch]
- )
+ [0 empty]
+ [1 catch]
+ )
- (def: .public equivalence
- (Equivalence Stack)
- (\ equivalence.functor each
- (|>> :representation)
- /////unsigned.equivalence))
+ (def: .public equivalence
+ (Equivalence Stack)
+ (\ equivalence.functor each
+ (|>> :representation)
+ /////unsigned.equivalence))
- (def: .public writer
- (Writer Stack)
- (|>> :representation /////unsigned.writer/2))
+ (def: .public writer
+ (Writer Stack)
+ (|>> :representation /////unsigned.writer/2))
- (def: stack
- (-> U2 Stack)
- (|>> :abstraction))
+ (def: stack
+ (-> U2 Stack)
+ (|>> :abstraction))
- (template [<op> <name>]
- [(def: .public (<name> amount)
- (-> U2 (-> Stack (Try Stack)))
- (|>> :representation
- (<op> amount)
- (\ try.functor each ..stack)))]
+ (template [<op> <name>]
+ [(def: .public (<name> amount)
+ (-> U2 (-> Stack (Try Stack)))
+ (|>> :representation
+ (<op> amount)
+ (\ try.functor each ..stack)))]
- [/////unsigned.+/2 push]
- [/////unsigned.-/2 pop]
- )
+ [/////unsigned.+/2 push]
+ [/////unsigned.-/2 pop]
+ )
- (def: .public (max left right)
- (-> Stack Stack Stack)
- (:abstraction
- (/////unsigned.max/2 (:representation left)
- (:representation right))))
+ (def: .public (max left right)
+ (-> Stack Stack Stack)
+ (:abstraction
+ (/////unsigned.max/2 (:representation left)
+ (:representation right))))
- (def: .public format
- (Format Stack)
- (|>> :representation /////unsigned.value %.nat))
+ (def: .public format
+ (Format Stack)
+ (|>> :representation /////unsigned.value %.nat))]
)
(def: .public length
diff --git a/stdlib/source/library/lux/target/jvm/bytecode/instruction.lux b/stdlib/source/library/lux/target/jvm/bytecode/instruction.lux
index 449eb0d19..9fe36c303 100644
--- a/stdlib/source/library/lux/target/jvm/bytecode/instruction.lux
+++ b/stdlib/source/library/lux/target/jvm/bytecode/instruction.lux
@@ -235,26 +235,24 @@
(|>> mutation ((trinary/211' opcode input0 input1 input2)))])])
(abstract: .public Primitive_Array_Type
- {}
-
U1
- (def: code
- (-> Primitive_Array_Type U1)
- (|>> :representation))
-
- (template [<code> <name>]
- [(def: .public <name> (|> <code> ///unsigned.u1 try.trusted :abstraction))]
-
- [04 t_boolean]
- [05 t_char]
- [06 t_float]
- [07 t_double]
- [08 t_byte]
- [09 t_short]
- [10 t_int]
- [11 t_long]
- ))
+ [(def: code
+ (-> Primitive_Array_Type U1)
+ (|>> :representation))
+
+ (template [<code> <name>]
+ [(def: .public <name> (|> <code> ///unsigned.u1 try.trusted :abstraction))]
+
+ [04 t_boolean]
+ [05 t_char]
+ [06 t_float]
+ [07 t_double]
+ [08 t_byte]
+ [09 t_short]
+ [10 t_int]
+ [11 t_long]
+ )])
... https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-6.html#jvms-6.5
(with_expansions [<constants> (template [<code> <name>]