summaryrefslogtreecommitdiff
path: root/gcc/expr-accessor.c
diff options
context:
space:
mode:
authorErick Ochoa <erick.ochoa@theobroma-systems.com>2020-06-18 16:10:59 +0200
committerErick Ochoa <erick.ochoa@theobroma-systems.com>2020-06-18 19:21:40 +0200
commit06e71a7c2b914b3dba71c3c1032d58abb3f52046 (patch)
treebfd8c707f7342786598f7dae7994487cb603f90d /gcc/expr-accessor.c
parent40aaf5f878de333caa96e7758fe758948dfd568e (diff)
better type accessor
Diffstat (limited to 'gcc/expr-accessor.c')
-rw-r--r--gcc/expr-accessor.c21
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