MethodNameStatic → MethodNameDynamic MANGLE_METHOD_NAME_END_MARKER containerType
MethodNameDynamic → EncodedMethodName paramTypes
// mangling method name
EncodedMethodName → m MethodTypeMarkers MethodName | o N Operator
MethodTypeMarkers → MethodLocalInferred MethodSharing | DeclaredLocal MethodSharing | ε
MethodLocalInferred → MANGLE_LQI_NAMESPACE_MARKER
DeclaredLocal → MANGLE_LOCAL_NAMESPACE_MARKER
MethodSharing → MANGLE_NONSHARED_NAMESPACE_MARKER | MANGLE_POLYSHARED_NAMESPACE_MARKER | ε
// mangling parameters
ParamTypes → FormalSignature ParamTypes | TypeModifiers cType ParamTypes | ε
TypeModifiers → TypeLocalInferred SharingInferred TypeSharing | TypeLocalInferred TypeSharing | SharingInferred TypeSharing | ε
TypeLocalInferred → MANGLE_LQI_FORMAL_MARKER
SharingInferred → MANGLE_SHARING_INFERENCE_FORMAL_MARKER
TypeSharing → MANGLE_TYPE_NONSHARED_MARKER | MANGLE_TYPE_POLYSHARED_MARKER
// for primitive types
FormalSignature → B | C | D | F | I | J | S | Z
cType → ClassOrInterfaceType | TemplateType | ArrayType
ClassOrInterfaceType → Qualifier MANGLE_TYPE_MARKER TypeName
ArrayType → TiArray | JavaArray
TiArray → MANGLE_TYPE_MARKER MANGLE_TI_ARRAY_TYPE_MARKER Qualifier ArrayDim BaseType
JavaArray → Qualifier MANGLE_TYPE_MARKER MANGLE_JAVA_ARRAY_MARKER BaseType
BaseType → PrimitiveType | cType
PrimitiveType → jboolean | jbyte | jchar
| jdouble | jfloat | jint | jlong | jshort
ArrayDim → [1-9][0-9]*
Qualifier → MANGLE_TYPE_GLOBAL_MARKER | MANGLE_TYPE_LOCAL_MARKER
TypeName → // see notes below
ContainerType → // see notes below
// Operators
Operator →
LogicalComplement → EX// Markers
BitwiseComplement → TI
Less → LE
Greater → GT
LessEqual → LEEQ
GreaterEqual → GTEQ
Equality → EQEQ
Inequality → EXEQ
Addition → PL
Subtraction → MI
Multiplication → ST
Division → SL
BitwiseAnd → AN
BitwiseOr → BA
BitwiseXor → CA
Remainder → PE
LeftShift → LELE
SignedRightShift → GTGT
UnsignedRightShift → GTGTGT
AdditionAssign → PLEQ
SubtractionAssign → MIEQ
MultipliationAssign → STEQ
DivisionAssign → SLEQ
RemainderAssign → PEEQ
LeftShiftAssign → LELEEQ
RightShiftAssign → GTGTEQ
UnsignedRightShiftAssign → GTGTGTEQ
BitwiseAndAssign → ANEQ
BitwiseXorAssign → CAEQ
BitwiseOrAssign → BAEQ
ArrayAccess → OBCB
ArrayAccessAssign → OBCBEQ