mirror of
https://github.com/revanced/smali.git
synced 2025-05-04 08:34: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_DIRECTIVE_EMIT
|
||||
WS
|
||||
(CLASS_ACCESS_SPEC_EMIT WS)+
|
||||
(CLASS_ACCESS_SPEC_EMIT WS)*
|
||||
CLASS_DESCRIPTOR_EMIT;
|
||||
|
||||
SUPER_PHRASE
|
||||
@ -219,7 +219,7 @@ SOURCE_PHRASE
|
||||
FIELD_PHRASE
|
||||
: FIELD_DIRECTIVE_EMIT
|
||||
WS
|
||||
(FIELD_ACCESS_SPEC_EMIT WS)+
|
||||
(FIELD_ACCESS_SPEC_EMIT WS)*
|
||||
MEMBER_NAME_EMIT
|
||||
COLON_EMIT
|
||||
NONVOID_TYPE_DESCRIPTOR_EMITCHILD
|
||||
@ -232,7 +232,7 @@ END_FIELD_PHRASE
|
||||
METHOD_PHRASE
|
||||
: METHOD_DIRECTIVE_EMIT
|
||||
WS
|
||||
(METHOD_ACCESS_SPEC_EMIT WS)+
|
||||
(METHOD_ACCESS_SPEC_EMIT WS)*
|
||||
MEMBER_NAME_EMIT
|
||||
METHOD_PROTOTYPE_EMITCHILDREN;
|
||||
|
||||
@ -880,11 +880,12 @@ fragment LITERAL_EMITCHILD
|
||||
| DOUBLE_LITERAL_EMIT
|
||||
| CHAR_LITERAL_EMIT
|
||||
| BOOL_LITERAL_EMIT
|
||||
| NULL_LITERAL_EMIT
|
||||
| ARRAY_LITERAL_EMITCHILDREN
|
||||
| SUBANNOTATION_EMITCHILDREN
|
||||
| TYPE_FIELD_METHOD_LITERAL_EMITCHILDREN
|
||||
| ENUM_LITERAL_EMITCHILDREN;
|
||||
|
||||
|
||||
fragment SUBANNOTATION_EMITCHILDREN
|
||||
: SUBANNOTATION_START_EMIT
|
||||
WS
|
||||
@ -924,7 +925,7 @@ fragment ANNOTATION_VISIBILITY
|
||||
fragment ANNOTATION_ELEMENT_EMITCHILDREN
|
||||
: MEMBER_NAME_EMIT
|
||||
WS?
|
||||
EQUAL_EMIT
|
||||
EQUAL_EMIT
|
||||
WS?
|
||||
LITERAL_EMITCHILD;
|
||||
|
||||
@ -1080,6 +1081,11 @@ fragment CHAR_LITERAL[StringBuilder sb]
|
||||
'\'' {sb.append("'");}
|
||||
;
|
||||
|
||||
fragment NULL_LITERAL_EMIT
|
||||
: NULL_LITERAL {emit($NULL_LITERAL, NULL_LITERAL);};
|
||||
fragment NULL_LITERAL
|
||||
: 'null';
|
||||
|
||||
fragment BOOL_LITERAL_EMIT
|
||||
: BOOL_LITERAL {emit($BOOL_LITERAL, BOOL_LITERAL);};
|
||||
fragment BOOL_LITERAL
|
||||
|
@ -214,7 +214,7 @@ source_spec
|
||||
: SOURCE_DIRECTIVE STRING_LITERAL -> ^(I_SOURCE[$start, "I_SOURCE"] STRING_LITERAL);
|
||||
|
||||
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?
|
||||
@ -591,6 +591,7 @@ literal
|
||||
| CHAR_LITERAL
|
||||
| STRING_LITERAL
|
||||
| BOOL_LITERAL
|
||||
| NULL_LITERAL
|
||||
| array_literal
|
||||
| subannotation
|
||||
| type_field_method_literal
|
||||
|
@ -188,7 +188,7 @@ access_list returns [int value]
|
||||
{
|
||||
$value |= AccessFlags.getAccessFlag($ACCESS_SPEC.getText()).getValue();
|
||||
}
|
||||
)+);
|
||||
)*);
|
||||
|
||||
fields returns[List<AnnotationDirectoryItem.FieldAnnotation> fieldAnnotationSets]
|
||||
: ^(I_FIELDS
|
||||
@ -263,13 +263,14 @@ literal returns[EncodedValue encodedValue]
|
||||
| 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))); }
|
||||
| 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)); }
|
||||
| array_literal { $encodedValue = new EncodedValue(dexFile, new ArrayEncodedValueSubField(dexFile, $array_literal.values)); }
|
||||
| subannotation { $encodedValue = new EncodedValue(dexFile, $subannotation.value); }
|
||||
| field_literal { $encodedValue = new EncodedValue(dexFile, $field_literal.value); }
|
||||
| method_literal { $encodedValue = new EncodedValue(dexFile, $method_literal.value); }
|
||||
| enum_literal { $encodedValue = new EncodedValue(dexFile, $enum_literal.value); };
|
||||
|
||||
|
||||
|
||||
//everything but string
|
||||
fixed_size_literal returns[byte[\] value]
|
||||
|
Loading…
x
Reference in New Issue
Block a user