diff options
author | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-06-18 16:10:59 +0200 |
---|---|---|
committer | Erick Ochoa <erick.ochoa@theobroma-systems.com> | 2020-06-18 19:21:40 +0200 |
commit | 06e71a7c2b914b3dba71c3c1032d58abb3f52046 (patch) | |
tree | bfd8c707f7342786598f7dae7994487cb603f90d /gcc/expr-accessor.c | |
parent | 40aaf5f878de333caa96e7758fe758948dfd568e (diff) |
better type accessor
Diffstat (limited to 'gcc/expr-accessor.c')
-rw-r--r-- | gcc/expr-accessor.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/gcc/expr-accessor.c b/gcc/expr-accessor.c index 249558f0c68..6169f6d6b52 100644 --- a/gcc/expr-accessor.c +++ b/gcc/expr-accessor.c @@ -34,27 +34,14 @@ #include "type-stringifier.hpp" #include "expr-accessor.hpp" #include "expr-walker.hpp" +#include "type-accessor.hpp" void ExprAccessor::add_all_fields_in_struct(const_tree t) { - const enum tree_code c = TREE_CODE(t); - const bool is_record = RECORD_TYPE == c; - if (!is_record) return; - - const bool record_already_in_map = record_field_map.find(t) != record_field_map.end(); - field_access_map_t field_map; - field_map = record_already_in_map ? record_field_map[t] : field_map; - - // Let's add all fields to the field map as empty. - for (tree field = TYPE_FIELDS(t); field; field = DECL_CHAIN(field)) - { - const bool field_already_in_map_2 = field_map.find(field) != field_map.end(); - if (field_already_in_map_2) continue; - field_map[field] = Empty; - } - - record_field_map[t] = field_map; + // Inefficient + TypeAccessor typeAccessor(record_field_map); + typeAccessor.walk(t); } void |