aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/target/jvm/attribute/code/exception.lux
diff options
context:
space:
mode:
authorEduardo Julian2019-06-20 03:10:30 -0400
committerEduardo Julian2019-06-20 03:10:30 -0400
commit67687850677bb34df37d6e9d1a2578d1198108d6 (patch)
treea95fd8c582b073e75a5ac9323d984dc9c797e290 /stdlib/source/lux/target/jvm/attribute/code/exception.lux
parent940bd554301c495740aae543dd553dcb6e5fee54 (diff)
Re-factored exceptions.
Diffstat (limited to 'stdlib/source/lux/target/jvm/attribute/code/exception.lux')
-rw-r--r--stdlib/source/lux/target/jvm/attribute/code/exception.lux51
1 files changed, 51 insertions, 0 deletions
diff --git a/stdlib/source/lux/target/jvm/attribute/code/exception.lux b/stdlib/source/lux/target/jvm/attribute/code/exception.lux
new file mode 100644
index 000000000..6ec0a1773
--- /dev/null
+++ b/stdlib/source/lux/target/jvm/attribute/code/exception.lux
@@ -0,0 +1,51 @@
+(.module:
+ [lux #*
+ [abstract
+ ["." equivalence (#+ Equivalence)]]
+ [data
+ [format
+ [".F" binary (#+ Format)]]]]
+ ["." // #_
+ ["#." label (#+ Label)]
+ ["//#" /// #_
+ [constant (#+ Class)]
+ ["#." encoding (#+ U2)]
+ ["#." index (#+ Index)]]])
+
+(type: #export Exception
+ {#start-pc Label
+ #end-pc Label
+ #handler-pc Label
+ #catch-type (Index Class)})
+
+(def: #export equivalence
+ (Equivalence Exception)
+ ($_ equivalence.product
+ //label.equivalence
+ //label.equivalence
+ //label.equivalence
+ ////index.equivalence
+ ))
+
+## https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.3
+(def: #export length
+ Nat
+ ($_ n/+
+ ## u2 start_pc;
+ ////encoding.u2-bytes
+ ## u2 end_pc;
+ ////encoding.u2-bytes
+ ## u2 handler_pc;
+ ////encoding.u2-bytes
+ ## u2 catch_type;
+ ////encoding.u2-bytes
+ ))
+
+(def: #export format
+ (Format Exception)
+ ($_ binaryF.and
+ //label.format
+ //label.format
+ //label.format
+ ////index.format
+ ))