mirror of
https://github.com/revanced/smali.git
synced 2025-05-04 16:44:25 +02:00
- Fixed an issue where smali didn't support class, method or field declarations with no access flags
- Added support for "null" encoded value literals git-svn-id: https://smali.googlecode.com/svn/trunk@174 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
parent
57b919fdf2
commit
1c9fcdee6d
@ -198,7 +198,7 @@ import java.util.ArrayDeque;
|
|||||||
CLASS_PHRASE
|
CLASS_PHRASE
|
||||||
: CLASS_DIRECTIVE_EMIT
|
: CLASS_DIRECTIVE_EMIT
|
||||||
WS
|
WS
|
||||||
(CLASS_ACCESS_SPEC_EMIT WS)+
|
(CLASS_ACCESS_SPEC_EMIT WS)*
|
||||||
CLASS_DESCRIPTOR_EMIT;
|
CLASS_DESCRIPTOR_EMIT;
|
||||||
|
|
||||||
SUPER_PHRASE
|
SUPER_PHRASE
|
||||||
@ -219,7 +219,7 @@ SOURCE_PHRASE
|
|||||||
FIELD_PHRASE
|
FIELD_PHRASE
|
||||||
: FIELD_DIRECTIVE_EMIT
|
: FIELD_DIRECTIVE_EMIT
|
||||||
WS
|
WS
|
||||||
(FIELD_ACCESS_SPEC_EMIT WS)+
|
(FIELD_ACCESS_SPEC_EMIT WS)*
|
||||||
MEMBER_NAME_EMIT
|
MEMBER_NAME_EMIT
|
||||||
COLON_EMIT
|
COLON_EMIT
|
||||||
NONVOID_TYPE_DESCRIPTOR_EMITCHILD
|
NONVOID_TYPE_DESCRIPTOR_EMITCHILD
|
||||||
@ -232,7 +232,7 @@ END_FIELD_PHRASE
|
|||||||
METHOD_PHRASE
|
METHOD_PHRASE
|
||||||
: METHOD_DIRECTIVE_EMIT
|
: METHOD_DIRECTIVE_EMIT
|
||||||
WS
|
WS
|
||||||
(METHOD_ACCESS_SPEC_EMIT WS)+
|
(METHOD_ACCESS_SPEC_EMIT WS)*
|
||||||
MEMBER_NAME_EMIT
|
MEMBER_NAME_EMIT
|
||||||
METHOD_PROTOTYPE_EMITCHILDREN;
|
METHOD_PROTOTYPE_EMITCHILDREN;
|
||||||
|
|
||||||
@ -880,6 +880,7 @@ fragment LITERAL_EMITCHILD
|
|||||||
| DOUBLE_LITERAL_EMIT
|
| DOUBLE_LITERAL_EMIT
|
||||||
| CHAR_LITERAL_EMIT
|
| CHAR_LITERAL_EMIT
|
||||||
| BOOL_LITERAL_EMIT
|
| BOOL_LITERAL_EMIT
|
||||||
|
| NULL_LITERAL_EMIT
|
||||||
| ARRAY_LITERAL_EMITCHILDREN
|
| ARRAY_LITERAL_EMITCHILDREN
|
||||||
| SUBANNOTATION_EMITCHILDREN
|
| SUBANNOTATION_EMITCHILDREN
|
||||||
| TYPE_FIELD_METHOD_LITERAL_EMITCHILDREN
|
| TYPE_FIELD_METHOD_LITERAL_EMITCHILDREN
|
||||||
@ -1080,6 +1081,11 @@ fragment CHAR_LITERAL[StringBuilder sb]
|
|||||||
'\'' {sb.append("'");}
|
'\'' {sb.append("'");}
|
||||||
;
|
;
|
||||||
|
|
||||||
|
fragment NULL_LITERAL_EMIT
|
||||||
|
: NULL_LITERAL {emit($NULL_LITERAL, NULL_LITERAL);};
|
||||||
|
fragment NULL_LITERAL
|
||||||
|
: 'null';
|
||||||
|
|
||||||
fragment BOOL_LITERAL_EMIT
|
fragment BOOL_LITERAL_EMIT
|
||||||
: BOOL_LITERAL {emit($BOOL_LITERAL, BOOL_LITERAL);};
|
: BOOL_LITERAL {emit($BOOL_LITERAL, BOOL_LITERAL);};
|
||||||
fragment BOOL_LITERAL
|
fragment BOOL_LITERAL
|
||||||
|
@ -214,7 +214,7 @@ source_spec
|
|||||||
: SOURCE_DIRECTIVE STRING_LITERAL -> ^(I_SOURCE[$start, "I_SOURCE"] STRING_LITERAL);
|
: SOURCE_DIRECTIVE STRING_LITERAL -> ^(I_SOURCE[$start, "I_SOURCE"] STRING_LITERAL);
|
||||||
|
|
||||||
access_list
|
access_list
|
||||||
: ACCESS_SPEC+ -> ^(I_ACCESS_LIST[$start,"I_ACCESS_LIST"] ACCESS_SPEC+);
|
: ACCESS_SPEC* -> ^(I_ACCESS_LIST[$start,"I_ACCESS_LIST"] ACCESS_SPEC*);
|
||||||
|
|
||||||
|
|
||||||
field : FIELD_DIRECTIVE access_list MEMBER_NAME nonvoid_type_descriptor literal?
|
field : FIELD_DIRECTIVE access_list MEMBER_NAME nonvoid_type_descriptor literal?
|
||||||
@ -591,6 +591,7 @@ literal
|
|||||||
| CHAR_LITERAL
|
| CHAR_LITERAL
|
||||||
| STRING_LITERAL
|
| STRING_LITERAL
|
||||||
| BOOL_LITERAL
|
| BOOL_LITERAL
|
||||||
|
| NULL_LITERAL
|
||||||
| array_literal
|
| array_literal
|
||||||
| subannotation
|
| subannotation
|
||||||
| type_field_method_literal
|
| type_field_method_literal
|
||||||
|
@ -188,7 +188,7 @@ access_list returns [int value]
|
|||||||
{
|
{
|
||||||
$value |= AccessFlags.getAccessFlag($ACCESS_SPEC.getText()).getValue();
|
$value |= AccessFlags.getAccessFlag($ACCESS_SPEC.getText()).getValue();
|
||||||
}
|
}
|
||||||
)+);
|
)*);
|
||||||
|
|
||||||
fields returns[List<AnnotationDirectoryItem.FieldAnnotation> fieldAnnotationSets]
|
fields returns[List<AnnotationDirectoryItem.FieldAnnotation> fieldAnnotationSets]
|
||||||
: ^(I_FIELDS
|
: ^(I_FIELDS
|
||||||
@ -263,6 +263,7 @@ literal returns[EncodedValue encodedValue]
|
|||||||
| char_literal { $encodedValue = new EncodedValue(dexFile, new CharEncodedValueSubField($char_literal.value)); }
|
| char_literal { $encodedValue = new EncodedValue(dexFile, new CharEncodedValueSubField($char_literal.value)); }
|
||||||
| string_literal { $encodedValue = new EncodedValue(dexFile, new EncodedIndexedItemReference(dexFile, new StringIdItem(dexFile, $string_literal.value))); }
|
| string_literal { $encodedValue = new EncodedValue(dexFile, new EncodedIndexedItemReference(dexFile, new StringIdItem(dexFile, $string_literal.value))); }
|
||||||
| bool_literal { $encodedValue = new EncodedValue(dexFile, new BoolEncodedValueSubField($bool_literal.value)); }
|
| bool_literal { $encodedValue = new EncodedValue(dexFile, new BoolEncodedValueSubField($bool_literal.value)); }
|
||||||
|
| NULL_LITERAL { $encodedValue = new EncodedValue(dexFile, new NullEncodedValueSubField()); }
|
||||||
| type_descriptor { $encodedValue = new EncodedValue(dexFile, new EncodedIndexedItemReference(dexFile, $type_descriptor.type)); }
|
| type_descriptor { $encodedValue = new EncodedValue(dexFile, new EncodedIndexedItemReference(dexFile, $type_descriptor.type)); }
|
||||||
| array_literal { $encodedValue = new EncodedValue(dexFile, new ArrayEncodedValueSubField(dexFile, $array_literal.values)); }
|
| array_literal { $encodedValue = new EncodedValue(dexFile, new ArrayEncodedValueSubField(dexFile, $array_literal.values)); }
|
||||||
| subannotation { $encodedValue = new EncodedValue(dexFile, $subannotation.value); }
|
| subannotation { $encodedValue = new EncodedValue(dexFile, $subannotation.value); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user