// Rendered by UMod Pretty Printer at 2022-06-30_15h11m08
// See also the UMod user documentation online.

MODEL LLJava =
  EXT Character FROM java.lang.Character
  EXT String FROM java.lang.String
  EXT Integer FROM java.lang.Integer
  EXT Long FROM java.lang.Long
  EXT Float FROM java.lang.Float
  EXT Double FROM java.lang.Double
  EXT SourceId SOURCE FROM eu.bandm.tools.lljava.absy.SourceId
  EXT Location SOURCE FROM eu.bandm.tools.message.Location

  ENUM HandleKind = GetField, GetStatic, PutField, PutStatic, InvokeVirtual, 
          InvokeStatic, InvokeSpecial, NewInvokeSpecial, InvokeInterface
  ENUM Condition = Eq, NEq, LEq, GEq, LT, GT, Eq0, NEq0, LEq0, GEq0, LT0, GT0, 
          EqNull, NEqNull
  ENUM Modifier = Public, Protected, Private, Abstract, Static, Interface, 
          Enum, Annotation, Final, Synthetic, Super, Bridge, Strictfp, Volatile, 
          Transient, Synchronized, Native, Varargs, Mandated
  ENUM Strategy = Virtual, Special, Static, Interface, Dynamic

  TOPLEVEL CLASS
  Anonymity
  QualId ALGEBRAIC
        qualifier   SEQ Id
        id          Id
  Node ABSTRACT
        location    OPT Location
  | LoadArgument ABSTRACT
  | | StoreArgument ABSTRACT
  | | | VariableAccess ABSTRACT
        target      OPT Slot
  | | | | VariableRef
        name        Name
  | | | | SlotReference
        index       int
        wide        bool
  | | | | This
  | | | | SlotRef
  | | | ArrayAccess
        type        OPT Type
  | | LoadableExpr ABSTRACT
        entry       ABSTRACT GETTER Loadable
  | | | MethodHandleExpr
        target      MethodHandleTarget
        entry       OPT MethodHandle
  | | | DynamicExpr
        type        TypeExpr
        fullName    MemberDynamicName
  | | | MethodTypeExpr
        result      ResultExpr
        parameters  SEQ TypeExpr
        entry       OPT MethodType
  | | | ClassExpr
        type        ClassTypeExpr
        entry       OPT ClassRef
  | | | Literal ABSTRACT
  | | | | IntLiteral
        value       Integer
        entry       OPT ConstantInteger
  | | | | LongLiteral
        value       Long
        entry       OPT ConstantLong
  | | | | BooleanLiteral
        value       bool
        entry       OPT ConstantInteger
  | | | | DoubleLiteral
        value       Double
        entry       OPT ConstantDouble
  | | | | StringLiteral
        value       String
        entry       OPT ConstantString
  | | | | FloatLiteral
        value       Float
        entry       OPT ConstantFloat
  | | | | CharLiteral
        value       Character
        entry       OPT ConstantInteger
  | | NullLiteral
  | Modifiable ABSTRACT
        annotations SEQ Annotation
        modifiers   SET Modifier
  | | Attributable ABSTRACT
        attrs       SEQ Attribute
  | | | Member ABSTRACT
        name        Id
        nameEntry   OPT ConstantUTF8
        descriptorEntry     OPT ConstantUTF8
        signatureEntry      OPT ConstantUTF8
  | | | | Field
        type        TypeExpr
        initializer OPT Literal
  | | | | Method
        typeParameters      SEQ TypeParameter
        result      ResultExpr
        parameters  SEQ Parameter
        exceptions  SEQ ClassReference
        body        MethodBody
  | | | InnerClass
        name        OPT Id
        definition  OPT Class
  | | | Class
        name        QualId
        innerName   OPT Id
        typeParameters      SEQ TypeParameter
        superClass  ClassReference
        interfaces  SEQ ClassReference
        fields      SEQ Field
        methods     SEQ Method
        innerClasses        SEQ InnerClass
        pool        SEQ ConstantPoolEntry
        thisEntry   OPT ClassRef
        signatureEntry      OPT ConstantUTF8
  | | Parameter
        type        TypeExpr
        name        OPT Name
        variable    OPT Variable
  | Statement ABSTRACT
  | | Block
        labels      SEQ Name
        implicit    bool
        elems       SEQ Statement
        controlEnv  Name->Block
        dataEnv     Name->Variable
  | | Instruction ABSTRACT
        pre         OPT StackFrame
        post        OPT StackFrame
  | | | Switch
        cases       SEQ Case
  | | | Swap
  | | | MethodHandleTarget ABSTRACT
        target      ABSTRACT GETTER MemberReference
  | | | | Invoke
        modifiers   SET Modifier
        strategy    OPT Strategy
        target      MethodReference
  | | | | FieldAccess ABSTRACT
        statically  bool
        target      FieldReference
  | | | | | Put
  | | | | | Get
  | | | Monitor ABSTRACT
  | | | | Enter
  | | | | Exit
  | | | Pop
  | | | Length
  | | | Nop
  | | | Try
        body        CodeInterval
        handlers    SEQ Handler
  | | | TypeInstruction ABSTRACT
        type        ABSTRACT GETTER TypeExpr
        entry       OPT ClassRef
  | | | | Instanceof
        type        ReferenceTypeExpr
  | | | | Cast
        type        TypeExpr
  | | | | New
        type        ReferenceTypeExpr
        multiarray  int
  | | | Jump ABSTRACT
  | | | | Goto
        target      GotoPoint
  | | | | Throw
  | | | | Return
  | | | ArithInstruction ABSTRACT
  | | | | Rem
  | | | | Div
  | | | | Cmp ABSTRACT
  | | | | | CmpGT
  | | | | | CmpLT
  | | | | | CmpIntegral
  | | | | | CmpFloating
        greaterNaN  bool
  | | | | Sub
  | | | | XOr
  | | | | Mul
  | | | | And
  | | | | Shift ABSTRACT
  | | | | | Shl
  | | | | | UShr
  | | | | | Shr
  | | | | Add
  | | | | Inc
        target      VariableAccess
        increment   int
  | | | | Neg
  | | | | Or
  | | | Load
        arg         LoadArgument
  | | | Store
        arg         StoreArgument
  | | | Dup
  | | | If
        neg         bool
        condition   Condition
        body        CodePoint
  | | Local
        type        TypeExpr
        name        OPT Name
        variable    OPT Variable
  | | LocalClass
        target      Class
  | | Label
        name        Name
  | CodePoint ABSTRACT
  | | InlinePoint
        body        Block
  | | GotoPoint
        id          Name
        target      OPT Block
  | CodeInterval ABSTRACT
  | | InlineInterval
        body        Block
  | | GotoInterval
        start       Name
        end         OPT Name
        startTarget OPT Block
        endTarget   OPT Block
  | MethodBody ABSTRACT
  | | AbstractMethodBody
  | | CodeMethodBody
        block       Block
        exceptionTable      SEQ Exception
        maxLocals   OPT Integer
        maxOperands OPT Integer
        stackMapPlaces      SET Instruction
        stackMap    SEQ StackFrameDelta
  | | DefaultMethodBody
        value       AnnotationValue
  | AnnotationValue ABSTRACT
  | | ArrayAnnotationValue
        elems       SEQ AnnotationValue
  | | ConstantAnnotationValue
        literal     Literal
  | | ClassAnnotationValue
        name        QualId
  | | NestedAnnotationValue
        annotation  Annotation
  | | EnumAnnotationValue
        type        QualId
        name        Id
  | Handler
        type        OPT ClassReference
        body        CodePoint
  | MethodReferenceParameter
        type        OPT TypeExpr
  | DimensionExpr
        specified   bool
        annotations SEQ Annotation
  | MemberReference ABSTRACT
        fullName    ABSTRACT GETTER MemberFullName
        entry       ABSTRACT GETTER OPT MemberRef
  | | MethodReference
        asInterface bool
        result      ResultExpr
        fullName    MemberFullName
        parameters  SEQ MethodReferenceParameter
        entry       OPT AbstractMethodRef
        dynamicEntry        OPT InvokeDynamic
  | | FieldReference
        type        TypeExpr
        fullName    MemberStaticName
        entry       OPT FieldRef
  | TypeBound ABSTRACT
        limit       ReferenceTypeExpr
        erasure     OPT Type
  | | LowerTypeBound
  | | UpperTypeBound
        interfaces  SEQ ReferenceTypeExpr
  | TypeParameter
        annotations SEQ Annotation
        name        Id
        bound       UpperTypeBound
  | TypeArgument ABSTRACT
        annotations SEQ Annotation
        erasure     ABSTRACT GETTER OPT Type
  | | Wildcard
        bound       OPT TypeBound
        erasure     OPT RefType
  | | TypeExpr ABSTRACT
  | | | ReferenceTypeExpr ABSTRACT
        erasure     OPT RefType
  | | | | ArrayTypeExpr
        base        TypeExpr
        specified   bool
  | | | | ClassTypeExpr
        name        QualId
        arguments   SEQ TypeArgument
        parameter   bool
  | | | PrimitiveTypeExpr
        erasure     PrimitiveType
  | ModifierExpr ABSTRACT
  | | SimpleModifierExpr
        modifier    Modifier
  | | Annotation
        name        QualId
        runtimeVisible      bool
        elems       Id->AnnotationValue
  | Case
        labels      SET Integer
        isDefault   bool
        body        CodePoint
  | ClassReference
        type        ClassTypeExpr
        entry       OPT ClassRef
  | Exception
        range       GotoInterval
        type        OPT ClassReference
        target      GotoPoint
  | MemberFullName ABSTRACT
        name        Id
  | | MemberDynamicName
        factory     MethodHandleExpr
        bootstrapArguments  SEQ LoadableExpr
  | | MemberStaticName
        owner       OPT QualId
  | ClassParent
  | ResultExpr ABSTRACT
        erasure     OPT Result
  | | ReturnsExpr
        type        TypeExpr
  | | VoidExpr
  MethodName
  ConstantPoolEntry ABSTRACT ALGEBRAIC
  | ConstantUTF8 ALGEBRAIC
        text        string
  | NameAndType ALGEBRAIC
        name        ConstantUTF8
        descriptor  ConstantUTF8
  | AbstractDynamic ABSTRACT ALGEBRAIC
        bootstrap   BootstrapMethod
        nametype    NameAndType
  | | Dynamic ALGEBRAIC
  | | InvokeDynamic ALGEBRAIC
  | Loadable ABSTRACT ALGEBRAIC
  | | ConstantDoubleValue ABSTRACT ALGEBRAIC
  | | | ConstantDouble ALGEBRAIC
        value       Double
  | | | ConstantLong ALGEBRAIC
        value       Long
  | | ConstantSingleValue ABSTRACT ALGEBRAIC
  | | | ConstantInteger ALGEBRAIC
        value       Integer
  | | | ConstantString ALGEBRAIC
        value       ConstantUTF8
  | | | ConstantFloat ALGEBRAIC
        value       Float
  | | MethodHandle ALGEBRAIC
        kind        HandleKind
        reference   MemberRef
  | | ClassRef ALGEBRAIC
        name        ConstantUTF8
  | | MethodType ALGEBRAIC
        descriptor  ConstantUTF8
  | MemberRef ABSTRACT ALGEBRAIC
        owner       ClassRef
        nametype    NameAndType
  | | AbstractMethodRef ABSTRACT ALGEBRAIC
  | | | InterfaceMethodRef ALGEBRAIC
  | | | MethodRef ALGEBRAIC
  | | FieldRef ALGEBRAIC
  Result ABSTRACT ALGEBRAIC
  | Void ALGEBRAIC
  | Type ABSTRACT ALGEBRAIC
  | | PrimitiveType ABSTRACT ALGEBRAIC
  | | | ByteType ALGEBRAIC
  | | | CharType ALGEBRAIC
  | | | BooleanType ALGEBRAIC
  | | | IntType ALGEBRAIC
  | | | WideType ABSTRACT ALGEBRAIC
  | | | | LongType ALGEBRAIC
  | | | | DoubleType ALGEBRAIC
  | | | FloatType ALGEBRAIC
  | | | ShortType ALGEBRAIC
  | | RefType ABSTRACT ALGEBRAIC
  | | | ArrayType ALGEBRAIC
        element     Type
  | | | ClassType ALGEBRAIC
        name        QualId
  Slot ALGEBRAIC
        type        Type
        index       int
  StackFrame ALGEBRAIC
        locals      SEQ VType
        operands    SEQ VType
        uninitThis  bool
  Variable ALGEBRAIC
        type        Type
        name        Name
  Id ALGEBRAIC
        text        String
  Attribute ABSTRACT
        name        ABSTRACT GETTER ConstantUTF8
  | ConstantValueAttribute
        name        ConstantUTF8
  | BootstrapMethodsAttribute
        name        ConstantUTF8
        bootstrapMethods    SEQ BootstrapMethod
  | SignatureAttribute ABSTRACT
        name        ConstantUTF8
        signature   OPT ConstantUTF8
  | | ClassSignatureAttribute
  | | MethodSignatureAttribute
  | | FieldSignatureAttribute
  | ExceptionsAttribute
        name        ConstantUTF8
  | CodeAttribute
        name        ConstantUTF8
        stackMap    OPT StackMapTableAttribute
  | AnnotationDefaultAttribute
        name        ConstantUTF8
  | StackMapTableAttribute
        name        ConstantUTF8
  | CustomAttribute
        name        ConstantUTF8
        attrs       SEQ Attribute
  VType ABSTRACT ALGEBRAIC
  | Category1VType ABSTRACT ALGEBRAIC
  | | AbstractIntVType ABSTRACT ALGEBRAIC
  | | | BooleanVType ALGEBRAIC
  | | | ByteVType ALGEBRAIC
  | | | IntVType ALGEBRAIC
  | | | ShortVType ALGEBRAIC
  | | | CharVType ALGEBRAIC
  | | ReferenceVType ALGEBRAIC
  | | UninitializedVType ALGEBRAIC
  | | UninitializedNewVType ALGEBRAIC
        offset      New
  | | UninitializedThisVType ALGEBRAIC
  | | NullVType ALGEBRAIC
  | | OneWordVType ALGEBRAIC
  | | ObjectVType ALGEBRAIC
        classname   string
  | | FloatVType ALGEBRAIC
  | TopVType ALGEBRAIC
  | Category2VType ABSTRACT ALGEBRAIC
  | | DoubleVType ALGEBRAIC
  | | LongVType ALGEBRAIC
  | | TwoWordVType ALGEBRAIC
  Name ABSTRACT ALGEBRAIC
  | ExplicitName ALGEBRAIC
        id          Id
  | ImplicitName ALGEBRAIC
        id          Anonymity
  StackFrameDelta ALGEBRAIC
        delta       int
        next        StackFrame
  BootstrapMethod ALGEBRAIC
        handle      MethodHandle
        arguments   SEQ Loadable

END MODEL // LLJava