aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/target/jvm/instruction/resources.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/target/jvm/instruction/resources.lux')
-rw-r--r--stdlib/source/lux/target/jvm/instruction/resources.lux44
1 files changed, 44 insertions, 0 deletions
diff --git a/stdlib/source/lux/target/jvm/instruction/resources.lux b/stdlib/source/lux/target/jvm/instruction/resources.lux
new file mode 100644
index 000000000..fa83c4071
--- /dev/null
+++ b/stdlib/source/lux/target/jvm/instruction/resources.lux
@@ -0,0 +1,44 @@
+(.module:
+ [lux #*
+ [abstract
+ ["." equivalence (#+ Equivalence)]]
+ [data
+ [format
+ [".F" binary (#+ Writer) ("#@." monoid)]]]]
+ ["." /// #_
+ [encoding
+ ["#." unsigned (#+ U2)]]])
+
+(type: #export Resources
+ {#max-stack U2
+ #max-locals U2})
+
+(def: #export start
+ Resources
+ {#max-stack (///unsigned.u2 0)
+ #max-locals (///unsigned.u2 0)})
+
+(def: #export length
+ ($_ n/+
+ ## u2 max_stack;
+ ///unsigned.u2-bytes
+ ## u2 max_locals;
+ ///unsigned.u2-bytes))
+
+(def: #export equivalence
+ (Equivalence Resources)
+ ($_ equivalence.product
+ ## u2 max_stack;
+ ///unsigned.equivalence
+ ## u2 max_locals;
+ ///unsigned.equivalence
+ ))
+
+(def: #export (writer resources)
+ (Writer Resources)
+ ($_ binaryF@compose
+ ## u2 max_stack;
+ (///unsigned.u2-writer (get@ #max-stack resources))
+ ## u2 max_locals;
+ (///unsigned.u2-writer (get@ #max-locals resources))
+ ))