diff options
Diffstat (limited to 'stdlib/source/lux/target/jvm/instruction/resources.lux')
-rw-r--r-- | stdlib/source/lux/target/jvm/instruction/resources.lux | 44 |
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)) + )) |