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

END MODEL // LLJava