blob: b5f1944bd31d6a993e1ba928eac5c2190830871c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
#pragma once
#include <set>
class TypeStructuralEquality {
public:
TypeStructuralEquality() {};
bool equal(const_tree a, const_tree b);
protected:
virtual bool _equal(const_tree a, const_tree b);
private:
typedef std::set<const_tree> tset_t;
tset_t set_l;
tset_t set_r;
bool _equal_code(const_tree a, const_tree b);
bool _equal_wrapper(const_tree a, const_tree b);
#define TSE_FUNC_DECL(code) \
virtual bool _walk_ ## code (const_tree l, const_tree r)
TSE_FUNC_DECL(VOID_TYPE);
TSE_FUNC_DECL(COMPLEX_TYPE);
TSE_FUNC_DECL(INTEGER_TYPE);
TSE_FUNC_DECL(REAL_TYPE);
TSE_FUNC_DECL(FIXED_POINT_TYPE);
TSE_FUNC_DECL(POINTER_TYPE);
TSE_FUNC_DECL(ENUMERAL_TYPE);
TSE_FUNC_DECL(BOOLEAN_TYPE);
TSE_FUNC_DECL(OFFSET_TYPE);
TSE_FUNC_DECL(RECORD_TYPE);
TSE_FUNC_DECL(REFERENCE_TYPE);
TSE_FUNC_DECL(ARRAY_TYPE);
TSE_FUNC_DECL(UNION_TYPE);
TSE_FUNC_DECL(FUNCTION_TYPE);
TSE_FUNC_DECL(METHOD_TYPE);
const_tree left;
};
|