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

END MODEL // LLJava