OT Bytecode Attributes/CallinFlags

From Eclipsepedia

Jump to: navigation, search

Contents

Attribute CallinFlags

Intent

The CallinFlags attribute is a fixed-length attribute used in the attributes table of method_info structures.

Location:

A role method or a callin wrapper or a base call surrogate (for return type).

Content:

An integer encoding the callin flags.

Purpose:

  • Used by OTRE:
CALLIN_FLAG_OVERRIDING
CALLIN_FLAG_WRAPPER
The OTRE uses this information to realize the inheritance of method bindings.
(OTRE internal: This flag prevents the OTRE from generating an empty base-call-surrogate which would wrongly override an inherited (non-empty) version.)
  • The other flags are only used by the compiler.
CALLIN_FLAG_BASE_SUPER_CALL: OTRE part is handled via OTSpecialAccess attribute (kind SUPER_METHOD_ACCESS).

Format:

   CallinFlags {
     u2 attribute_name_index;
     u4 attribute_length;
     u2 callin_flags;
    } 

The items of the CallinFlags structure are as follows:

  • attribute_name_index
The constant_pool entry at that index must be a CONSTANT_Utf8_info representing the string "CallinFlags".
  • attribute_length
The value of the attribute_length item indicates the length of the attribute, excluding the initial six bytes.
  • callin_flags
The value of the callin_flags item is a mask of flags (used to denote ...). The interpretation of each flag, when set, is as shown in the following:


Flag Name Value Interpretation
CALLIN_FLAG_OVERRIDING 1 this method is overriding an inherited version
CALLIN_FLAG_WRAPPER 2 this method is the generated team-level callin wrapper
CALLIN_FLAG_DEFINITELY_MISSING_BASECALL 8 for base call flow analysis including super calls
CALLIN_FLAG_POTENTIALLY_MISSING_BASECALL 16 for base call flow analysis including super calls
CALLIN_FLAG_BASE_SUPER_CALL 32 is the base call targeting the base's super?
CALLIN_RETURN_MASK bits 9-12 encoding of original non-reference return type, see IOTConstants.CALLIN_RETURN_VOID ff..