- 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:
JesusFreke@JesusFreke.com 2009-06-20 20:00:29 +00:00
parent 57b919fdf2
commit 1c9fcdee6d
3 changed files with 16 additions and 8 deletions

View File

@ -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,6 +880,7 @@ 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
@ -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

View File

@ -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

View File

@ -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,6 +263,7 @@ 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); }