MethodNameStatic → MethodNameDynamic MANGLE_METHOD_NAME_END_MARKER containerType
MethodNameDynamic → EncodedMethodName paramTypes
// mangling method name
EncodedMethodName → m MethodTypeMarkers MethodName | ε
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 |
LocalInferred 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
// for reference types
cType → ClassOrInterfaceType | ArrayType
ClassOrInterfaceType → Qualifier MANGLE_TYPE_MARKER TypeName
Qualifier → MANGLE_TYPE_GLOBAL_MARKER | MANGLE_TYPE_LOCAL_MARKER
ArrayType → TiArray | JavaArray
TiArray → MANGLE_TYPE_MARKER MANGLE_TI_ARRAY_TYPE_MARKER
Qualifier BaseType
JavaArray → Qualifier MANGLE_TYPE_MARKER MANGLE_JAVA_ARRAY_MARKER BaseType
BaseType → PrimitiveType | cType
PrimitiveType → jboolean | jbyte | jchar | jdouble | jfloat | jint | jlong | jshort
TypeName → // see notes below
ContainerType → // see notes below
// Markers
MANGLE_LQI_NAMESPACE_MARKER "m"
MANGLE_LOCAL_NAMESPACE_MARKER "l"
MANGLE_NONSHARED_NAMESPACE_MARKER "n"
MANGLE_POLYSHARED_NAMESPACE_MARKER "p"
MANGLE_LQI_FORMAL_MARKER "M"
MANGLE_SHARING_INFERENCE_FORMAL_MARKER "s"
MANGLE_TYPE_NONSHARED_MARKER "n"
MANGLE_TYPE_POLYSHARED_MARKER "p"
MANGLE_TYPE_MARKER "T"
MANGLE_TYPE_GLOBAL_MARKER "P"
MANGLE_TYPE_LOCAL_MARKER "L"
MANGLE_TI_ARRAY_MARKER "B"
MANGLE_JAVA_ARRAY_MARKER "A"
Notes:
TypeName and ContainerType are either of the form n1s1n2s2n3s3...nksk, where ni is the length of the string
si and si is a member of the package si+1, or of
the form nc_n1s1n2s2n3s3...nksk where
si is the enclosing class of si+1. MethodName
may also take the latter form.