public class com.oracle.truffle.object.dsl.processor.LayoutParser
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: com.oracle.truffle.object.dsl.processor.LayoutParser
  super_class: java.lang.Object
{
  private final com.oracle.truffle.object.dsl.processor.LayoutProcessor processor;
    descriptor: Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private javax.lang.model.type.TypeMirror objectTypeSuperclass;
    descriptor: Ljavax/lang/model/type/TypeMirror;
    flags: (0x0002) ACC_PRIVATE

  private com.oracle.truffle.object.dsl.processor.model.LayoutModel superLayout;
    descriptor: Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String name;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String packageName;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private java.lang.String interfaceFullName;
    descriptor: Ljava/lang/String;
    flags: (0x0002) ACC_PRIVATE

  private boolean hasObjectTypeGuard;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean hasObjectGuard;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean hasDynamicObjectGuard;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean hasShapeProperties;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean hasCreate;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private boolean hasBuilder;
    descriptor: Z
    flags: (0x0002) ACC_PRIVATE

  private final java.util.List<java.lang.String> constructorProperties;
    descriptor: Ljava/util/List;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/List<Ljava/lang/String;>;

  private final java.util.Map<java.lang.String, com.oracle.truffle.object.dsl.processor.model.PropertyBuilder> properties;
    descriptor: Ljava/util/Map;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/Map<Ljava/lang/String;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;>;

  private java.util.List<javax.lang.model.element.VariableElement> implicitCasts;
    descriptor: Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Signature: Ljava/util/List<Ljavax/lang/model/element/VariableElement;>;

  private final com.oracle.truffle.dsl.processor.TruffleTypes types;
    descriptor: Lcom/oracle/truffle/dsl/processor/TruffleTypes;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private javax.lang.model.type.TypeMirror dispatch;
    descriptor: Ljavax/lang/model/type/TypeMirror;
    flags: (0x0002) ACC_PRIVATE

  public void <init>(com.oracle.truffle.object.dsl.processor.LayoutProcessor);
    descriptor: (Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // com.oracle.truffle.object.dsl.processor.LayoutProcessor processor
         0: .line 86
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 80
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.constructorProperties:Ljava/util/List;
         2: .line 81
            aload 0 /* this */
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.properties:Ljava/util/Map;
         3: .line 82
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.implicitCasts:Ljava/util/List;
         4: .line 83
            aload 0 /* this */
            invokestatic com.oracle.truffle.dsl.processor.ProcessorContext.getInstance:()Lcom/oracle/truffle/dsl/processor/ProcessorContext;
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.getTypes:()Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
         5: .line 87
            aload 0 /* this */
            aload 1 /* processor */
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
         6: .line 88
            return
        end local 1 // com.oracle.truffle.object.dsl.processor.LayoutProcessor processor
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    7     0       this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    7     1  processor  Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
    MethodParameters:
           Name  Flags
      processor  

  public void parse(javax.lang.model.element.TypeElement);
    descriptor: (Ljavax/lang/model/element/TypeElement;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=5, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.TypeElement layoutElement
         0: .line 91
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getKind:()Ljavax/lang/model/element/ElementKind;
            getstatic javax.lang.model.element.ElementKind.INTERFACE:Ljavax/lang/model/element/ElementKind;
            if_acmpeq 2
         1: .line 92
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* layoutElement */
            ldc "@Layout should only be applied to interfaces"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 95
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* layoutElement */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseName:(Ljavax/lang/model/element/TypeElement;)V
         3: .line 97
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getInterfaces:()Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifne 8
         4: .line 98
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getInterfaces:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_1
            if_icmple 6
         5: .line 99
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* layoutElement */
            ldc "@Layout interfaces can have at most one super-interface"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         6: .line 102
      StackMap locals:
      StackMap stack:
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getInterfaces:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.type.DeclaredType
            astore 2 /* superInterface */
        start local 2 // javax.lang.model.type.DeclaredType superInterface
         7: .line 103
            aload 0 /* this */
            aload 2 /* superInterface */
            invokeinterface javax.lang.model.type.DeclaredType.asElement:()Ljavax/lang/model/element/Element;
            checkcast javax.lang.model.element.TypeElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseSuperLayout:(Ljavax/lang/model/element/TypeElement;)V
        end local 2 // javax.lang.model.type.DeclaredType superInterface
         8: .line 106
      StackMap locals:
      StackMap stack:
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getAnnotationMirrors:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 19
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement top java.util.Iterator
      StackMap stack:
         9: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.lang.model.element.AnnotationMirror
            astore 2 /* annotationMirror */
        start local 2 // javax.lang.model.element.AnnotationMirror annotationMirror
        10: .line 107
            aload 0 /* this */
            aload 2 /* annotationMirror */
            invokeinterface javax.lang.model.element.AnnotationMirror.getAnnotationType:()Ljavax/lang/model/type/DeclaredType;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.Layout:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 19
        11: .line 108
            aload 0 /* this */
            ldc Ljavax/lang/model/type/TypeMirror;
            aload 2 /* annotationMirror */
            ldc "objectTypeSuperclass"
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getAnnotationValue:(Ljava/lang/Class;Ljavax/lang/model/element/AnnotationMirror;Ljava/lang/String;)Ljava/lang/Object;
            checkcast javax.lang.model.type.TypeMirror
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.objectTypeSuperclass:Ljavax/lang/model/type/TypeMirror;
        12: .line 110
            ldc Ljava/lang/Boolean;
            aload 2 /* annotationMirror */
            ldc "implicitCastIntToLong"
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getAnnotationValue:(Ljava/lang/Class;Ljavax/lang/model/element/AnnotationMirror;Ljava/lang/String;)Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 15
        13: .line 111
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.Layout_ImplicitCast:Ljavax/lang/model/type/DeclaredType;
            ldc "IntToLong"
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.findVariableElement:(Ljavax/lang/model/type/DeclaredType;Ljava/lang/String;)Ljavax/lang/model/element/VariableElement;
            astore 4 /* var */
        start local 4 // javax.lang.model.element.VariableElement var
        14: .line 112
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.implicitCasts:Ljava/util/List;
            aload 4 /* var */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // javax.lang.model.element.VariableElement var
        15: .line 115
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement javax.lang.model.element.AnnotationMirror java.util.Iterator
      StackMap stack:
            ldc Ljava/lang/Boolean;
            aload 2 /* annotationMirror */
            ldc "implicitCastIntToDouble"
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getAnnotationValue:(Ljava/lang/Class;Ljavax/lang/model/element/AnnotationMirror;Ljava/lang/String;)Ljava/lang/Object;
            checkcast java.lang.Boolean
            invokevirtual java.lang.Boolean.booleanValue:()Z
            ifeq 18
        16: .line 116
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.Layout_ImplicitCast:Ljavax/lang/model/type/DeclaredType;
            ldc "IntToDouble"
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.findVariableElement:(Ljavax/lang/model/type/DeclaredType;Ljava/lang/String;)Ljavax/lang/model/element/VariableElement;
            astore 4 /* var */
        start local 4 // javax.lang.model.element.VariableElement var
        17: .line 117
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.implicitCasts:Ljava/util/List;
            aload 4 /* var */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 4 // javax.lang.model.element.VariableElement var
        18: .line 120
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            ldc Ljavax/lang/model/type/TypeMirror;
            aload 2 /* annotationMirror */
            ldc "dispatch"
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getAnnotationValue:(Ljava/lang/Class;Ljavax/lang/model/element/AnnotationMirror;Ljava/lang/String;)Ljava/lang/Object;
            checkcast javax.lang.model.type.TypeMirror
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.dispatch:Ljavax/lang/model/type/TypeMirror;
        end local 2 // javax.lang.model.element.AnnotationMirror annotationMirror
        19: .line 106
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 9
        20: .line 124
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.superLayout:Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
            ifnull 22
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.implicitCasts:Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifne 22
        21: .line 125
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* layoutElement */
            ldc "@Layout implicit casts need to be specified in the base layout"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        22: .line 128
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement
      StackMap stack:
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getEnclosedElements:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 30
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement top java.util.Iterator
      StackMap stack:
        23: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.lang.model.element.Element
            astore 2 /* element */
        start local 2 // javax.lang.model.element.Element element
        24: .line 129
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getKind:()Ljavax/lang/model/element/ElementKind;
            getstatic javax.lang.model.element.ElementKind.FIELD:Ljavax/lang/model/element/ElementKind;
            if_acmpne 30
        25: .line 130
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 4 /* simpleName */
        start local 4 // java.lang.String simpleName
        26: .line 132
            aload 4 /* simpleName */
            ldc "_IDENTIFIER"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifeq 29
        27: .line 133
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.VariableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseIdentifier:(Ljavax/lang/model/element/VariableElement;)V
        28: .line 134
            goto 30
        29: .line 135
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement javax.lang.model.element.Element java.util.Iterator java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 2 /* element */
            ldc "@Layout interface fields should only be identifier fields, ending with _IDENTIFIER"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        end local 4 // java.lang.String simpleName
        end local 2 // javax.lang.model.element.Element element
        30: .line 128
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 23
        31: .line 140
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getEnclosedElements:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 37
      StackMap locals:
      StackMap stack:
        32: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.lang.model.element.Element
            astore 2 /* element */
        start local 2 // javax.lang.model.element.Element element
        33: .line 141
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getKind:()Ljavax/lang/model/element/ElementKind;
            getstatic javax.lang.model.element.ElementKind.METHOD:Ljavax/lang/model/element/ElementKind;
            if_acmpne 37
        34: .line 142
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 4 /* simpleName */
        start local 4 // java.lang.String simpleName
        35: .line 144
            aload 4 /* simpleName */
            new java.lang.StringBuilder
            dup
            ldc "create"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.name:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "Shape"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 37
        36: .line 145
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseShapeConstructor:(Ljavax/lang/model/element/ExecutableElement;)V
        end local 4 // java.lang.String simpleName
        end local 2 // javax.lang.model.element.Element element
        37: .line 140
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 32
        38: .line 150
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getEnclosedElements:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 65
      StackMap locals:
      StackMap stack:
        39: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.lang.model.element.Element
            astore 2 /* element */
        start local 2 // javax.lang.model.element.Element element
        40: .line 151
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getKind:()Ljavax/lang/model/element/ElementKind;
            getstatic javax.lang.model.element.ElementKind.METHOD:Ljavax/lang/model/element/ElementKind;
            if_acmpne 65
        41: .line 152
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 4 /* simpleName */
        start local 4 // java.lang.String simpleName
        42: .line 154
            aload 4 /* simpleName */
            new java.lang.StringBuilder
            dup
            ldc "create"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.name:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            ldc "Shape"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 65
        43: .line 156
            aload 4 /* simpleName */
            new java.lang.StringBuilder
            dup
            ldc "create"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.name:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 46
        44: .line 157
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseConstructor:(Ljavax/lang/model/element/ExecutableElement;)V
        45: .line 158
            goto 65
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement javax.lang.model.element.Element java.util.Iterator java.lang.String
      StackMap stack:
        46: aload 4 /* simpleName */
            ldc "build"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 49
        47: .line 159
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseBuilder:(Ljavax/lang/model/element/ExecutableElement;)V
        48: .line 160
            goto 65
      StackMap locals:
      StackMap stack:
        49: aload 4 /* simpleName */
            new java.lang.StringBuilder
            dup
            ldc "is"
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.name:Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 52
        50: .line 161
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseGuard:(Ljavax/lang/model/element/ExecutableElement;)V
        51: .line 162
            goto 65
      StackMap locals:
      StackMap stack:
        52: aload 4 /* simpleName */
            ldc "getAndSet"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 55
        53: .line 163
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseGetAndSet:(Ljavax/lang/model/element/ExecutableElement;)V
        54: .line 164
            goto 65
      StackMap locals:
      StackMap stack:
        55: aload 4 /* simpleName */
            ldc "compareAndSet"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 58
        56: .line 165
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseCompareAndSet:(Ljavax/lang/model/element/ExecutableElement;)V
        57: .line 166
            goto 65
      StackMap locals:
      StackMap stack:
        58: aload 4 /* simpleName */
            ldc "get"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 61
        59: .line 167
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseGetter:(Ljavax/lang/model/element/ExecutableElement;)V
        60: .line 168
            goto 65
      StackMap locals:
      StackMap stack:
        61: aload 4 /* simpleName */
            ldc "set"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 64
        62: .line 169
            aload 0 /* this */
            aload 2 /* element */
            checkcast javax.lang.model.element.ExecutableElement
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseSetter:(Ljavax/lang/model/element/ExecutableElement;)V
        63: .line 170
            goto 65
        64: .line 171
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 2 /* element */
            ldc "Unknown method prefix in @Layout interface - wouldn't know how to implement this method"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        end local 4 // java.lang.String simpleName
        end local 2 // javax.lang.model.element.Element element
        65: .line 150
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.TypeElement top java.util.Iterator
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 39
        66: .line 176
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getEnclosedElements:()Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 70
      StackMap locals:
      StackMap stack:
        67: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.lang.model.element.Element
            astore 2 /* element */
        start local 2 // javax.lang.model.element.Element element
        68: .line 177
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getKind:()Ljavax/lang/model/element/ElementKind;
            getstatic javax.lang.model.element.ElementKind.FIELD:Ljavax/lang/model/element/ElementKind;
            if_acmpeq 70
            aload 2 /* element */
            invokeinterface javax.lang.model.element.Element.getKind:()Ljavax/lang/model/element/ElementKind;
            getstatic javax.lang.model.element.ElementKind.METHOD:Ljavax/lang/model/element/ElementKind;
            if_acmpeq 70
        69: .line 178
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 2 /* element */
            ldc "@Layout interfaces can only contain fields and methods"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        end local 2 // javax.lang.model.element.Element element
        70: .line 176
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 67
        71: .line 181
            return
        end local 1 // javax.lang.model.element.TypeElement layoutElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0   72     0              this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   72     1     layoutElement  Ljavax/lang/model/element/TypeElement;
            7    8     2    superInterface  Ljavax/lang/model/type/DeclaredType;
           10   19     2  annotationMirror  Ljavax/lang/model/element/AnnotationMirror;
           14   15     4               var  Ljavax/lang/model/element/VariableElement;
           17   18     4               var  Ljavax/lang/model/element/VariableElement;
           24   30     2           element  Ljavax/lang/model/element/Element;
           26   30     4        simpleName  Ljava/lang/String;
           33   37     2           element  Ljavax/lang/model/element/Element;
           35   37     4        simpleName  Ljava/lang/String;
           40   65     2           element  Ljavax/lang/model/element/Element;
           42   65     4        simpleName  Ljava/lang/String;
           68   70     2           element  Ljavax/lang/model/element/Element;
    MethodParameters:
               Name  Flags
      layoutElement  

  private void parseName(javax.lang.model.element.TypeElement);
    descriptor: (Ljavax/lang/model/element/TypeElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.TypeElement layoutElement
         0: .line 184
            aload 0 /* this */
            aload 1 /* layoutElement */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parsePackageName:(Ljavax/lang/model/element/TypeElement;)V
         1: .line 185
            aload 0 /* this */
            aload 1 /* layoutElement */
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getQualifiedName:(Ljavax/lang/model/element/TypeElement;)Ljava/lang/String;
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.interfaceFullName:Ljava/lang/String;
         2: .line 186
            aload 1 /* layoutElement */
            invokeinterface javax.lang.model.element.TypeElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 2 /* nameString */
        start local 2 // java.lang.String nameString
         3: .line 188
            aload 2 /* nameString */
            ldc "Layout"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            ifne 5
         4: .line 189
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* layoutElement */
            ldc "@Layout interfaces should have a name ending with -Layout"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         5: .line 192
      StackMap locals: java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 2 /* nameString */
            iconst_0
            aload 2 /* nameString */
            invokevirtual java.lang.String.length:()I
            ldc "Layout"
            invokevirtual java.lang.String.length:()I
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.name:Ljava/lang/String;
         6: .line 193
            return
        end local 2 // java.lang.String nameString
        end local 1 // javax.lang.model.element.TypeElement layoutElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    7     1  layoutElement  Ljavax/lang/model/element/TypeElement;
            3    7     2     nameString  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      layoutElement  

  private void parseSuperLayout(javax.lang.model.element.TypeElement);
    descriptor: (Ljavax/lang/model/element/TypeElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.TypeElement superTypeElement
         0: .line 196
            new com.oracle.truffle.object.dsl.processor.LayoutParser
            dup
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            invokespecial com.oracle.truffle.object.dsl.processor.LayoutParser.<init>:(Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;)V
            astore 2 /* superParser */
        start local 2 // com.oracle.truffle.object.dsl.processor.LayoutParser superParser
         1: .line 197
            aload 2 /* superParser */
            aload 1 /* superTypeElement */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parse:(Ljavax/lang/model/element/TypeElement;)V
         2: .line 198
            aload 0 /* this */
            aload 2 /* superParser */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.build:()Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.superLayout:Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
         3: .line 199
            return
        end local 2 // com.oracle.truffle.object.dsl.processor.LayoutParser superParser
        end local 1 // javax.lang.model.element.TypeElement superTypeElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    4     0              this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    4     1  superTypeElement  Ljavax/lang/model/element/TypeElement;
            1    4     2       superParser  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
    MethodParameters:
                  Name  Flags
      superTypeElement  

  private void parseIdentifier(javax.lang.model.element.VariableElement);
    descriptor: (Ljavax/lang/model/element/VariableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.VariableElement fieldElement
         0: .line 202
            aload 1 /* fieldElement */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 2 /* identifierName */
        start local 2 // java.lang.String identifierName
         1: .line 203
            aload 2 /* identifierName */
            iconst_0
            aload 2 /* identifierName */
            invokevirtual java.lang.String.length:()I
            ldc "_IDENTIFIER"
            invokevirtual java.lang.String.length:()I
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            invokestatic com.oracle.truffle.object.dsl.processor.model.NameUtils.constantToIdentifier:(Ljava/lang/String;)Ljava/lang/String;
            astore 3 /* propertyName */
        start local 3 // java.lang.String propertyName
         2: .line 204
            aload 0 /* this */
            aload 3 /* propertyName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasIdentifier:(Z)V
         3: .line 205
            return
        end local 3 // java.lang.String propertyName
        end local 2 // java.lang.String identifierName
        end local 1 // javax.lang.model.element.VariableElement fieldElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0    4     0            this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    4     1    fieldElement  Ljavax/lang/model/element/VariableElement;
            1    4     2  identifierName  Ljava/lang/String;
            2    4     3    propertyName  Ljava/lang/String;
    MethodParameters:
              Name  Flags
      fieldElement  

  private void parseShapeConstructor(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=7, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 208
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            astore 2 /* parameters */
        start local 2 // java.util.List parameters
         1: .line 209
            aload 2 /* parameters */
            invokeinterface java.util.List.isEmpty:()Z
            ifne 3
         2: .line 210
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasShapeProperties:Z
         3: .line 213
      StackMap locals: java.util.List
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.superLayout:Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
            ifnull 7
         4: .line 214
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.superLayout:Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
            invokevirtual com.oracle.truffle.object.dsl.processor.model.LayoutModel.getAllShapeProperties:()Ljava/util/List;
            astore 3 /* superShapeProperties */
        start local 3 // java.util.List superShapeProperties
         5: .line 215
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 2 /* parameters */
            aload 3 /* superShapeProperties */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.checkSharedParameters:(Ljavax/lang/model/element/Element;Ljava/util/List;Ljava/util/List;)V
         6: .line 216
            aload 2 /* parameters */
            aload 3 /* superShapeProperties */
            invokeinterface java.util.List.size:()I
            aload 2 /* parameters */
            invokeinterface java.util.List.size:()I
            invokeinterface java.util.List.subList:(II)Ljava/util/List;
            astore 2 /* parameters */
        end local 3 // java.util.List superShapeProperties
         7: .line 219
      StackMap locals:
      StackMap stack:
            aload 2 /* parameters */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 4
            goto 15
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.ExecutableElement java.util.List top java.util.Iterator
      StackMap stack:
         8: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 3 /* element */
        start local 3 // javax.lang.model.element.VariableElement element
         9: .line 220
            aload 3 /* element */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 5 /* parameterName */
        start local 5 // java.lang.String parameterName
        10: .line 221
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.constructorProperties:Ljava/util/List;
            aload 5 /* parameterName */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        11: .line 222
            aload 0 /* this */
            aload 5 /* parameterName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            astore 6 /* property */
        start local 6 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        12: .line 223
            aload 0 /* this */
            aload 3 /* element */
            aload 6 /* property */
            aload 3 /* element */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        13: .line 224
            aload 0 /* this */
            aload 6 /* property */
            aload 3 /* element */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseConstructorParameterAnnotations:(Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/element/Element;)V
        14: .line 225
            aload 6 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setIsShapeProperty:(Z)V
        end local 6 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        end local 5 // java.lang.String parameterName
        end local 3 // javax.lang.model.element.VariableElement element
        15: .line 219
      StackMap locals:
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        16: .line 227
            return
        end local 2 // java.util.List parameters
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot                  Name  Signature
            0   17     0                  this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   17     1         methodElement  Ljavax/lang/model/element/ExecutableElement;
            1   17     2            parameters  Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;
            5    7     3  superShapeProperties  Ljava/util/List<Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;>;
            9   15     3               element  Ljavax/lang/model/element/VariableElement;
           10   15     5         parameterName  Ljava/lang/String;
           12   15     6              property  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    MethodParameters:
               Name  Flags
      methodElement  

  private void parseConstructor(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=5, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 230
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasCreate:Z
         1: .line 231
            aload 0 /* this */
            aload 1 /* methodElement */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.checkCreateAndBuilder:(Ljavax/lang/model/element/ExecutableElement;)V
         2: .line 233
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            astore 2 /* parameters */
        start local 2 // java.util.List parameters
         3: .line 235
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasShapeProperties:Z
            ifeq 17
         4: .line 236
            aload 2 /* parameters */
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 6
         5: .line 237
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "If an @Layout has shape properties the constructor must have parameters"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         6: .line 240
      StackMap locals: java.util.List
      StackMap stack:
            aload 2 /* parameters */
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 3 /* firstParameter */
        start local 3 // javax.lang.model.element.VariableElement firstParameter
         7: .line 241
            aload 3 /* firstParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 4 /* firstParameterName */
        start local 4 // java.lang.String firstParameterName
         8: .line 243
            aload 4 /* firstParameterName */
            ldc "factory"
            invokestatic com.oracle.truffle.object.dsl.processor.LayoutParser.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifne 12
         9: .line 244
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 3 /* firstParameter */
            ldc "If an @Layout has shape properties, the first parameter of the constructor must be called factory (was %s)"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        10: .line 245
            aload 3 /* firstParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            aastore
        11: .line 244
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        12: .line 248
      StackMap locals: javax.lang.model.element.VariableElement java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 3 /* firstParameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObjectFactory:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifne 16
        13: .line 249
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 3 /* firstParameter */
            ldc "If an @Layout has shape properties, the first parameter of the constructor must be of type DynamicObjectFactory (was %s)"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
        14: .line 250
            aload 3 /* firstParameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            aastore
        15: .line 249
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        16: .line 253
      StackMap locals:
      StackMap stack:
            aload 2 /* parameters */
            iconst_1
            aload 2 /* parameters */
            invokeinterface java.util.List.size:()I
            invokeinterface java.util.List.subList:(II)Ljava/util/List;
            astore 2 /* parameters */
        end local 4 // java.lang.String firstParameterName
        end local 3 // javax.lang.model.element.VariableElement firstParameter
        17: .line 256
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 2 /* parameters */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.addConstructorProperties:(Ljavax/lang/model/element/ExecutableElement;Ljava/util/List;)V
        18: .line 257
            return
        end local 2 // java.util.List parameters
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot                Name  Signature
            0   19     0                this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   19     1       methodElement  Ljavax/lang/model/element/ExecutableElement;
            3   19     2          parameters  Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;
            7   17     3      firstParameter  Ljavax/lang/model/element/VariableElement;
            8   17     4  firstParameterName  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      methodElement  

  private void parseBuilder(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 260
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasBuilder:Z
         1: .line 261
            aload 0 /* this */
            aload 1 /* methodElement */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.checkCreateAndBuilder:(Ljavax/lang/model/element/ExecutableElement;)V
         2: .line 263
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            astore 2 /* parameters */
        start local 2 // java.util.List parameters
         3: .line 265
            aload 0 /* this */
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getReturnType:()Ljavax/lang/model/type/TypeMirror;
            invokestatic com.oracle.truffle.dsl.processor.ProcessorContext.getInstance:()Lcom/oracle/truffle/dsl/processor/ProcessorContext;
            ldc [Ljava/lang/Object;
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.getType:(Ljava/lang/Class;)Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifne 5
         4: .line 266
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "build() must have Object[] for return type"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         5: .line 269
      StackMap locals: java.util.List
      StackMap stack:
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 2 /* parameters */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.addConstructorProperties:(Ljavax/lang/model/element/ExecutableElement;Ljava/util/List;)V
         6: .line 270
            return
        end local 2 // java.util.List parameters
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    7     0           this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    7     1  methodElement  Ljavax/lang/model/element/ExecutableElement;
            3    7     2     parameters  Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;
    MethodParameters:
               Name  Flags
      methodElement  

  private void checkCreateAndBuilder(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 273
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasCreate:Z
            ifeq 3
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasBuilder:Z
            ifeq 3
         1: .line 274
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "Only one of create<Layout>() or build() may be specified."
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 275
            return
         3: .line 277
      StackMap locals:
      StackMap stack:
            return
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0           this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    4     1  methodElement  Ljavax/lang/model/element/ExecutableElement;
    MethodParameters:
               Name  Flags
      methodElement  

  private void addConstructorProperties(javax.lang.model.element.ExecutableElement, java.util.List<? extends javax.lang.model.element.VariableElement>);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;Ljava/util/List;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=8, args_size=3
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
        start local 2 // java.util.List parameters
         0: .line 280
            aload 2 /* parameters */
            astore 3 /* ownParameters */
        start local 3 // java.util.List ownParameters
         1: .line 281
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.superLayout:Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
            ifnull 5
         2: .line 282
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.superLayout:Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
            invokevirtual com.oracle.truffle.object.dsl.processor.model.LayoutModel.getAllInstanceProperties:()Ljava/util/List;
            astore 4 /* superProperties */
        start local 4 // java.util.List superProperties
         3: .line 283
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 2 /* parameters */
            aload 4 /* superProperties */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.checkSharedParameters:(Ljavax/lang/model/element/Element;Ljava/util/List;Ljava/util/List;)V
         4: .line 284
            aload 2 /* parameters */
            aload 4 /* superProperties */
            invokeinterface java.util.List.size:()I
            aload 2 /* parameters */
            invokeinterface java.util.List.size:()I
            invokeinterface java.util.List.subList:(II)Ljava/util/List;
            astore 3 /* ownParameters */
        end local 4 // java.util.List superProperties
         5: .line 287
      StackMap locals: java.util.List
      StackMap stack:
            aload 3 /* ownParameters */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 5
            goto 17
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.ExecutableElement java.util.List java.util.List top java.util.Iterator
      StackMap stack:
         6: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 4 /* element */
        start local 4 // javax.lang.model.element.VariableElement element
         7: .line 288
            aload 4 /* element */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 6 /* parameterName */
        start local 6 // java.lang.String parameterName
         8: .line 290
            aload 6 /* parameterName */
            ldc "factory"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifeq 10
         9: .line 291
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "Factory is a confusing name for a property"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        10: .line 294
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.ExecutableElement java.util.List java.util.List javax.lang.model.element.VariableElement java.util.Iterator java.lang.String
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.constructorProperties:Ljava/util/List;
            aload 6 /* parameterName */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 13
        11: .line 295
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "The property %s is duplicated"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        12: .line 296
            goto 17
        13: .line 297
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.constructorProperties:Ljava/util/List;
            aload 6 /* parameterName */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        14: .line 298
            aload 0 /* this */
            aload 6 /* parameterName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            astore 7 /* property */
        start local 7 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        15: .line 299
            aload 0 /* this */
            aload 4 /* element */
            aload 7 /* property */
            aload 4 /* element */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        16: .line 300
            aload 0 /* this */
            aload 7 /* property */
            aload 4 /* element */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.parseConstructorParameterAnnotations:(Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/element/Element;)V
        end local 7 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        end local 6 // java.lang.String parameterName
        end local 4 // javax.lang.model.element.VariableElement element
        17: .line 287
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser javax.lang.model.element.ExecutableElement java.util.List java.util.List top java.util.Iterator
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 6
        18: .line 303
            return
        end local 3 // java.util.List ownParameters
        end local 2 // java.util.List parameters
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   19     0             this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   19     1    methodElement  Ljavax/lang/model/element/ExecutableElement;
            0   19     2       parameters  Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;
            1   19     3    ownParameters  Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;
            3    5     4  superProperties  Ljava/util/List<Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;>;
            7   17     4          element  Ljavax/lang/model/element/VariableElement;
            8   17     6    parameterName  Ljava/lang/String;
           15   17     7         property  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    Signature: (Ljavax/lang/model/element/ExecutableElement;Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;)V
    MethodParameters:
               Name  Flags
      methodElement  
      parameters     

  private void checkSharedParameters(javax.lang.model.element.Element, java.util.List<? extends javax.lang.model.element.VariableElement>, java.util.List<com.oracle.truffle.object.dsl.processor.model.PropertyModel>);
    descriptor: (Ljavax/lang/model/element/Element;Ljava/util/List;Ljava/util/List;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=8, args_size=4
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.Element element
        start local 2 // java.util.List parameters
        start local 3 // java.util.List sharedProperties
         0: .line 306
            aload 2 /* parameters */
            invokeinterface java.util.List.size:()I
            aload 3 /* sharedProperties */
            invokeinterface java.util.List.size:()I
            if_icmpge 2
         1: .line 307
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* element */
            new java.lang.StringBuilder
            dup
            ldc "@Layout constructor cannot have less parameters than the super layout constructor "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 2 /* parameters */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            ldc " "
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            aload 3 /* sharedProperties */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 310
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 4 /* n */
        start local 4 // int n
         3: goto 18
         4: .line 311
      StackMap locals: int
      StackMap stack:
            aload 2 /* parameters */
            iload 4 /* n */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 5 /* parameter */
        start local 5 // javax.lang.model.element.VariableElement parameter
         5: .line 312
            aload 5 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 6 /* parameterName */
        start local 6 // java.lang.String parameterName
         6: .line 313
            aload 3 /* sharedProperties */
            iload 4 /* n */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast com.oracle.truffle.object.dsl.processor.model.PropertyModel
            astore 7 /* superLayoutProperty */
        start local 7 // com.oracle.truffle.object.dsl.processor.model.PropertyModel superLayoutProperty
         7: .line 315
            aload 7 /* superLayoutProperty */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyModel.hasGeneratedName:()Z
            ifeq 9
         8: .line 317
            aload 7 /* superLayoutProperty */
            aload 6 /* parameterName */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyModel.fixName:(Ljava/lang/String;)V
         9: .line 320
      StackMap locals: javax.lang.model.element.VariableElement java.lang.String com.oracle.truffle.object.dsl.processor.model.PropertyModel
      StackMap stack:
            aload 6 /* parameterName */
            aload 7 /* superLayoutProperty */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyModel.getName:()Ljava/lang/String;
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 13
        10: .line 321
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* element */
            ldc "@Layout constructor parameter %d needs to have the same name as the super layout constructor (is %s, should be %s)"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        11: .line 322
            iload 4 /* n */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            aload 5 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            aastore
            dup
            iconst_2
            aload 7 /* superLayoutProperty */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyModel.getName:()Ljava/lang/String;
            aastore
        12: .line 321
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        13: .line 325
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 5 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            aload 7 /* superLayoutProperty */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyModel.getType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifne 17
        14: .line 326
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* element */
            ldc "@Layout constructor parameter %d needs to have the same type as the super layout constructor (is %s, should be %s)"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        15: .line 327
            iload 4 /* n */
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            aastore
            dup
            iconst_1
            aload 5 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            aastore
            dup
            iconst_2
            aload 7 /* superLayoutProperty */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyModel.getType:()Ljavax/lang/model/type/TypeMirror;
            aastore
        16: .line 326
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        end local 7 // com.oracle.truffle.object.dsl.processor.model.PropertyModel superLayoutProperty
        end local 6 // java.lang.String parameterName
        end local 5 // javax.lang.model.element.VariableElement parameter
        17: .line 310
      StackMap locals:
      StackMap stack:
            iinc 4 /* n */ 1
      StackMap locals:
      StackMap stack:
        18: iload 4 /* n */
            aload 3 /* sharedProperties */
            invokeinterface java.util.List.size:()I
            if_icmplt 4
        end local 4 // int n
        19: .line 330
            return
        end local 3 // java.util.List sharedProperties
        end local 2 // java.util.List parameters
        end local 1 // javax.lang.model.element.Element element
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot                 Name  Signature
            0   20     0                 this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   20     1              element  Ljavax/lang/model/element/Element;
            0   20     2           parameters  Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;
            0   20     3     sharedProperties  Ljava/util/List<Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;>;
            3   19     4                    n  I
            5   17     5            parameter  Ljavax/lang/model/element/VariableElement;
            6   17     6        parameterName  Ljava/lang/String;
            7   17     7  superLayoutProperty  Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;
    Signature: (Ljavax/lang/model/element/Element;Ljava/util/List<+Ljavax/lang/model/element/VariableElement;>;Ljava/util/List<Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;>;)V
    MethodParameters:
                  Name  Flags
      element           
      parameters        
      sharedProperties  

  private void parsePackageName(javax.lang.model.element.TypeElement);
    descriptor: (Ljavax/lang/model/element/TypeElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=5, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.TypeElement layoutElement
         0: .line 333
            aload 1 /* layoutElement */
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.getQualifiedName:(Ljavax/lang/model/element/TypeElement;)Ljava/lang/String;
            ldc "\\."
            invokevirtual java.lang.String.split:(Ljava/lang/String;)[Ljava/lang/String;
            astore 2 /* packageComponents */
        start local 2 // java.lang.String[] packageComponents
         1: .line 335
            new java.lang.StringBuilder
            dup
            invokespecial java.lang.StringBuilder.<init>:()V
            astore 3 /* packageBuilder */
        start local 3 // java.lang.StringBuilder packageBuilder
         2: .line 337
            iconst_0
            istore 4 /* n */
        start local 4 // int n
         3: goto 10
         4: .line 338
      StackMap locals: java.lang.String[] java.lang.StringBuilder int
      StackMap stack:
            aload 2 /* packageComponents */
            iload 4 /* n */
            aaload
            iconst_0
            invokevirtual java.lang.String.charAt:(I)C
            invokestatic java.lang.Character.isUpperCase:(C)Z
            ifeq 6
         5: .line 339
            goto 11
         6: .line 342
      StackMap locals:
      StackMap stack:
            iload 4 /* n */
            ifle 8
         7: .line 343
            aload 3 /* packageBuilder */
            bipush 46
            invokevirtual java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;
            pop
         8: .line 346
      StackMap locals:
      StackMap stack:
            aload 3 /* packageBuilder */
            aload 2 /* packageComponents */
            iload 4 /* n */
            aaload
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            pop
         9: .line 337
            iinc 4 /* n */ 1
      StackMap locals:
      StackMap stack:
        10: iload 4 /* n */
            aload 2 /* packageComponents */
            arraylength
            if_icmplt 4
        end local 4 // int n
        11: .line 349
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 3 /* packageBuilder */
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.packageName:Ljava/lang/String;
        12: .line 350
            return
        end local 3 // java.lang.StringBuilder packageBuilder
        end local 2 // java.lang.String[] packageComponents
        end local 1 // javax.lang.model.element.TypeElement layoutElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   13     0               this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   13     1      layoutElement  Ljavax/lang/model/element/TypeElement;
            1   13     2  packageComponents  [Ljava/lang/String;
            2   13     3     packageBuilder  Ljava/lang/StringBuilder;
            3   11     4                  n  I
    MethodParameters:
               Name  Flags
      layoutElement  

  private void parseGuard(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=6, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 353
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_1
            if_icmpeq 2
         1: .line 354
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout guard methods must have just one parameter"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 357
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 2 /* parameter */
        start local 2 // javax.lang.model.element.VariableElement parameter
         3: .line 359
            aload 2 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            astore 3 /* type */
        start local 3 // javax.lang.model.type.TypeMirror type
         4: .line 361
            aload 2 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 4 /* parameterName */
        start local 4 // java.lang.String parameterName
         5: .line 364
            aload 0 /* this */
            aload 3 /* type */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObject:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 9
         6: .line 365
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasDynamicObjectGuard:Z
         7: .line 366
            ldc "object"
            astore 5 /* expectedParameterName */
        start local 5 // java.lang.String expectedParameterName
         8: .line 367
            goto 19
        end local 5 // java.lang.String expectedParameterName
      StackMap locals: javax.lang.model.element.VariableElement javax.lang.model.type.TypeMirror java.lang.String
      StackMap stack:
         9: aload 0 /* this */
            aload 3 /* type */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.ObjectType:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 13
        10: .line 368
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasObjectTypeGuard:Z
        11: .line 369
            ldc "objectType"
            astore 5 /* expectedParameterName */
        start local 5 // java.lang.String expectedParameterName
        12: .line 370
            goto 19
        end local 5 // java.lang.String expectedParameterName
      StackMap locals:
      StackMap stack:
        13: aload 0 /* this */
            aload 3 /* type */
            invokestatic com.oracle.truffle.dsl.processor.ProcessorContext.getInstance:()Lcom/oracle/truffle/dsl/processor/ProcessorContext;
            ldc Ljava/lang/Object;
            invokevirtual com.oracle.truffle.dsl.processor.ProcessorContext.getType:(Ljava/lang/Class;)Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 17
        14: .line 371
            aload 0 /* this */
            iconst_1
            putfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasObjectGuard:Z
        15: .line 372
            ldc "object"
            astore 5 /* expectedParameterName */
        start local 5 // java.lang.String expectedParameterName
        16: .line 373
            goto 19
        end local 5 // java.lang.String expectedParameterName
        17: .line 374
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout guard method with unknown parameter type %s - don't know how to guard on this"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 3 /* type */
            aastore
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        18: .line 375
            aconst_null
            astore 5 /* expectedParameterName */
        start local 5 // java.lang.String expectedParameterName
        19: .line 378
      StackMap locals: java.lang.String
      StackMap stack:
            aload 5 /* expectedParameterName */
            ifnull 21
            aload 4 /* parameterName */
            aload 5 /* expectedParameterName */
            invokestatic com.oracle.truffle.object.dsl.processor.LayoutParser.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifne 21
        20: .line 379
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout guard method should have a parameter named %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 5 /* expectedParameterName */
            aastore
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        21: .line 381
      StackMap locals:
      StackMap stack:
            return
        end local 5 // java.lang.String expectedParameterName
        end local 4 // java.lang.String parameterName
        end local 3 // javax.lang.model.type.TypeMirror type
        end local 2 // javax.lang.model.element.VariableElement parameter
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   22     0                   this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   22     1          methodElement  Ljavax/lang/model/element/ExecutableElement;
            3   22     2              parameter  Ljavax/lang/model/element/VariableElement;
            4   22     3                   type  Ljavax/lang/model/type/TypeMirror;
            5   22     4          parameterName  Ljava/lang/String;
            8    9     5  expectedParameterName  Ljava/lang/String;
           12   13     5  expectedParameterName  Ljava/lang/String;
           16   17     5  expectedParameterName  Ljava/lang/String;
           19   22     5  expectedParameterName  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      methodElement  

  private void parseGetter(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=10, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 384
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_1
            if_icmpeq 2
         1: .line 385
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout getter methods must have just one parameter"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 388
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 2 /* parameter */
        start local 2 // javax.lang.model.element.VariableElement parameter
         3: .line 389
            aload 2 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            astore 3 /* parameterType */
        start local 3 // javax.lang.model.type.TypeMirror parameterType
         4: .line 390
            aload 2 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 4 /* parameterName */
        start local 4 // java.lang.String parameterName
         5: .line 396
            aload 0 /* this */
            aload 3 /* parameterType */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObject:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 10
         6: .line 397
            iconst_0
            istore 5 /* isShapeGetter */
        start local 5 // boolean isShapeGetter
         7: .line 398
            iconst_0
            istore 6 /* isObjectTypeGetter */
        start local 6 // boolean isObjectTypeGetter
         8: .line 399
            ldc "object"
            astore 7 /* expectedParameterName */
        start local 7 // java.lang.String expectedParameterName
         9: .line 400
            goto 24
        end local 7 // java.lang.String expectedParameterName
        end local 6 // boolean isObjectTypeGetter
        end local 5 // boolean isShapeGetter
      StackMap locals: javax.lang.model.element.VariableElement javax.lang.model.type.TypeMirror java.lang.String
      StackMap stack:
        10: aload 0 /* this */
            aload 3 /* parameterType */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObjectFactory:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 15
        11: .line 401
            iconst_1
            istore 5 /* isShapeGetter */
        start local 5 // boolean isShapeGetter
        12: .line 402
            iconst_0
            istore 6 /* isObjectTypeGetter */
        start local 6 // boolean isObjectTypeGetter
        13: .line 403
            ldc "factory"
            astore 7 /* expectedParameterName */
        start local 7 // java.lang.String expectedParameterName
        14: .line 404
            goto 24
        end local 7 // java.lang.String expectedParameterName
        end local 6 // boolean isObjectTypeGetter
        end local 5 // boolean isShapeGetter
      StackMap locals:
      StackMap stack:
        15: aload 0 /* this */
            aload 3 /* parameterType */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.ObjectType:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 20
        16: .line 405
            iconst_0
            istore 5 /* isShapeGetter */
        start local 5 // boolean isShapeGetter
        17: .line 406
            iconst_1
            istore 6 /* isObjectTypeGetter */
        start local 6 // boolean isObjectTypeGetter
        18: .line 407
            ldc "objectType"
            astore 7 /* expectedParameterName */
        start local 7 // java.lang.String expectedParameterName
        19: .line 408
            goto 24
        end local 7 // java.lang.String expectedParameterName
        end local 6 // boolean isObjectTypeGetter
        end local 5 // boolean isShapeGetter
        20: .line 409
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 5 /* isShapeGetter */
        start local 5 // boolean isShapeGetter
        21: .line 410
            iconst_0
            istore 6 /* isObjectTypeGetter */
        start local 6 // boolean isObjectTypeGetter
        22: .line 411
            aconst_null
            astore 7 /* expectedParameterName */
        start local 7 // java.lang.String expectedParameterName
        23: .line 412
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout getter methods must have a parameter of type DynamicObject or, for shape properties, DynamicObjectFactory or ObjectType"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        24: .line 415
      StackMap locals: int int java.lang.String
      StackMap stack:
            aload 7 /* expectedParameterName */
            ifnull 26
            aload 4 /* parameterName */
            aload 7 /* expectedParameterName */
            invokestatic com.oracle.truffle.object.dsl.processor.LayoutParser.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifne 26
        25: .line 416
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout getter method should have a parameter named %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 7 /* expectedParameterName */
            aastore
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        26: .line 419
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "get"
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokestatic com.oracle.truffle.object.dsl.processor.model.NameUtils.titleToCamel:(Ljava/lang/String;)Ljava/lang/String;
            astore 8 /* propertyName */
        start local 8 // java.lang.String propertyName
        27: .line 420
            aload 0 /* this */
            aload 8 /* propertyName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            astore 9 /* property */
        start local 9 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        28: .line 422
            iload 5 /* isShapeGetter */
            ifeq 31
        29: .line 423
            aload 9 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasShapeGetter:(Z)V
        30: .line 424
            goto 35
      StackMap locals: java.lang.String com.oracle.truffle.object.dsl.processor.model.PropertyBuilder
      StackMap stack:
        31: iload 6 /* isObjectTypeGetter */
            ifeq 34
        32: .line 425
            aload 9 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasObjectTypeGetter:(Z)V
        33: .line 426
            goto 35
        34: .line 427
      StackMap locals:
      StackMap stack:
            aload 9 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasGetter:(Z)V
        35: .line 430
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 9 /* property */
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getReturnType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        36: .line 431
            return
        end local 9 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        end local 8 // java.lang.String propertyName
        end local 7 // java.lang.String expectedParameterName
        end local 6 // boolean isObjectTypeGetter
        end local 5 // boolean isShapeGetter
        end local 4 // java.lang.String parameterName
        end local 3 // javax.lang.model.type.TypeMirror parameterType
        end local 2 // javax.lang.model.element.VariableElement parameter
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   37     0                   this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   37     1          methodElement  Ljavax/lang/model/element/ExecutableElement;
            3   37     2              parameter  Ljavax/lang/model/element/VariableElement;
            4   37     3          parameterType  Ljavax/lang/model/type/TypeMirror;
            5   37     4          parameterName  Ljava/lang/String;
            7   10     5          isShapeGetter  Z
           12   15     5          isShapeGetter  Z
           17   20     5          isShapeGetter  Z
           21   37     5          isShapeGetter  Z
            8   10     6     isObjectTypeGetter  Z
           13   15     6     isObjectTypeGetter  Z
           18   20     6     isObjectTypeGetter  Z
           22   37     6     isObjectTypeGetter  Z
            9   10     7  expectedParameterName  Ljava/lang/String;
           14   15     7  expectedParameterName  Ljava/lang/String;
           19   20     7  expectedParameterName  Ljava/lang/String;
           23   37     7  expectedParameterName  Ljava/lang/String;
           27   37     8           propertyName  Ljava/lang/String;
           28   37     9               property  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    MethodParameters:
               Name  Flags
      methodElement  

  private void parseSetter(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=12, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 434
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_2
            if_icmpeq 2
         1: .line 435
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout guard methods must have two parameters"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 438
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 2 /* parameter */
        start local 2 // javax.lang.model.element.VariableElement parameter
         3: .line 439
            aload 2 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            astore 3 /* parameterType */
        start local 3 // javax.lang.model.type.TypeMirror parameterType
         4: .line 440
            aload 2 /* parameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 4 /* parameterName */
        start local 4 // java.lang.String parameterName
         5: .line 445
            aload 0 /* this */
            aload 3 /* parameterType */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObject:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 9
         6: .line 446
            iconst_0
            istore 5 /* isShapeSetter */
        start local 5 // boolean isShapeSetter
         7: .line 447
            ldc "object"
            astore 6 /* expectedParameterName */
        start local 6 // java.lang.String expectedParameterName
         8: .line 448
            goto 16
        end local 6 // java.lang.String expectedParameterName
        end local 5 // boolean isShapeSetter
      StackMap locals: javax.lang.model.element.VariableElement javax.lang.model.type.TypeMirror java.lang.String
      StackMap stack:
         9: aload 0 /* this */
            aload 3 /* parameterType */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObjectFactory:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifeq 13
        10: .line 449
            iconst_1
            istore 5 /* isShapeSetter */
        start local 5 // boolean isShapeSetter
        11: .line 450
            ldc "factory"
            astore 6 /* expectedParameterName */
        start local 6 // java.lang.String expectedParameterName
        12: .line 451
            goto 16
        end local 6 // java.lang.String expectedParameterName
        end local 5 // boolean isShapeSetter
        13: .line 452
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 5 /* isShapeSetter */
        start local 5 // boolean isShapeSetter
        14: .line 453
            aconst_null
            astore 6 /* expectedParameterName */
        start local 6 // java.lang.String expectedParameterName
        15: .line 454
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout setter methods must have a first parameter of type DynamicObject or, for shape properties, DynamicObjectFactory"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        16: .line 457
      StackMap locals: int java.lang.String
      StackMap stack:
            aload 6 /* expectedParameterName */
            ifnull 18
            aload 4 /* parameterName */
            aload 6 /* expectedParameterName */
            invokestatic com.oracle.truffle.object.dsl.processor.LayoutParser.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifne 18
        17: .line 458
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout getter method should have a first parameter named %s"
            iconst_1
            anewarray java.lang.Object
            dup
            iconst_0
            aload 6 /* expectedParameterName */
            aastore
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        18: .line 461
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_1
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 7 /* secondParameter */
        start local 7 // javax.lang.model.element.VariableElement secondParameter
        19: .line 462
            aload 7 /* secondParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            astore 8 /* secondParameterName */
        start local 8 // java.lang.String secondParameterName
        20: .line 464
            aload 8 /* secondParameterName */
            ldc "value"
            invokestatic com.oracle.truffle.object.dsl.processor.LayoutParser.matches:(Ljava/lang/String;Ljava/lang/String;)Z
            ifne 22
        21: .line 465
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout getter method should have a second parameter named value"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        22: .line 468
      StackMap locals: javax.lang.model.element.VariableElement java.lang.String
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "Unsafe"
            invokevirtual java.lang.String.endsWith:(Ljava/lang/String;)Z
            istore 9 /* isUnsafeSetter */
        start local 9 // boolean isUnsafeSetter
        23: .line 470
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "set"
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokestatic com.oracle.truffle.object.dsl.processor.model.NameUtils.titleToCamel:(Ljava/lang/String;)Ljava/lang/String;
            astore 10 /* propertyName */
        start local 10 // java.lang.String propertyName
        24: .line 472
            iload 9 /* isUnsafeSetter */
            ifeq 26
        25: .line 473
            aload 10 /* propertyName */
            iconst_0
            aload 10 /* propertyName */
            invokevirtual java.lang.String.length:()I
            ldc "Unsafe"
            invokevirtual java.lang.String.length:()I
            isub
            invokevirtual java.lang.String.substring:(II)Ljava/lang/String;
            astore 10 /* propertyName */
        26: .line 476
      StackMap locals: int java.lang.String
      StackMap stack:
            aload 0 /* this */
            aload 10 /* propertyName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            astore 11 /* property */
        start local 11 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        27: .line 478
            iload 5 /* isShapeSetter */
            ifeq 30
        28: .line 479
            aload 11 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasShapeSetter:(Z)V
        29: .line 480
            goto 34
        30: .line 481
      StackMap locals: com.oracle.truffle.object.dsl.processor.model.PropertyBuilder
      StackMap stack:
            iload 9 /* isUnsafeSetter */
            ifeq 33
        31: .line 482
            aload 11 /* property */
            iload 9 /* isUnsafeSetter */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasUnsafeSetter:(Z)V
        32: .line 483
            goto 34
        33: .line 484
      StackMap locals:
      StackMap stack:
            aload 11 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasSetter:(Z)V
        34: .line 488
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 11 /* property */
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_1
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        35: .line 489
            return
        end local 11 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        end local 10 // java.lang.String propertyName
        end local 9 // boolean isUnsafeSetter
        end local 8 // java.lang.String secondParameterName
        end local 7 // javax.lang.model.element.VariableElement secondParameter
        end local 6 // java.lang.String expectedParameterName
        end local 5 // boolean isShapeSetter
        end local 4 // java.lang.String parameterName
        end local 3 // javax.lang.model.type.TypeMirror parameterType
        end local 2 // javax.lang.model.element.VariableElement parameter
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   36     0                   this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   36     1          methodElement  Ljavax/lang/model/element/ExecutableElement;
            3   36     2              parameter  Ljavax/lang/model/element/VariableElement;
            4   36     3          parameterType  Ljavax/lang/model/type/TypeMirror;
            5   36     4          parameterName  Ljava/lang/String;
            7    9     5          isShapeSetter  Z
           11   13     5          isShapeSetter  Z
           14   36     5          isShapeSetter  Z
            8    9     6  expectedParameterName  Ljava/lang/String;
           12   13     6  expectedParameterName  Ljava/lang/String;
           15   36     6  expectedParameterName  Ljava/lang/String;
           19   36     7        secondParameter  Ljavax/lang/model/element/VariableElement;
           20   36     8    secondParameterName  Ljava/lang/String;
           23   36     9         isUnsafeSetter  Z
           24   36    10           propertyName  Ljava/lang/String;
           27   36    11               property  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    MethodParameters:
               Name  Flags
      methodElement  

  private void parseCompareAndSet(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=7, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 492
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_3
            if_icmpeq 2
         1: .line 493
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout compare and set methods must have three parameters"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 496
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 2 /* objectParameter */
        start local 2 // javax.lang.model.element.VariableElement objectParameter
         3: .line 497
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_1
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 3 /* currentValueParameter */
        start local 3 // javax.lang.model.element.VariableElement currentValueParameter
         4: .line 498
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_2
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 4 /* newValueParameter */
        start local 4 // javax.lang.model.element.VariableElement newValueParameter
         5: .line 500
            aload 0 /* this */
            aload 2 /* objectParameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObject:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifne 7
         6: .line 501
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout compare and set method should have a first parameter of type DynamicObject"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         7: .line 504
      StackMap locals: javax.lang.model.element.VariableElement javax.lang.model.element.VariableElement javax.lang.model.element.VariableElement
      StackMap stack:
            aload 2 /* objectParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "object"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 9
         8: .line 505
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout compare and set method should have a first parameter named object"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         9: .line 508
      StackMap locals:
      StackMap stack:
            aload 3 /* currentValueParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "expectedValue"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 11
        10: .line 509
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout compare and set method should have a second parameter named expectedValue"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        11: .line 512
      StackMap locals:
      StackMap stack:
            aload 4 /* newValueParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "value"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 13
        12: .line 513
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout compare and set method should have a third parameter named value"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        13: .line 516
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "compareAndSet"
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokestatic com.oracle.truffle.object.dsl.processor.model.NameUtils.titleToCamel:(Ljava/lang/String;)Ljava/lang/String;
            astore 5 /* propertyName */
        start local 5 // java.lang.String propertyName
        14: .line 517
            aload 0 /* this */
            aload 5 /* propertyName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            astore 6 /* property */
        start local 6 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        15: .line 519
            aload 6 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasCompareAndSet:(Z)V
        16: .line 521
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 6 /* property */
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_1
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        17: .line 522
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 6 /* property */
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_2
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        18: .line 523
            return
        end local 6 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        end local 5 // java.lang.String propertyName
        end local 4 // javax.lang.model.element.VariableElement newValueParameter
        end local 3 // javax.lang.model.element.VariableElement currentValueParameter
        end local 2 // javax.lang.model.element.VariableElement objectParameter
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   19     0                   this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   19     1          methodElement  Ljavax/lang/model/element/ExecutableElement;
            3   19     2        objectParameter  Ljavax/lang/model/element/VariableElement;
            4   19     3  currentValueParameter  Ljavax/lang/model/element/VariableElement;
            5   19     4      newValueParameter  Ljavax/lang/model/element/VariableElement;
           14   19     5           propertyName  Ljava/lang/String;
           15   19     6               property  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    MethodParameters:
               Name  Flags
      methodElement  

  private void parseGetAndSet(javax.lang.model.element.ExecutableElement);
    descriptor: (Ljavax/lang/model/element/ExecutableElement;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=5, locals=6, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.ExecutableElement methodElement
         0: .line 526
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iconst_2
            if_icmpeq 2
         1: .line 527
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout get and set methods must have two parameters"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         2: .line 530
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_0
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 2 /* objectParameter */
        start local 2 // javax.lang.model.element.VariableElement objectParameter
         3: .line 531
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_1
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            astore 3 /* newValueParameter */
        start local 3 // javax.lang.model.element.VariableElement newValueParameter
         4: .line 533
            aload 0 /* this */
            aload 2 /* objectParameter */
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.DynamicObject:Ljavax/lang/model/type/DeclaredType;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifne 6
         5: .line 534
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout get and set method should have a first parameter of type DynamicObject"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         6: .line 537
      StackMap locals: javax.lang.model.element.VariableElement javax.lang.model.element.VariableElement
      StackMap stack:
            aload 2 /* objectParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "object"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 8
         7: .line 538
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout get and set method should have a first parameter named object"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         8: .line 541
      StackMap locals:
      StackMap stack:
            aload 3 /* newValueParameter */
            invokeinterface javax.lang.model.element.VariableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "value"
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ifne 10
         9: .line 542
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* methodElement */
            ldc "@Layout get and set method should have a second parameter named value"
            iconst_0
            anewarray java.lang.Object
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
        10: .line 545
      StackMap locals:
      StackMap stack:
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getSimpleName:()Ljavax/lang/model/element/Name;
            invokeinterface javax.lang.model.element.Name.toString:()Ljava/lang/String;
            ldc "getAndSet"
            invokevirtual java.lang.String.length:()I
            invokevirtual java.lang.String.substring:(I)Ljava/lang/String;
            invokestatic com.oracle.truffle.object.dsl.processor.model.NameUtils.titleToCamel:(Ljava/lang/String;)Ljava/lang/String;
            astore 4 /* propertyName */
        start local 4 // java.lang.String propertyName
        11: .line 546
            aload 0 /* this */
            aload 4 /* propertyName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            astore 5 /* property */
        start local 5 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        12: .line 548
            aload 5 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setHasGetAndSet:(Z)V
        13: .line 550
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 5 /* property */
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getParameters:()Ljava/util/List;
            iconst_1
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast javax.lang.model.element.VariableElement
            invokeinterface javax.lang.model.element.VariableElement.asType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        14: .line 551
            aload 0 /* this */
            aload 1 /* methodElement */
            aload 5 /* property */
            aload 1 /* methodElement */
            invokeinterface javax.lang.model.element.ExecutableElement.getReturnType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.setPropertyType:(Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
        15: .line 552
            return
        end local 5 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        end local 4 // java.lang.String propertyName
        end local 3 // javax.lang.model.element.VariableElement newValueParameter
        end local 2 // javax.lang.model.element.VariableElement objectParameter
        end local 1 // javax.lang.model.element.ExecutableElement methodElement
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   16     0               this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0   16     1      methodElement  Ljavax/lang/model/element/ExecutableElement;
            3   16     2    objectParameter  Ljavax/lang/model/element/VariableElement;
            4   16     3  newValueParameter  Ljavax/lang/model/element/VariableElement;
           11   16     4       propertyName  Ljava/lang/String;
           12   16     5           property  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    MethodParameters:
               Name  Flags
      methodElement  

  private void parseConstructorParameterAnnotations(com.oracle.truffle.object.dsl.processor.model.PropertyBuilder, javax.lang.model.element.Element);
    descriptor: (Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/element/Element;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=3, args_size=3
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        start local 2 // javax.lang.model.element.Element element
         0: .line 555
            aload 2 /* element */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.Nullable:Ljavax/lang/model/type/DeclaredType;
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.findAnnotationMirror:(Ljavax/lang/model/element/Element;Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/element/AnnotationMirror;
            ifnull 2
         1: .line 556
            aload 1 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setNullable:(Z)V
         2: .line 559
      StackMap locals:
      StackMap stack:
            aload 2 /* element */
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.types:Lcom/oracle/truffle/dsl/processor/TruffleTypes;
            getfield com.oracle.truffle.dsl.processor.TruffleTypes.Volatile:Ljavax/lang/model/type/DeclaredType;
            invokestatic com.oracle.truffle.dsl.processor.java.ElementUtils.findAnnotationMirror:(Ljavax/lang/model/element/Element;Ljavax/lang/model/type/TypeMirror;)Ljavax/lang/model/element/AnnotationMirror;
            ifnull 4
         3: .line 560
            aload 1 /* property */
            iconst_1
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setVolatile:(Z)V
         4: .line 562
      StackMap locals:
      StackMap stack:
            return
        end local 2 // javax.lang.model.element.Element element
        end local 1 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder property
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    5     0      this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    5     1  property  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            0    5     2   element  Ljavax/lang/model/element/Element;
    MethodParameters:
          Name  Flags
      property  
      element   

  private boolean isSameType(javax.lang.model.type.TypeMirror, javax.lang.model.type.TypeMirror);
    descriptor: (Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.type.TypeMirror a
        start local 2 // javax.lang.model.type.TypeMirror b
         0: .line 565
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.getProcessingEnv:()Ljavax/annotation/processing/ProcessingEnvironment;
            invokeinterface javax.annotation.processing.ProcessingEnvironment.getTypeUtils:()Ljavax/lang/model/util/Types;
            aload 1 /* a */
            aload 2 /* b */
            invokeinterface javax.lang.model.util.Types.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ireturn
        end local 2 // javax.lang.model.type.TypeMirror b
        end local 1 // javax.lang.model.type.TypeMirror a
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    1     1     a  Ljavax/lang/model/type/TypeMirror;
            0    1     2     b  Ljavax/lang/model/type/TypeMirror;
    MethodParameters:
      Name  Flags
      a     
      b     

  public static boolean isGeneratedName(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // java.lang.String name
         0: .line 571
            aload 0 /* name */
            invokevirtual java.lang.String.length:()I
            iconst_3
            if_icmple 1
            aload 0 /* name */
            ldc "arg"
            invokevirtual java.lang.String.startsWith:(Ljava/lang/String;)Z
            ifeq 1
            aload 0 /* name */
            iconst_3
            invokevirtual java.lang.String.charAt:(I)C
            invokestatic java.lang.Character.isDigit:(C)Z
            ifeq 1
            iconst_1
            ireturn
      StackMap locals:
      StackMap stack:
         1: iconst_0
            ireturn
        end local 0 // java.lang.String name
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  name  Ljava/lang/String;
    MethodParameters:
      Name  Flags
      name  

  private static boolean matches(java.lang.String, java.lang.String);
    descriptor: (Ljava/lang/String;Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // java.lang.String parameterName
        start local 1 // java.lang.String expected
         0: .line 575
            aload 0 /* parameterName */
            invokestatic com.oracle.truffle.object.dsl.processor.LayoutParser.isGeneratedName:(Ljava/lang/String;)Z
            ifeq 2
         1: .line 576
            iconst_1
            ireturn
         2: .line 578
      StackMap locals:
      StackMap stack:
            aload 0 /* parameterName */
            aload 1 /* expected */
            invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
            ireturn
        end local 1 // java.lang.String expected
        end local 0 // java.lang.String parameterName
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    3     0  parameterName  Ljava/lang/String;
            0    3     1       expected  Ljava/lang/String;
    MethodParameters:
               Name  Flags
      parameterName  
      expected       

  private void setPropertyType(javax.lang.model.element.Element, com.oracle.truffle.object.dsl.processor.model.PropertyBuilder, javax.lang.model.type.TypeMirror);
    descriptor: (Ljavax/lang/model/element/Element;Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;Ljavax/lang/model/type/TypeMirror;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=7, locals=4, args_size=4
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // javax.lang.model.element.Element element
        start local 2 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder builder
        start local 3 // javax.lang.model.type.TypeMirror type
         0: .line 582
            aload 2 /* builder */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.getType:()Ljavax/lang/model/type/TypeMirror;
            ifnonnull 3
         1: .line 583
            aload 2 /* builder */
            aload 3 /* type */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.setType:(Ljavax/lang/model/type/TypeMirror;)V
         2: .line 584
            goto 7
      StackMap locals:
      StackMap stack:
         3: aload 0 /* this */
            aload 3 /* type */
            aload 2 /* builder */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.getType:()Ljavax/lang/model/type/TypeMirror;
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.isSameType:(Ljavax/lang/model/type/TypeMirror;Ljavax/lang/model/type/TypeMirror;)Z
            ifne 7
         4: .line 585
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.processor:Lcom/oracle/truffle/object/dsl/processor/LayoutProcessor;
            aload 1 /* element */
            ldc "@Layout property types are inconsistent - was previously %s but now %s"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
         5: .line 586
            aload 2 /* builder */
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.getType:()Ljavax/lang/model/type/TypeMirror;
            aastore
            dup
            iconst_1
            aload 3 /* type */
            aastore
         6: .line 585
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutProcessor.reportError:(Ljavax/lang/model/element/Element;Ljava/lang/String;[Ljava/lang/Object;)V
         7: .line 588
      StackMap locals:
      StackMap stack:
            return
        end local 3 // javax.lang.model.type.TypeMirror type
        end local 2 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder builder
        end local 1 // javax.lang.model.element.Element element
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    8     0     this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    8     1  element  Ljavax/lang/model/element/Element;
            0    8     2  builder  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            0    8     3     type  Ljavax/lang/model/type/TypeMirror;
    MethodParameters:
         Name  Flags
      element  
      builder  
      type     

  private com.oracle.truffle.object.dsl.processor.model.PropertyBuilder getProperty(java.lang.String);
    descriptor: (Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
        start local 1 // java.lang.String propertyName
         0: .line 591
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.properties:Ljava/util/Map;
            aload 1 /* propertyName */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast com.oracle.truffle.object.dsl.processor.model.PropertyBuilder
            astore 2 /* builder */
        start local 2 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder builder
         1: .line 593
            aload 2 /* builder */
            ifnonnull 4
         2: .line 594
            new com.oracle.truffle.object.dsl.processor.model.PropertyBuilder
            dup
            aload 1 /* propertyName */
            invokespecial com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.<init>:(Ljava/lang/String;)V
            astore 2 /* builder */
         3: .line 595
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.properties:Ljava/util/Map;
            aload 1 /* propertyName */
            aload 2 /* builder */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 598
      StackMap locals: com.oracle.truffle.object.dsl.processor.model.PropertyBuilder
      StackMap stack:
            aload 2 /* builder */
            areturn
        end local 2 // com.oracle.truffle.object.dsl.processor.model.PropertyBuilder builder
        end local 1 // java.lang.String propertyName
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    5     0          this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            0    5     1  propertyName  Ljava/lang/String;
            1    5     2       builder  Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
    MethodParameters:
              Name  Flags
      propertyName  

  public com.oracle.truffle.object.dsl.processor.model.LayoutModel build();
    descriptor: ()Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=14, locals=1, args_size=1
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
         0: .line 602
            new com.oracle.truffle.object.dsl.processor.model.LayoutModel
            dup
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.objectTypeSuperclass:Ljavax/lang/model/type/TypeMirror;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.superLayout:Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.name:Ljava/lang/String;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.packageName:Ljava/lang/String;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasObjectTypeGuard:Z
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasObjectGuard:Z
         1: .line 603
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasDynamicObjectGuard:Z
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.hasBuilder:Z
            aload 0 /* this */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.buildProperties:()Ljava/util/List;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.interfaceFullName:Ljava/lang/String;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.implicitCasts:Ljava/util/List;
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.dispatch:Ljavax/lang/model/type/TypeMirror;
         2: .line 602
            invokespecial com.oracle.truffle.object.dsl.processor.model.LayoutModel.<init>:(Ljavax/lang/model/type/TypeMirror;Lcom/oracle/truffle/object/dsl/processor/model/LayoutModel;Ljava/lang/String;Ljava/lang/String;ZZZZLjava/util/Collection;Ljava/lang/String;Ljava/util/Collection;Ljavax/lang/model/type/TypeMirror;)V
            areturn
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;

  private java.util.List<com.oracle.truffle.object.dsl.processor.model.PropertyModel> buildProperties();
    descriptor: ()Ljava/util/List;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=1
        start local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
         0: .line 607
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 1 /* models */
        start local 1 // java.util.List models
         1: .line 609
            aload 0 /* this */
            getfield com.oracle.truffle.object.dsl.processor.LayoutParser.constructorProperties:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 4
      StackMap locals: com.oracle.truffle.object.dsl.processor.LayoutParser java.util.List top java.util.Iterator
      StackMap stack:
         2: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.lang.String
            astore 2 /* propertyName */
        start local 2 // java.lang.String propertyName
         3: .line 610
            aload 1 /* models */
            aload 0 /* this */
            aload 2 /* propertyName */
            invokevirtual com.oracle.truffle.object.dsl.processor.LayoutParser.getProperty:(Ljava/lang/String;)Lcom/oracle/truffle/object/dsl/processor/model/PropertyBuilder;
            invokevirtual com.oracle.truffle.object.dsl.processor.model.PropertyBuilder.build:()Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 2 // java.lang.String propertyName
         4: .line 609
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 613
            aload 1 /* models */
            areturn
        end local 1 // java.util.List models
        end local 0 // com.oracle.truffle.object.dsl.processor.LayoutParser this
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    6     0          this  Lcom/oracle/truffle/object/dsl/processor/LayoutParser;
            1    6     1        models  Ljava/util/List<Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;>;
            3    4     2  propertyName  Ljava/lang/String;
    Signature: ()Ljava/util/List<Lcom/oracle/truffle/object/dsl/processor/model/PropertyModel;>;
}
SourceFile: "LayoutParser.java"