diff options
Diffstat (limited to 'src/format/mangling/dex/type_gram.y')
-rw-r--r-- | src/format/mangling/dex/type_gram.y | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/src/format/mangling/dex/type_gram.y b/src/format/mangling/dex/type_gram.y index 1176bd2..d5c3f26 100644 --- a/src/format/mangling/dex/type_gram.y +++ b/src/format/mangling/dex/type_gram.y @@ -23,6 +23,7 @@ bool demangle_dex_type(GDexDemangler *, const char *); #include "../../../analysis/types/basic.h" #include "../../../analysis/types/cse.h" +#include "../../../common/extstr.h" } @@ -45,7 +46,7 @@ bool demangle_dex_type(GDexDemangler *, const char *); %type <type> type_descriptor field_type_descriptor non_array_field_type_descriptor full_class_name -%type <text> TEXT +%type <text> TEXT simple_name %{ @@ -87,18 +88,15 @@ non_array_field_type_descriptor: | L full_class_name SEMICOLON { $$ = $2; } full_class_name: - TEXT { $$ = g_class_enum_type_new(CET_CLASS, $1); } - | full_class_name SLASH TEXT { + simple_name { $$ = g_class_enum_type_new(CET_CLASS, $1); } + | full_class_name SLASH simple_name { $$ = g_class_enum_type_new(CET_CLASS, $3); g_data_type_set_namespace($$, $1); g_object_unref($1); } - | full_class_name DOLLAR TEXT { - $$ = g_class_enum_type_new(CET_CLASS, $3); - g_data_type_set_namespace($$, $1); - g_object_unref($1); - } - +simple_name: + TEXT { $$ = strdup($1); } + | simple_name TEXT { $$ = stradd($1, $2); } %% |