Add parents (de)serialization in pip_cmg
This commit is contained in:
@@ -24,6 +24,10 @@
|
||||
|
||||
void writeGetterTypeMembers(Runtime & rt, const PICodeParser::Entity * e, PIString var_prefix) {
|
||||
if (var_prefix.isNotEmpty() && !var_prefix.endsWith('.')) var_prefix += ".";
|
||||
for (const PICodeParser::Entity * p: e->parents) {
|
||||
if (p->is_anonymous) continue;
|
||||
writeGetterTypeMembers(rt, p, var_prefix);
|
||||
}
|
||||
PISet<int> used_id;
|
||||
for (const PICodeParser::Member & m: e->members) {
|
||||
if (m.is_type_ptr || !m.dims.isEmpty() || (m.visibility != PICodeParser::Public)) continue;
|
||||
@@ -43,6 +47,10 @@ void writeGetterTypeMembers(Runtime & rt, const PICodeParser::Entity * e, PIStri
|
||||
|
||||
void writeGetterValueMembers(Runtime & rt, const PICodeParser::Entity * e, PIString var_prefix) {
|
||||
if (var_prefix.isNotEmpty() && !var_prefix.endsWith('.')) var_prefix += ".";
|
||||
for (const PICodeParser::Entity * p: e->parents) {
|
||||
if (p->is_anonymous) continue;
|
||||
writeGetterValueMembers(rt, p, var_prefix);
|
||||
}
|
||||
PISet<int> used_id;
|
||||
for (const PICodeParser::Member & m: e->members) {
|
||||
if (m.is_type_ptr || !m.dims.isEmpty() || (m.visibility != PICodeParser::Public)) continue;
|
||||
@@ -65,6 +73,10 @@ void writeGetterValueMembers(Runtime & rt, const PICodeParser::Entity * e, PIStr
|
||||
|
||||
void writeGetterOffsetMembers(Runtime & rt, const PICodeParser::Entity * e, PIString entity_name, PIString var_prefix) {
|
||||
if (var_prefix.isNotEmpty() && !var_prefix.endsWith('.')) var_prefix += ".";
|
||||
for (const PICodeParser::Entity * p: e->parents) {
|
||||
if (p->is_anonymous) continue;
|
||||
writeGetterOffsetMembers(rt, p, entity_name, var_prefix);
|
||||
}
|
||||
PISet<int> used_id;
|
||||
for (const PICodeParser::Member & m: e->members) {
|
||||
if (m.is_type_ptr || !m.dims.isEmpty() || m.isBitfield() || (m.visibility != PICodeParser::Public)) continue;
|
||||
@@ -117,5 +129,9 @@ bool needClassGetter(const PICodeParser::Entity * e) {
|
||||
if (m.attributes[PICodeParser::Static]) continue;
|
||||
return true;
|
||||
}
|
||||
for (const PICodeParser::Entity * p: e->parents) {
|
||||
if (p->is_anonymous) continue;
|
||||
if (needClassGetter(p)) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user