git-svn-id: svn://db.shs.com.ru/pip@775 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5

This commit is contained in:
2019-04-08 07:52:48 +00:00
parent 1307b25994
commit 36cd98365a
3 changed files with 50 additions and 24 deletions

View File

@@ -285,8 +285,20 @@ void makeClassStreamHeader(PIFile & f, const PICodeParser::Entity * e) {
}
void makeGetter(PIFile & f, const PICodeParser::Entity * e) {
f << "\nPIByteArray getter" << toCName(e->name) << "(const void * p, const char * name) {\n";
void makeGetterType(PIFile & f, const PICodeParser::Entity * e) {
f << "\nconst char * getterType" << toCName(e->name) << "(const char * name) {\n";
f << "\tif (!name) return \"\";\n";
piForeachC (PICodeParser::Member & m, e->members) {
if (m.is_type_ptr || m.isBitfield() || !m.dims.isEmpty() || (m.visibility != PICodeParser::Public))
continue;
f << "\tif (strcmp(name, \"" << m.name << "\") == 0) return \"" << m.type << "\";\n";
}
f << "\treturn \"\";\n}\n";
}
void makeGetterValue(PIFile & f, const PICodeParser::Entity * e) {
f << "\nPIByteArray getterValue" << toCName(e->name) << "(const void * p, const char * name) {\n";
f << "\tPIByteArray ret;\n";
f << "\tif (!p || !name) return ret;\n";
f << "\t" << e->name << " * o = (" << e->name << "*)p;\n";
@@ -298,11 +310,6 @@ void makeGetter(PIFile & f, const PICodeParser::Entity * e) {
f << "\treturn ret;\n}\n";
}
/*
void makeGetterHeader(PIFile & f, const PICodeParser::Entity * e) {
f << "\nPIByteArray getter" << toCName(e->name) << "(const void * p, const char * name);";
}
*/
void writeModel(PICodeParser & parser, PICLI & cli, const PIString out, bool meta, bool enums, bool streams, bool texts, bool getters) {
PIVector<const PICodeParser::Entity * > ventities;
@@ -384,7 +391,8 @@ void writeModel(PICodeParser & parser, PICLI & cli, const PIString out, bool met
f << "\n\n// Getter funtions\n";
piForeachC (PICodeParser::Entity * e, parser.entities) {
if (!e->has_name || e->name.startsWith("_PI")) continue;
makeGetter(f, e);
makeGetterType(f, e);
makeGetterValue(f, e);
}
}
f << "\n\n// Metainformation\n\n__ClassInfo_" << defname << "_Initializer__::__ClassInfo_" << defname << "_Initializer__() {\n";
@@ -413,7 +421,8 @@ void writeModel(PICodeParser & parser, PICLI & cli, const PIString out, bool met
f << "\n// Getters\n";
piForeachC (PICodeParser::Entity * e, parser.entities) {
if (!e->has_name || e->name.startsWith("_PI")) continue;
f << "\t(*accessFunctions)[\"" << e->name << "\"] = getter" << toCName(e->name) << ";\n";
f << "\t(*accessValueFunctions)[\"" << e->name << "\"] = getterValue" << toCName(e->name) << ";\n";
f << "\t(*accessTypeFunctions)[\"" << e->name << "\"] = getterType" << toCName(e->name) << ";\n";
}
}
f << "}\n";
@@ -458,14 +467,6 @@ const PIVariant & arg1 = PIVariant(), const PIVariant & arg2 = PIVariant(), cons
makeClassStreamHeader(f, e);
}
}
/*if (getters) {
f << "\n\n// Getter funtions\n";
piForeachC (PICodeParser::Entity * e, parser.entities) {
if (!e->has_name || e->name.startsWith("_PI")) continue;
makeGetterHeader(f, e);
}
f << "\n";
}*/
if (meta || enums || getters) {
f << "\n\n// Metainformation\n\nclass __ClassInfo_" << defname << "_Initializer__ {\n";
f << "public:\n\t__ClassInfo_" << defname << "_Initializer__();\n\tstatic bool _inited_;\n};\n";