From e4bc4d0e2cd14a955530160c4fc7859e6c46874e Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Thu, 3 Feb 2022 05:55:42 -0400 Subject: Fixes for the pure-Lux JVM compiler machinery. [Part 13 / Done!] --- lux-jvm/source/luxc/lang/directive/jvm.lux | 996 ++++++++++----------- lux-jvm/source/luxc/lang/translation/jvm.lux | 85 +- .../luxc/lang/translation/jvm/extension/host.lux | 4 +- .../source/luxc/lang/translation/jvm/function.lux | 7 +- .../source/luxc/lang/translation/jvm/program.lux | 50 +- .../source/luxc/lang/translation/jvm/runtime.lux | 87 +- 6 files changed, 617 insertions(+), 612 deletions(-) (limited to 'lux-jvm') diff --git a/lux-jvm/source/luxc/lang/directive/jvm.lux b/lux-jvm/source/luxc/lang/directive/jvm.lux index 3960a3532..a3b28b710 100644 --- a/lux-jvm/source/luxc/lang/directive/jvm.lux +++ b/lux-jvm/source/luxc/lang/directive/jvm.lux @@ -56,7 +56,7 @@ ["[0]/" lux]]]]]] [meta [archive {"+" Archive} - ["[0]" artifact]] + ["[0]" unit]] ["[0]" cache "_" ["[1]" artifact]]]]]]] [/// @@ -69,520 +69,520 @@ [extension ["//G" host]]]]]) -(import: org/objectweb/asm/Label - ["[1]::[0]" - (new [])]) - -(def: (literal literal) - (-> /.Literal Inst) - (case literal - {/.#Boolean value} (_.boolean value) - {/.#Int value} (_.int value) - {/.#Long value} (_.long value) - {/.#Double value} (_.double value) - {/.#Char value} (_.char value) - {/.#String value} (_.string value))) - -(def: (constant instruction) - (-> /.Constant Inst) - (case instruction - {/.#BIPUSH constant} (_.BIPUSH constant) +... (import: org/objectweb/asm/Label +... ["[1]::[0]" +... (new [])]) + +... (def: (literal literal) +... (-> /.Literal Inst) +... (case literal +... {/.#Boolean value} (_.boolean value) +... {/.#Int value} (_.int value) +... {/.#Long value} (_.long value) +... {/.#Double value} (_.double value) +... {/.#Char value} (_.char value) +... {/.#String value} (_.string value))) + +... (def: (constant instruction) +... (-> /.Constant Inst) +... (case instruction +... {/.#BIPUSH constant} (_.BIPUSH constant) - {/.#SIPUSH constant} (_.SIPUSH constant) - - {/.#ICONST_M1} _.ICONST_M1 - {/.#ICONST_0} _.ICONST_0 - {/.#ICONST_1} _.ICONST_1 - {/.#ICONST_2} _.ICONST_2 - {/.#ICONST_3} _.ICONST_3 - {/.#ICONST_4} _.ICONST_4 - {/.#ICONST_5} _.ICONST_5 - - {/.#LCONST_0} _.LCONST_0 - {/.#LCONST_1} _.LCONST_1 +... {/.#SIPUSH constant} (_.SIPUSH constant) + +... {/.#ICONST_M1} _.ICONST_M1 +... {/.#ICONST_0} _.ICONST_0 +... {/.#ICONST_1} _.ICONST_1 +... {/.#ICONST_2} _.ICONST_2 +... {/.#ICONST_3} _.ICONST_3 +... {/.#ICONST_4} _.ICONST_4 +... {/.#ICONST_5} _.ICONST_5 + +... {/.#LCONST_0} _.LCONST_0 +... {/.#LCONST_1} _.LCONST_1 - {/.#FCONST_0} _.FCONST_0 - {/.#FCONST_1} _.FCONST_1 - {/.#FCONST_2} _.FCONST_2 +... {/.#FCONST_0} _.FCONST_0 +... {/.#FCONST_1} _.FCONST_1 +... {/.#FCONST_2} _.FCONST_2 - {/.#DCONST_0} _.DCONST_0 - {/.#DCONST_1} _.DCONST_1 +... {/.#DCONST_0} _.DCONST_0 +... {/.#DCONST_1} _.DCONST_1 - {/.#ACONST_NULL} _.NULL - - {/.#LDC literal} - (..literal literal) - )) - -(def: (int_arithmetic instruction) - (-> /.Int_Arithmetic Inst) - (case instruction - {/.#IADD} _.IADD - {/.#ISUB} _.ISUB - {/.#IMUL} _.IMUL - {/.#IDIV} _.IDIV - {/.#IREM} _.IREM - {/.#INEG} _.INEG)) - -(def: (long_arithmetic instruction) - (-> /.Long_Arithmetic Inst) - (case instruction - {/.#LADD} _.LADD - {/.#LSUB} _.LSUB - {/.#LMUL} _.LMUL - {/.#LDIV} _.LDIV - {/.#LREM} _.LREM - {/.#LNEG} _.LNEG)) - -(def: (float_arithmetic instruction) - (-> /.Float_Arithmetic Inst) - (case instruction - {/.#FADD} _.FADD - {/.#FSUB} _.FSUB - {/.#FMUL} _.FMUL - {/.#FDIV} _.FDIV - {/.#FREM} _.FREM - {/.#FNEG} _.FNEG)) - -(def: (double_arithmetic instruction) - (-> /.Double_Arithmetic Inst) - (case instruction - {/.#DADD} _.DADD - {/.#DSUB} _.DSUB - {/.#DMUL} _.DMUL - {/.#DDIV} _.DDIV - {/.#DREM} _.DREM - {/.#DNEG} _.DNEG)) - -(def: (arithmetic instruction) - (-> /.Arithmetic Inst) - (case instruction - {/.#Int_Arithmetic int_arithmetic} - (..int_arithmetic int_arithmetic) +... {/.#ACONST_NULL} _.NULL + +... {/.#LDC literal} +... (..literal literal) +... )) + +... (def: (int_arithmetic instruction) +... (-> /.Int_Arithmetic Inst) +... (case instruction +... {/.#IADD} _.IADD +... {/.#ISUB} _.ISUB +... {/.#IMUL} _.IMUL +... {/.#IDIV} _.IDIV +... {/.#IREM} _.IREM +... {/.#INEG} _.INEG)) + +... (def: (long_arithmetic instruction) +... (-> /.Long_Arithmetic Inst) +... (case instruction +... {/.#LADD} _.LADD +... {/.#LSUB} _.LSUB +... {/.#LMUL} _.LMUL +... {/.#LDIV} _.LDIV +... {/.#LREM} _.LREM +... {/.#LNEG} _.LNEG)) + +... (def: (float_arithmetic instruction) +... (-> /.Float_Arithmetic Inst) +... (case instruction +... {/.#FADD} _.FADD +... {/.#FSUB} _.FSUB +... {/.#FMUL} _.FMUL +... {/.#FDIV} _.FDIV +... {/.#FREM} _.FREM +... {/.#FNEG} _.FNEG)) + +... (def: (double_arithmetic instruction) +... (-> /.Double_Arithmetic Inst) +... (case instruction +... {/.#DADD} _.DADD +... {/.#DSUB} _.DSUB +... {/.#DMUL} _.DMUL +... {/.#DDIV} _.DDIV +... {/.#DREM} _.DREM +... {/.#DNEG} _.DNEG)) + +... (def: (arithmetic instruction) +... (-> /.Arithmetic Inst) +... (case instruction +... {/.#Int_Arithmetic int_arithmetic} +... (..int_arithmetic int_arithmetic) - {/.#Long_Arithmetic long_arithmetic} - (..long_arithmetic long_arithmetic) +... {/.#Long_Arithmetic long_arithmetic} +... (..long_arithmetic long_arithmetic) - {/.#Float_Arithmetic float_arithmetic} - (..float_arithmetic float_arithmetic) +... {/.#Float_Arithmetic float_arithmetic} +... (..float_arithmetic float_arithmetic) - {/.#Double_Arithmetic double_arithmetic} - (..double_arithmetic double_arithmetic))) - -(def: (int_bitwise instruction) - (-> /.Int_Bitwise Inst) - (case instruction - {/.#IOR} _.IOR - {/.#IXOR} _.IXOR - {/.#IAND} _.IAND - {/.#ISHL} _.ISHL - {/.#ISHR} _.ISHR - {/.#IUSHR} _.IUSHR)) - -(def: (long_bitwise instruction) - (-> /.Long_Bitwise Inst) - (case instruction - {/.#LOR} _.LOR - {/.#LXOR} _.LXOR - {/.#LAND} _.LAND - {/.#LSHL} _.LSHL - {/.#LSHR} _.LSHR - {/.#LUSHR} _.LUSHR)) - -(def: (bitwise instruction) - (-> /.Bitwise Inst) - (case instruction - {/.#Int_Bitwise int_bitwise} - (..int_bitwise int_bitwise) +... {/.#Double_Arithmetic double_arithmetic} +... (..double_arithmetic double_arithmetic))) + +... (def: (int_bitwise instruction) +... (-> /.Int_Bitwise Inst) +... (case instruction +... {/.#IOR} _.IOR +... {/.#IXOR} _.IXOR +... {/.#IAND} _.IAND +... {/.#ISHL} _.ISHL +... {/.#ISHR} _.ISHR +... {/.#IUSHR} _.IUSHR)) + +... (def: (long_bitwise instruction) +... (-> /.Long_Bitwise Inst) +... (case instruction +... {/.#LOR} _.LOR +... {/.#LXOR} _.LXOR +... {/.#LAND} _.LAND +... {/.#LSHL} _.LSHL +... {/.#LSHR} _.LSHR +... {/.#LUSHR} _.LUSHR)) + +... (def: (bitwise instruction) +... (-> /.Bitwise Inst) +... (case instruction +... {/.#Int_Bitwise int_bitwise} +... (..int_bitwise int_bitwise) - {/.#Long_Bitwise long_bitwise} - (..long_bitwise long_bitwise))) - -(def: (conversion instruction) - (-> /.Conversion Inst) - (case instruction - {/.#I2B} _.I2B - {/.#I2S} _.I2S - {/.#I2L} _.I2L - {/.#I2F} _.I2F - {/.#I2D} _.I2D - {/.#I2C} _.I2C - - {/.#L2I} _.L2I - {/.#L2F} _.L2F - {/.#L2D} _.L2D - - {/.#F2I} _.F2I - {/.#F2L} _.F2L - {/.#F2D} _.F2D +... {/.#Long_Bitwise long_bitwise} +... (..long_bitwise long_bitwise))) + +... (def: (conversion instruction) +... (-> /.Conversion Inst) +... (case instruction +... {/.#I2B} _.I2B +... {/.#I2S} _.I2S +... {/.#I2L} _.I2L +... {/.#I2F} _.I2F +... {/.#I2D} _.I2D +... {/.#I2C} _.I2C + +... {/.#L2I} _.L2I +... {/.#L2F} _.L2F +... {/.#L2D} _.L2D + +... {/.#F2I} _.F2I +... {/.#F2L} _.F2L +... {/.#F2D} _.F2D - {/.#D2I} _.D2I - {/.#D2L} _.D2L - {/.#D2F} _.D2F)) +... {/.#D2I} _.D2I +... {/.#D2L} _.D2L +... {/.#D2F} _.D2F)) -(def: (array instruction) - (-> /.Array Inst) - (case instruction - {/.#ARRAYLENGTH} _.ARRAYLENGTH +... (def: (array instruction) +... (-> /.Array Inst) +... (case instruction +... {/.#ARRAYLENGTH} _.ARRAYLENGTH - {/.#NEWARRAY type} (_.NEWARRAY type) - {/.#ANEWARRAY type} (_.ANEWARRAY type) +... {/.#NEWARRAY type} (_.NEWARRAY type) +... {/.#ANEWARRAY type} (_.ANEWARRAY type) - {/.#BALOAD} _.BALOAD - {/.#BASTORE} _.BASTORE +... {/.#BALOAD} _.BALOAD +... {/.#BASTORE} _.BASTORE - {/.#SALOAD} _.SALOAD - {/.#SASTORE} _.SASTORE +... {/.#SALOAD} _.SALOAD +... {/.#SASTORE} _.SASTORE - {/.#IALOAD} _.IALOAD - {/.#IASTORE} _.IASTORE +... {/.#IALOAD} _.IALOAD +... {/.#IASTORE} _.IASTORE - {/.#LALOAD} _.LALOAD - {/.#LASTORE} _.LASTORE +... {/.#LALOAD} _.LALOAD +... {/.#LASTORE} _.LASTORE - {/.#FALOAD} _.FALOAD - {/.#FASTORE} _.FASTORE +... {/.#FALOAD} _.FALOAD +... {/.#FASTORE} _.FASTORE - {/.#DALOAD} _.DALOAD - {/.#DASTORE} _.DASTORE +... {/.#DALOAD} _.DALOAD +... {/.#DASTORE} _.DASTORE - {/.#CALOAD} _.CALOAD - {/.#CASTORE} _.CASTORE - - {/.#AALOAD} _.AALOAD - {/.#AASTORE} _.AASTORE)) - -(def: (object instruction) - (-> /.Object Inst) - (case instruction - (^template [ ] - [{ class field_name field_type} - ( class field_name field_type)]) - ([/.#GETSTATIC _.GETSTATIC] - [/.#PUTSTATIC _.PUTSTATIC] - [/.#GETFIELD _.GETFIELD] - [/.#PUTFIELD _.PUTFIELD]) +... {/.#CALOAD} _.CALOAD +... {/.#CASTORE} _.CASTORE + +... {/.#AALOAD} _.AALOAD +... {/.#AASTORE} _.AASTORE)) + +... (def: (object instruction) +... (-> /.Object Inst) +... (case instruction +... (^template [ ] +... [{ class field_name field_type} +... ( class field_name field_type)]) +... ([/.#GETSTATIC _.GETSTATIC] +... [/.#PUTSTATIC _.PUTSTATIC] +... [/.#GETFIELD _.GETFIELD] +... [/.#PUTFIELD _.PUTFIELD]) - {/.#NEW type} (_.NEW type) +... {/.#NEW type} (_.NEW type) - {/.#INSTANCEOF type} (_.INSTANCEOF type) - {/.#CHECKCAST type} (_.CHECKCAST type) - - (^template [ ] - [{ class method_name method_type} - ( class method_name method_type)]) - ([/.#INVOKEINTERFACE _.INVOKEINTERFACE] - [/.#INVOKESPECIAL _.INVOKESPECIAL] - [/.#INVOKESTATIC _.INVOKESTATIC] - [/.#INVOKEVIRTUAL _.INVOKEVIRTUAL]) - )) - -(def: (local_int instruction) - (-> /.Local_Int Inst) - (case instruction - {/.#ILOAD register} (_.ILOAD register) - {/.#ISTORE register} (_.ISTORE register))) - -(def: (local_long instruction) - (-> /.Local_Long Inst) - (case instruction - {/.#LLOAD register} (_.LLOAD register) - {/.#LSTORE register} (_.LSTORE register))) - -(def: (local_float instruction) - (-> /.Local_Float Inst) - (case instruction - {/.#FLOAD register} (_.FLOAD register) - {/.#FSTORE register} (_.FSTORE register))) - -(def: (local_double instruction) - (-> /.Local_Double Inst) - (case instruction - {/.#DLOAD register} (_.DLOAD register) - {/.#DSTORE register} (_.DSTORE register))) - -(def: (local_object instruction) - (-> /.Local_Object Inst) - (case instruction - {/.#ALOAD register} (_.ALOAD register) - {/.#ASTORE register} (_.ASTORE register))) - -(def: (local instruction) - (-> /.Local Inst) - (case instruction - {/.#Local_Int instruction} (..local_int instruction) - {/.#IINC register} (_.IINC register) - {/.#Local_Long instruction} (..local_long instruction) - {/.#Local_Float instruction} (..local_float instruction) - {/.#Local_Double instruction} (..local_double instruction) - {/.#Local_Object instruction} (..local_object instruction))) - -(def: (stack instruction) - (-> /.Stack Inst) - (case instruction - {/.#DUP} _.DUP - {/.#DUP_X1} _.DUP_X1 - {/.#DUP_X2} _.DUP_X2 - {/.#DUP2} _.DUP2 - {/.#DUP2_X1} _.DUP2_X1 - {/.#DUP2_X2} _.DUP2_X2 - {/.#SWAP} _.SWAP - {/.#POP} _.POP - {/.#POP2} _.POP2)) - -(def: (comparison instruction) - (-> /.Comparison Inst) - (case instruction - {/.#LCMP} _.LCMP +... {/.#INSTANCEOF type} (_.INSTANCEOF type) +... {/.#CHECKCAST type} (_.CHECKCAST type) + +... (^template [ ] +... [{ class method_name method_type} +... ( class method_name method_type)]) +... ([/.#INVOKEINTERFACE _.INVOKEINTERFACE] +... [/.#INVOKESPECIAL _.INVOKESPECIAL] +... [/.#INVOKESTATIC _.INVOKESTATIC] +... [/.#INVOKEVIRTUAL _.INVOKEVIRTUAL]) +... )) + +... (def: (local_int instruction) +... (-> /.Local_Int Inst) +... (case instruction +... {/.#ILOAD register} (_.ILOAD register) +... {/.#ISTORE register} (_.ISTORE register))) + +... (def: (local_long instruction) +... (-> /.Local_Long Inst) +... (case instruction +... {/.#LLOAD register} (_.LLOAD register) +... {/.#LSTORE register} (_.LSTORE register))) + +... (def: (local_float instruction) +... (-> /.Local_Float Inst) +... (case instruction +... {/.#FLOAD register} (_.FLOAD register) +... {/.#FSTORE register} (_.FSTORE register))) + +... (def: (local_double instruction) +... (-> /.Local_Double Inst) +... (case instruction +... {/.#DLOAD register} (_.DLOAD register) +... {/.#DSTORE register} (_.DSTORE register))) + +... (def: (local_object instruction) +... (-> /.Local_Object Inst) +... (case instruction +... {/.#ALOAD register} (_.ALOAD register) +... {/.#ASTORE register} (_.ASTORE register))) + +... (def: (local instruction) +... (-> /.Local Inst) +... (case instruction +... {/.#Local_Int instruction} (..local_int instruction) +... {/.#IINC register} (_.IINC register) +... {/.#Local_Long instruction} (..local_long instruction) +... {/.#Local_Float instruction} (..local_float instruction) +... {/.#Local_Double instruction} (..local_double instruction) +... {/.#Local_Object instruction} (..local_object instruction))) + +... (def: (stack instruction) +... (-> /.Stack Inst) +... (case instruction +... {/.#DUP} _.DUP +... {/.#DUP_X1} _.DUP_X1 +... {/.#DUP_X2} _.DUP_X2 +... {/.#DUP2} _.DUP2 +... {/.#DUP2_X1} _.DUP2_X1 +... {/.#DUP2_X2} _.DUP2_X2 +... {/.#SWAP} _.SWAP +... {/.#POP} _.POP +... {/.#POP2} _.POP2)) + +... (def: (comparison instruction) +... (-> /.Comparison Inst) +... (case instruction +... {/.#LCMP} _.LCMP - {/.#FCMPG} _.FCMPG - {/.#FCMPL} _.FCMPL - - {/.#DCMPG} _.DCMPG - {/.#DCMPL} _.DCMPL)) - -(def: (branching instruction) - (-> (/.Branching org/objectweb/asm/Label) Inst) - (case instruction - {/.#IF_ICMPEQ label} (_.IF_ICMPEQ label) - {/.#IF_ICMPGE label} (_.IF_ICMPGE label) - {/.#IF_ICMPGT label} (_.IF_ICMPGT label) - {/.#IF_ICMPLE label} (_.IF_ICMPLE label) - {/.#IF_ICMPLT label} (_.IF_ICMPLT label) - {/.#IF_ICMPNE label} (_.IF_ICMPNE label) - {/.#IFEQ label} (_.IFEQ label) - {/.#IFGE label} (_.IFGE label) - {/.#IFGT label} (_.IFGT label) - {/.#IFLE label} (_.IFLE label) - {/.#IFLT label} (_.IFLT label) - {/.#IFNE label} (_.IFNE label) - - {/.#TABLESWITCH min max default labels} - (_.TABLESWITCH min max default labels) +... {/.#FCMPG} _.FCMPG +... {/.#FCMPL} _.FCMPL + +... {/.#DCMPG} _.DCMPG +... {/.#DCMPL} _.DCMPL)) + +... (def: (branching instruction) +... (-> (/.Branching org/objectweb/asm/Label) Inst) +... (case instruction +... {/.#IF_ICMPEQ label} (_.IF_ICMPEQ label) +... {/.#IF_ICMPGE label} (_.IF_ICMPGE label) +... {/.#IF_ICMPGT label} (_.IF_ICMPGT label) +... {/.#IF_ICMPLE label} (_.IF_ICMPLE label) +... {/.#IF_ICMPLT label} (_.IF_ICMPLT label) +... {/.#IF_ICMPNE label} (_.IF_ICMPNE label) +... {/.#IFEQ label} (_.IFEQ label) +... {/.#IFGE label} (_.IFGE label) +... {/.#IFGT label} (_.IFGT label) +... {/.#IFLE label} (_.IFLE label) +... {/.#IFLT label} (_.IFLT label) +... {/.#IFNE label} (_.IFNE label) + +... {/.#TABLESWITCH min max default labels} +... (_.TABLESWITCH min max default labels) - {/.#LOOKUPSWITCH default keys+labels} - (_.LOOKUPSWITCH default keys+labels) - - {/.#IF_ACMPEQ label} (_.IF_ACMPEQ label) - {/.#IF_ACMPNE label} (_.IF_ACMPNE label) - {/.#IFNONNULL label} (_.IFNONNULL label) - {/.#IFNULL label} (_.IFNULL label))) - -(def: (exception instruction) - (-> (/.Exception org/objectweb/asm/Label) Inst) - (case instruction - {/.#Try start end handler exception} (_.try start end handler exception) - {/.#ATHROW} _.ATHROW)) - -(def: (concurrency instruction) - (-> /.Concurrency Inst) - (case instruction - {/.#MONITORENTER} _.MONITORENTER - {/.#MONITOREXIT} _.MONITOREXIT)) - -(def: (return instruction) - (-> /.Return Inst) - (case instruction - {/.#RETURN} _.RETURN - {/.#IRETURN} _.IRETURN - {/.#LRETURN} _.LRETURN - {/.#FRETURN} _.FRETURN - {/.#DRETURN} _.DRETURN - {/.#ARETURN} _.ARETURN)) - -(def: (control instruction) - (-> (/.Control org/objectweb/asm/Label) Inst) - (case instruction - {/.#GOTO label} (_.GOTO label) - {/.#Branching instruction} (..branching instruction) - {/.#Exception instruction} (..exception instruction) - {/.#Concurrency instruction} (..concurrency instruction) - {/.#Return instruction} (..return instruction))) - -(def: (instruction instruction) - (-> (/.Instruction Inst org/objectweb/asm/Label) Inst) - (case instruction - {/.#NOP} _.NOP - {/.#Constant instruction} (..constant instruction) - {/.#Arithmetic instruction} (..arithmetic instruction) - {/.#Bitwise instruction} (..bitwise instruction) - {/.#Conversion instruction} (..conversion instruction) - {/.#Array instruction} (..array instruction) - {/.#Object instruction} (..object instruction) - {/.#Local instruction} (..local instruction) - {/.#Stack instruction} (..stack instruction) - {/.#Comparison instruction} (..comparison instruction) - {/.#Control instruction} (..control instruction) - {/.#Embedded embedded} embedded)) - -(type: Mapping - (Dictionary /.Label org/objectweb/asm/Label)) - -(type: (Re_labeler context) - (-> [Mapping (context /.Label)] - [Mapping (context org/objectweb/asm/Label)])) - -(def: (relabel [mapping label]) - (Re_labeler Identity) - (case (dictionary.value label mapping) - {.#Some label} - [mapping label] - - {.#None} - (let [label' (org/objectweb/asm/Label::new)] - [(dictionary.has label label' mapping) label']))) - -(def: (relabel_branching [mapping instruction]) - (Re_labeler /.Branching) - (case instruction - (^template [] - [{ label} - (let [[mapping label] (..relabel [mapping label])] - [mapping { label}])]) - ([/.#IF_ICMPEQ] [/.#IF_ICMPGE] [/.#IF_ICMPGT] [/.#IF_ICMPLE] [/.#IF_ICMPLT] [/.#IF_ICMPNE] - [/.#IFEQ] [/.#IFNE] [/.#IFGE] [/.#IFGT] [/.#IFLE] [/.#IFLT] - - [/.#IF_ACMPEQ] [/.#IF_ACMPNE] [/.#IFNONNULL] [/.#IFNULL]) - - {/.#TABLESWITCH min max default labels} - (let [[mapping default] (..relabel [mapping default]) - [mapping labels] (list#mix (function (_ input [mapping output]) - (let [[mapping input] (..relabel [mapping input])] - [mapping (list& input output)])) - [mapping (list)] labels)] - [mapping {/.#TABLESWITCH min max default (list.reversed labels)}]) +... {/.#LOOKUPSWITCH default keys+labels} +... (_.LOOKUPSWITCH default keys+labels) + +... {/.#IF_ACMPEQ label} (_.IF_ACMPEQ label) +... {/.#IF_ACMPNE label} (_.IF_ACMPNE label) +... {/.#IFNONNULL label} (_.IFNONNULL label) +... {/.#IFNULL label} (_.IFNULL label))) + +... (def: (exception instruction) +... (-> (/.Exception org/objectweb/asm/Label) Inst) +... (case instruction +... {/.#Try start end handler exception} (_.try start end handler exception) +... {/.#ATHROW} _.ATHROW)) + +... (def: (concurrency instruction) +... (-> /.Concurrency Inst) +... (case instruction +... {/.#MONITORENTER} _.MONITORENTER +... {/.#MONITOREXIT} _.MONITOREXIT)) + +... (def: (return instruction) +... (-> /.Return Inst) +... (case instruction +... {/.#RETURN} _.RETURN +... {/.#IRETURN} _.IRETURN +... {/.#LRETURN} _.LRETURN +... {/.#FRETURN} _.FRETURN +... {/.#DRETURN} _.DRETURN +... {/.#ARETURN} _.ARETURN)) + +... (def: (control instruction) +... (-> (/.Control org/objectweb/asm/Label) Inst) +... (case instruction +... {/.#GOTO label} (_.GOTO label) +... {/.#Branching instruction} (..branching instruction) +... {/.#Exception instruction} (..exception instruction) +... {/.#Concurrency instruction} (..concurrency instruction) +... {/.#Return instruction} (..return instruction))) + +... (def: (instruction instruction) +... (-> (/.Instruction Inst org/objectweb/asm/Label) Inst) +... (case instruction +... {/.#NOP} _.NOP +... {/.#Constant instruction} (..constant instruction) +... {/.#Arithmetic instruction} (..arithmetic instruction) +... {/.#Bitwise instruction} (..bitwise instruction) +... {/.#Conversion instruction} (..conversion instruction) +... {/.#Array instruction} (..array instruction) +... {/.#Object instruction} (..object instruction) +... {/.#Local instruction} (..local instruction) +... {/.#Stack instruction} (..stack instruction) +... {/.#Comparison instruction} (..comparison instruction) +... {/.#Control instruction} (..control instruction) +... {/.#Embedded embedded} embedded)) + +... (type: Mapping +... (Dictionary /.Label org/objectweb/asm/Label)) + +... (type: (Re_labeler context) +... (-> [Mapping (context /.Label)] +... [Mapping (context org/objectweb/asm/Label)])) + +... (def: (relabel [mapping label]) +... (Re_labeler Identity) +... (case (dictionary.value label mapping) +... {.#Some label} +... [mapping label] + +... {.#None} +... (let [label' (org/objectweb/asm/Label::new)] +... [(dictionary.has label label' mapping) label']))) + +... (def: (relabel_branching [mapping instruction]) +... (Re_labeler /.Branching) +... (case instruction +... (^template [] +... [{ label} +... (let [[mapping label] (..relabel [mapping label])] +... [mapping { label}])]) +... ([/.#IF_ICMPEQ] [/.#IF_ICMPGE] [/.#IF_ICMPGT] [/.#IF_ICMPLE] [/.#IF_ICMPLT] [/.#IF_ICMPNE] +... [/.#IFEQ] [/.#IFNE] [/.#IFGE] [/.#IFGT] [/.#IFLE] [/.#IFLT] + +... [/.#IF_ACMPEQ] [/.#IF_ACMPNE] [/.#IFNONNULL] [/.#IFNULL]) + +... {/.#TABLESWITCH min max default labels} +... (let [[mapping default] (..relabel [mapping default]) +... [mapping labels] (list#mix (function (_ input [mapping output]) +... (let [[mapping input] (..relabel [mapping input])] +... [mapping (list& input output)])) +... [mapping (list)] labels)] +... [mapping {/.#TABLESWITCH min max default (list.reversed labels)}]) - {/.#LOOKUPSWITCH default keys+labels} - (let [[mapping default] (..relabel [mapping default]) - [mapping keys+labels] (list#mix (function (_ [expected input] [mapping output]) - (let [[mapping input] (..relabel [mapping input])] - [mapping (list& [expected input] output)])) - [mapping (list)] keys+labels)] - [mapping {/.#LOOKUPSWITCH default (list.reversed keys+labels)}]) - )) - -(def: (relabel_exception [mapping instruction]) - (Re_labeler /.Exception) - (case instruction - {/.#Try start end handler exception} - (let [[mapping start] (..relabel [mapping start]) - [mapping end] (..relabel [mapping end]) - [mapping handler] (..relabel [mapping handler])] - [mapping {/.#Try start end handler exception}]) +... {/.#LOOKUPSWITCH default keys+labels} +... (let [[mapping default] (..relabel [mapping default]) +... [mapping keys+labels] (list#mix (function (_ [expected input] [mapping output]) +... (let [[mapping input] (..relabel [mapping input])] +... [mapping (list& [expected input] output)])) +... [mapping (list)] keys+labels)] +... [mapping {/.#LOOKUPSWITCH default (list.reversed keys+labels)}]) +... )) + +... (def: (relabel_exception [mapping instruction]) +... (Re_labeler /.Exception) +... (case instruction +... {/.#Try start end handler exception} +... (let [[mapping start] (..relabel [mapping start]) +... [mapping end] (..relabel [mapping end]) +... [mapping handler] (..relabel [mapping handler])] +... [mapping {/.#Try start end handler exception}]) - {/.#ATHROW} - [mapping {/.#ATHROW}] - )) - -(def: (relabel_control [mapping instruction]) - (Re_labeler /.Control) - (case instruction - (^template [ ] - [{ instruction} - (let [[mapping instruction] ( [mapping instruction])] - [mapping { instruction}])]) - ([/.#GOTO ..relabel] - [/.#Branching ..relabel_branching] - [/.#Exception ..relabel_exception]) - - (^template [] - [{ instruction} - [mapping { instruction}]]) - ([/.#Concurrency] [/.#Return]) - )) - -(def: (relabel_instruction [mapping instruction]) - (Re_labeler (/.Instruction Inst)) - (case instruction - {/.#Embedded embedded} - [mapping {/.#Embedded embedded}] - - {/.#NOP} - [mapping {/.#NOP}] - - (^template [] - [{ instruction} - [mapping { instruction}]]) - ([/.#Constant] - [/.#Arithmetic] - [/.#Bitwise] - [/.#Conversion] - [/.#Array] - [/.#Object] - [/.#Local] - [/.#Stack] - [/.#Comparison]) +... {/.#ATHROW} +... [mapping {/.#ATHROW}] +... )) + +... (def: (relabel_control [mapping instruction]) +... (Re_labeler /.Control) +... (case instruction +... (^template [ ] +... [{ instruction} +... (let [[mapping instruction] ( [mapping instruction])] +... [mapping { instruction}])]) +... ([/.#GOTO ..relabel] +... [/.#Branching ..relabel_branching] +... [/.#Exception ..relabel_exception]) + +... (^template [] +... [{ instruction} +... [mapping { instruction}]]) +... ([/.#Concurrency] [/.#Return]) +... )) + +... (def: (relabel_instruction [mapping instruction]) +... (Re_labeler (/.Instruction Inst)) +... (case instruction +... {/.#Embedded embedded} +... [mapping {/.#Embedded embedded}] + +... {/.#NOP} +... [mapping {/.#NOP}] + +... (^template [] +... [{ instruction} +... [mapping { instruction}]]) +... ([/.#Constant] +... [/.#Arithmetic] +... [/.#Bitwise] +... [/.#Conversion] +... [/.#Array] +... [/.#Object] +... [/.#Local] +... [/.#Stack] +... [/.#Comparison]) - {/.#Control instruction} - (let [[mapping instruction] (..relabel_control [mapping instruction])] - [mapping {/.#Control instruction}]))) - -(def: (relabel_bytecode [mapping bytecode]) - (Re_labeler (/.Bytecode Inst)) - (sequence#mix (function (_ input [mapping output]) - (let [[mapping input'] (..relabel_instruction [mapping input])] - [mapping (sequence.suffix input' output)])) - [mapping (sequence.sequence)] - bytecode)) - -(def: fresh - Mapping - (dictionary.empty nat.hash)) - -(def: bytecode - (-> (/.Bytecode Inst /.Label) jvm.Inst) - (|>> [..fresh] - ..relabel_bytecode - product.right - (sequence#each ..instruction) - sequence.list - _.fuse)) - -(with_expansions [ (as_is jvm.Anchor) - (as_is Inst) - (as_is jvm.Definition) - (as_is )] - (type: Handler' - ... (generation.Handler jvm.Anchor (/.Bytecode Inst /.Label) jvm.Definition) - (-> extension.Name - (phase.Phase [(extension.Bundle ) - (generation.State )] - Synthesis - ) - (phase.Phase [(extension.Bundle ) - (generation.State )] - (List Synthesis) - (/.Bytecode Inst /.Label))))) - -(def: (true_handler extender pseudo) - (-> jvm.Extender Any jvm.Handler) - (function (_ extension_name phase archive inputs) - (# phase.monad each - (|>> (:as (/.Bytecode Inst /.Label)) ..bytecode) - ((extender pseudo) extension_name phase archive inputs)))) - -(type: Phase (directive.Phase jvm.Anchor jvm.Inst jvm.Definition)) -(type: Operation (directive.Operation jvm.Anchor jvm.Inst jvm.Definition)) -(type: Handler (directive.Handler jvm.Anchor jvm.Inst jvm.Definition)) - -(def: (def::generation extender) - (-> jvm.Extender ..Handler) - (function (handler extension_name phase archive inputsC+) - (case inputsC+ - (^ (list nameC valueC)) - (do phase.monad - [[_ _ name] (lux/.evaluate! archive Text nameC) - [_ handlerV] (lux/.generator archive (:as Text name) ..Handler' valueC) - _ (|> handlerV - (..true_handler extender) - (extension.install extender (:as Text name)) - directive.lifted_generation) - _ (directive.lifted_generation - (generation.log! (format "Generation " (%.text (:as Text name)))))] - (in directive.no_requirements)) - - _ - (phase.except extension.invalid_syntax [extension_name %.code inputsC+])))) +... {/.#Control instruction} +... (let [[mapping instruction] (..relabel_control [mapping instruction])] +... [mapping {/.#Control instruction}]))) + +... (def: (relabel_bytecode [mapping bytecode]) +... (Re_labeler (/.Bytecode Inst)) +... (sequence#mix (function (_ input [mapping output]) +... (let [[mapping input'] (..relabel_instruction [mapping input])] +... [mapping (sequence.suffix input' output)])) +... [mapping (sequence.sequence)] +... bytecode)) + +... (def: fresh +... Mapping +... (dictionary.empty nat.hash)) + +... (def: bytecode +... (-> (/.Bytecode Inst /.Label) jvm.Inst) +... (|>> [..fresh] +... ..relabel_bytecode +... product.right +... (sequence#each ..instruction) +... sequence.list +... _.fuse)) + +... (with_expansions [ (as_is jvm.Anchor) +... (as_is Inst) +... (as_is jvm.Definition) +... (as_is )] +... (type: Handler' +... ... (generation.Handler jvm.Anchor (/.Bytecode Inst /.Label) jvm.Definition) +... (-> extension.Name +... (phase.Phase [(extension.Bundle ) +... (generation.State )] +... Synthesis +... ) +... (phase.Phase [(extension.Bundle ) +... (generation.State )] +... (List Synthesis) +... (/.Bytecode Inst /.Label))))) + +... (def: (true_handler extender pseudo) +... (-> jvm.Extender Any jvm.Handler) +... (function (_ extension_name phase archive inputs) +... (# phase.monad each +... (|>> (:as (/.Bytecode Inst /.Label)) ..bytecode) +... ((extender pseudo) extension_name phase archive inputs)))) + +... (type: Phase (directive.Phase jvm.Anchor jvm.Inst jvm.Definition)) +... (type: Operation (directive.Operation jvm.Anchor jvm.Inst jvm.Definition)) +... (type: Handler (directive.Handler jvm.Anchor jvm.Inst jvm.Definition)) + +... (def: (def::generation extender) +... (-> jvm.Extender ..Handler) +... (function (handler extension_name phase archive inputsC+) +... (case inputsC+ +... (^ (list nameC valueC)) +... (do phase.monad +... [[_ _ name] (lux/.evaluate! archive Text nameC) +... [_ handlerV] (lux/.generator archive (:as Text name) ..Handler' valueC) +... _ (|> handlerV +... (..true_handler extender) +... (extension.install extender (:as Text name)) +... directive.lifted_generation) +... _ (directive.lifted_generation +... (generation.log! (format "Generation " (%.text (:as Text name)))))] +... (in directive.no_requirements)) + +... _ +... (phase.except extension.invalid_syntax [extension_name %.code inputsC+])))) (def: .public (custom [parser handler]) (All (_ i) @@ -729,7 +729,7 @@ (def: (method_dependencies archive method) (-> Archive (Method Synthesis) (generation.Operation jvm.Anchor jvm.Inst jvm.Definition - (Set artifact.Dependency))) + (Set unit.ID))) (case method {#Constructor [privacy strict_floating_point? annotations variables exceptions self arguments constructor_arguments @@ -753,7 +753,7 @@ (cache.dependencies archive body) {#Abstract _} - (# phase.monad in artifact.no_dependencies))) + (# phase.monad in unit.none))) (def: constructor (Parser (Constructor Code)) @@ -1201,7 +1201,7 @@ (# ! each (|>> [typeJ]) (synthesise archive termA))) constructor_argumentsA) - bodyS (synthesise archive {analysis.#Function (list) (//A.hide_method_body (list.size arguments) bodyA)})] + bodyS (synthesise archive {analysis.#Function (list) (//A.hidden_method_body (list.size arguments) bodyA)})] (in [privacy strict_floating_point? annotations method_tvars exceptions self arguments constructor_argumentsS (case bodyS @@ -1220,7 +1220,7 @@ synthesise directive.synthesis] (directive.lifted_synthesis (do ! - [bodyS (synthesise archive {analysis.#Function (list) (//A.hide_method_body (list.size arguments) bodyA)})] + [bodyS (synthesise archive {analysis.#Function (list) (//A.hidden_method_body (list.size arguments) bodyA)})] (in [[super_name super_tvars] method_name strict_floating_point? annotations method_tvars self arguments returnJ exceptionsJ (case bodyS @@ -1239,7 +1239,7 @@ synthesise directive.synthesis] (directive.lifted_synthesis (do ! - [bodyS (synthesise archive {analysis.#Function (list) (//A.hide_method_body (list.size arguments) bodyA)})] + [bodyS (synthesise archive {analysis.#Function (list) (//A.hidden_method_body (list.size arguments) bodyA)})] (in [name privacy final? strict_floating_point? annotations method_tvars self arguments returnJ exceptionsJ (case bodyS @@ -1258,7 +1258,7 @@ synthesise directive.synthesis] (directive.lifted_synthesis (do ! - [bodyS (synthesise archive {analysis.#Function (list) (//A.hide_method_body (list.size arguments) bodyA)})] + [bodyS (synthesise archive {analysis.#Function (list) (//A.hidden_method_body (list.size arguments) bodyA)})] (in [name privacy strict_floating_point? annotations method_tvars arguments returnJ exceptionsJ (case bodyS @@ -1507,7 +1507,7 @@ def.fuse))]]] (directive.lifted_generation (do ! - [artifact_id (generation.learn_custom class_name artifact.no_dependencies) + [artifact_id (generation.learn_custom class_name unit.none) _ (generation.execute! directive) _ (generation.save! artifact_id {.#Some class_name} directive) _ (generation.log! (format "JVM Interface " (%.text class_name)))] @@ -1516,6 +1516,6 @@ (def: .public (bundle class_loader extender) (-> java/lang/ClassLoader jvm.Extender (directive.Bundle jvm.Anchor jvm.Inst jvm.Definition)) (|> bundle.empty - (dictionary.has "lux def generation" (..def::generation extender)) + ... (dictionary.has "lux def generation" (..def::generation extender)) (dictionary.has "jvm class" (..jvm::class class_loader)) (dictionary.has "jvm class interface" ..jvm::class::interface))) diff --git a/lux-jvm/source/luxc/lang/translation/jvm.lux b/lux-jvm/source/luxc/lang/translation/jvm.lux index c2f7cea68..e2bd46f5d 100644 --- a/lux-jvm/source/luxc/lang/translation/jvm.lux +++ b/lux-jvm/source/luxc/lang/translation/jvm.lux @@ -1,44 +1,45 @@ (.using - [library - [lux {"-" Definition} - ["[0]" ffi {"+" import: do_to object}] - [abstract - [monad {"+" do}]] - [control - pipe - ["[0]" maybe] - ["[0]" try {"+" Try}] - ["[0]" exception {"+" exception:}] - ["[0]" io {"+" IO io}] - [concurrency - ["[0]" atom {"+" Atom atom}]]] - [data - [binary {"+" Binary}] - ["[0]" product] - ["[0]" text ("[1]@[0]" hash) - ["%" format {"+" format}]] - [collection - ["[0]" array] - ["[0]" dictionary {"+" Dictionary}]]] - [target - [jvm - ["[0]" loader {"+" Library}] - ["[0]" type - ["[0]" descriptor]]]] - [tool - [compiler - [language - [lux - ["[0]" version] - ["[0]" generation]]] - [meta - [io {"+" lux_context}]]]]]] - [/// - [host - ["[0]" jvm {"+" Inst Definition Host State} - ["[0]" def] - ["[0]" inst]]]] - ) + [library + [lux {"-" Definition} + ["[0]" ffi {"+" import: do_to object}] + [abstract + [monad {"+" do}]] + [control + pipe + ["[0]" maybe] + ["[0]" try {"+" Try}] + ["[0]" exception {"+" exception:}] + ["[0]" io {"+" IO io}] + [concurrency + ["[0]" atom {"+" Atom atom}]]] + [data + [binary {"+" Binary}] + ["[0]" product] + ["[0]" text ("[1]@[0]" hash) + ["%" format {"+" format}]] + [collection + ["[0]" array] + ["[0]" dictionary {"+" Dictionary}]]] + [target + [jvm + ["[0]" loader {"+" Library}] + ["[0]" type + ["[0]" descriptor]]]] + [tool + [compiler + [language + [lux + ["[0]" version]]] + [meta + [io {"+" lux_context}] + [archive + ["[0]" unit]]]]]]] + [/// + [host + ["[0]" jvm {"+" Inst Definition Host State} + ["[0]" def] + ["[0]" inst]]]] + ) (import: java/lang/reflect/Field ["[1]::[0]" @@ -103,7 +104,7 @@ (text.replaced ..class_path_separator .module_separator)) (def: .public (class_name [module_id artifact_id]) - (-> generation.Context Text) + (-> unit.ID Text) (format lux_context ..class_path_separator (%.nat version.version) ..class_path_separator (%.nat module_id) @@ -146,7 +147,7 @@ (loader.load class_name loader)))) (def: (define! library loader context custom valueI) - (-> Library java/lang/ClassLoader generation.Context (Maybe Text) Inst (Try [Text Any Definition])) + (-> Library java/lang/ClassLoader unit.ID (Maybe Text) Inst (Try [Text Any Definition])) (do try.monad [[value definition] (evaluate! library loader (..class_name context) valueI)] (in [(maybe.else (..class_name context) diff --git a/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux b/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux index 28a5c34bc..ee6f243f2 100644 --- a/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux +++ b/lux-jvm/source/luxc/lang/translation/jvm/extension/host.lux @@ -40,7 +40,7 @@ ["[0]" variable {"+" Variable Register}]] [meta [archive {"+" Archive} - ["[0]" artifact]] + ["[0]" unit]] ["[0]" cache "_" ["[1]" artifact]]] [language @@ -1127,7 +1127,7 @@ (unwrap_primitive _.DRETURN type.double))))))) (def: (method_dependencies archive method) - (-> Archive (/.Overriden_Method Synthesis) (Operation (Set artifact.Dependency))) + (-> Archive (/.Overriden_Method Synthesis) (Operation (Set unit.ID))) (let [[_super _name _strict_fp? _annotations _t_vars _this _arguments _return _exceptions bodyS] method] diff --git a/lux-jvm/source/luxc/lang/translation/jvm/function.lux b/lux-jvm/source/luxc/lang/translation/jvm/function.lux index 2eb1894da..6c0e29730 100644 --- a/lux-jvm/source/luxc/lang/translation/jvm/function.lux +++ b/lux-jvm/source/luxc/lang/translation/jvm/function.lux @@ -31,9 +31,10 @@ [lux [analysis {"+" Environment}] [synthesis {"+" Synthesis Abstraction Apply}] - ["[0]" generation {"+" Context}]]] + ["[0]" generation]]] [meta - [archive {"+" Archive}] + [archive {"+" Archive} + ["[0]" unit]] ["[0]" cache "_" ["[1]" artifact]]]]]]] [luxc @@ -306,7 +307,7 @@ (in [functionD instanceI])))) (def: .public (function' forced_context generate archive [env arity bodyS]) - (-> (Maybe Context) (Generator Abstraction)) + (-> (Maybe unit.ID) (Generator Abstraction)) (do [! phase.monad] [@begin _.make_label dependencies (cache.dependencies archive bodyS) diff --git a/lux-jvm/source/luxc/lang/translation/jvm/program.lux b/lux-jvm/source/luxc/lang/translation/jvm/program.lux index 7e408ecc4..4efe0fd3d 100644 --- a/lux-jvm/source/luxc/lang/translation/jvm/program.lux +++ b/lux-jvm/source/luxc/lang/translation/jvm/program.lux @@ -1,32 +1,34 @@ (.using - [library - [lux "*" - [data - [text - ["%" format {"+" format}]]] - [target - [jvm - ["$t" type]]] - [tool - [compiler - [language - [lux - [generation {"+" Context}] - [program {"+" Program}]]]]]]] - [luxc - [lang - [host - ["_" jvm - ["$d" def] - ["$i" inst]]] - [translation - ["[0]" jvm - ["[0]" runtime]]]]]) + [library + [lux "*" + [data + [text + ["%" format {"+" format}]]] + [target + [jvm + ["$t" type]]] + [tool + [compiler + [language + [lux + [program {"+" Program}]]] + [meta + [archive + ["[0]" unit]]]]]]] + [luxc + [lang + [host + ["_" jvm + ["$d" def] + ["$i" inst]]] + [translation + ["[0]" jvm + ["[0]" runtime]]]]]) (def: ^Object ($t.class "java.lang.Object" (list))) (def: .public (program artifact_name context programI) - (-> (-> Context Text) (Program _.Inst _.Definition)) + (-> (-> unit.ID Text) (Program _.Inst _.Definition)) (let [nilI runtime.noneI num_inputsI (|>> ($i.ALOAD 0) $i.ARRAYLENGTH) --I (|>> ($i.int +1) $i.ISUB) diff --git a/lux-jvm/source/luxc/lang/translation/jvm/runtime.lux b/lux-jvm/source/luxc/lang/translation/jvm/runtime.lux index cec04d529..ee3e16ed8 100644 --- a/lux-jvm/source/luxc/lang/translation/jvm/runtime.lux +++ b/lux-jvm/source/luxc/lang/translation/jvm/runtime.lux @@ -1,45 +1,46 @@ (.using - [library - [lux {"-" Type Label Primitive try} - [abstract - [monad {"+" do}] - ["[0]" enum]] - [data - [binary {"+" Binary}] - ["[0]" product] - [text - ["%" format {"+" format}]] - [collection - ["[0]" list ("[1]@[0]" functor)] - ["[0]" sequence] - ["[0]" set]]] - ["[0]" math - [number - ["n" nat]]] - [target - [jvm - ["[0]" type {"+" Type} - ["[0]" category {"+" Void Value' Value Return' Return Primitive Object Class Array Var Parameter Method}] - ["[0]" reflection]]]] - [tool - [compiler - [arity {"+" Arity}] - ["[0]" phase] - [language - [lux - ["[0]" synthesis] - ["[0]" generation]]] - [meta - [archive {"+" Output} - ["[0]" artifact] - ["[0]" registry {"+" Registry}]]]]]]] - [luxc - [lang - [host - ["$" jvm {"+" Label Inst Def Operation} - ["$d" def] - ["_" inst]]]]] - ["[0]" // {"+" ByteCode}]) + [library + [lux {"-" Type Label Primitive try} + [abstract + [monad {"+" do}] + ["[0]" enum]] + [data + [binary {"+" Binary}] + ["[0]" product] + [text + ["%" format {"+" format}]] + [collection + ["[0]" list ("[1]@[0]" functor)] + ["[0]" sequence] + ["[0]" set]]] + ["[0]" math + [number + ["n" nat]]] + [target + [jvm + ["[0]" type {"+" Type} + ["[0]" category {"+" Void Value' Value Return' Return Primitive Object Class Array Var Parameter Method}] + ["[0]" reflection]]]] + [tool + [compiler + [arity {"+" Arity}] + ["[0]" phase] + [language + [lux + ["[0]" synthesis] + ["[0]" generation]]] + [meta + [archive {"+" Output} + ["[0]" artifact] + ["[0]" registry {"+" Registry}] + ["[0]" unit]]]]]]] + [luxc + [lang + [host + ["$" jvm {"+" Label Inst Def Operation} + ["$d" def] + ["_" inst]]]]] + ["[0]" // {"+" ByteCode}]) (def: $Text (type.class "java.lang.String" (list))) (def: .public $Lefts type.int) @@ -414,9 +415,9 @@ ... function_payload ..translate_function ] (in [(|> registry.empty - (registry.resource true artifact.no_dependencies) + (registry.resource true unit.none) product.right - ... (registry.resource true artifact.no_dependencies) + ... (registry.resource true unit.none) ... product.right ) (sequence.sequence runtime_payload -- cgit v1.2.3