diff options
Diffstat (limited to '')
| -rw-r--r-- | new-luxc/source/luxc/generator/host/jvm.lux | 8 | ||||
| -rw-r--r-- | new-luxc/source/luxc/generator/host/jvm/def.lux | 17 | ||||
| -rw-r--r-- | new-luxc/source/luxc/generator/host/jvm/inst.lux | 2 | 
3 files changed, 19 insertions, 8 deletions
| diff --git a/new-luxc/source/luxc/generator/host/jvm.lux b/new-luxc/source/luxc/generator/host/jvm.lux index 4b4b1d38e..149fbf123 100644 --- a/new-luxc/source/luxc/generator/host/jvm.lux +++ b/new-luxc/source/luxc/generator/host/jvm.lux @@ -117,10 +117,14 @@  ## Configs  (config: Class-Config  noneC ++C [finalC]) -(config: Method-Config noneM ++M [staticM finalM synchronizedM]) -(config: Field-Config  noneF ++F [staticF finalF transientF volatileF]) +(config: Method-Config noneM ++M [finalM staticM synchronizedM strictM]) +(config: Field-Config  noneF ++F [finalF staticF transientF volatileF])  ## Labels  (def: #export new-label    (-> Unit Label)    org.objectweb.asm.Label.new) + +(def: #export (simple-class name) +  (-> Text Class) +  [name (list)]) diff --git a/new-luxc/source/luxc/generator/host/jvm/def.lux b/new-luxc/source/luxc/generator/host/jvm/def.lux index bb1d2cd94..18cd4f945 100644 --- a/new-luxc/source/luxc/generator/host/jvm/def.lux +++ b/new-luxc/source/luxc/generator/host/jvm/def.lux @@ -50,6 +50,7 @@  (host;import org.objectweb.asm.ClassWriter    (#static COMPUTE_MAXS int) +  (#static COMPUTE_FRAMES int)    (new [int])    (visit [int int String String String (Array String)] void)    (visitEnd [] void) @@ -100,10 +101,10 @@  (def: (method-flags config)    (-> $;Method-Config Int)    ($_ i.+ -      Opcodes.ACC_STRICT        (if (get@ #$;staticM config) Opcodes.ACC_STATIC 0)        (if (get@ #$;finalM config) Opcodes.ACC_FINAL 0) -      (if (get@ #$;synchronizedM config) Opcodes.ACC_SYNCHRONIZED 0))) +      (if (get@ #$;synchronizedM config) Opcodes.ACC_SYNCHRONIZED 0) +      (if (get@ #$;strictM config) Opcodes.ACC_STRICT 0)))  (def: (field-flags config)    (-> $;Field-Config Int) @@ -145,12 +146,18 @@                  (L/map (|>. class-to-type $t;signature))                  (text;join-with ""))))) +(def: class-computes +  Int +  ($_ i.+ +      ClassWriter.COMPUTE_MAXS +      ClassWriter.COMPUTE_FRAMES)) +  (do-template [<name> <flag>]    [(def: #export (<name> version visibility config name parameters super interfaces                           definitions)       (-> $;Version $;Visibility $;Class-Config Text (List $;Parameter) $;Class (List $;Class) $;Def           host;Byte-Array) -     (let [writer (|> (do-to (ClassWriter.new ClassWriter.COMPUTE_MAXS) +     (let [writer (|> (do-to (ClassWriter.new class-computes)                          (ClassWriter.visit [(version-flag version)                                              ($_ i.+                                                  Opcodes.ACC_SUPER @@ -177,7 +184,7 @@                           definitions)    (-> $;Version $;Visibility $;Class-Config Text (List $;Parameter) (List $;Class) $;Def        host;Byte-Array) -  (let [writer (|> (do-to (ClassWriter.new ClassWriter.COMPUTE_MAXS) +  (let [writer (|> (do-to (ClassWriter.new class-computes)                       (ClassWriter.visit [(version-flag version)                                           ($_ i.+                                               Opcodes.ACC_SUPER @@ -277,4 +284,4 @@      singleton      (#;Cons head tail) -    (. head (fuse tail)))) +    (. (fuse tail) head))) diff --git a/new-luxc/source/luxc/generator/host/jvm/inst.lux b/new-luxc/source/luxc/generator/host/jvm/inst.lux index 0f947925c..02027294a 100644 --- a/new-luxc/source/luxc/generator/host/jvm/inst.lux +++ b/new-luxc/source/luxc/generator/host/jvm/inst.lux @@ -353,4 +353,4 @@      singleton      (#;Cons head tail) -    (. head (fuse tail)))) +    (. (fuse tail) head))) | 
