aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/parser/parser-header.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/parser/parser-header.cxx')
-rw-r--r--xsde/cxx/parser/parser-header.cxx38
1 files changed, 33 insertions, 5 deletions
diff --git a/xsde/cxx/parser/parser-header.cxx b/xsde/cxx/parser/parser-header.cxx
index 34f2119..5bc9cb7 100644
--- a/xsde/cxx/parser/parser-header.cxx
+++ b/xsde/cxx/parser/parser-header.cxx
@@ -28,6 +28,13 @@ namespace CXX
SemanticGraph::Type& base (e.inherits ().base ());
String fq_base (fq_name (base));
+ Boolean facets (false); // Whether we need to set facets.
+ if (validation)
+ {
+ StringBasedType t (facets);
+ t.dispatch (e);
+ }
+
os << "class " << name << ": public " <<
(mixin ? "virtual " : "") << fq_base
<< "{"
@@ -60,15 +67,22 @@ namespace CXX
<< "_dynamic_type () const;";
}
- if (tiein)
+ if (facets || tiein)
{
os << endl
<< "// Constructor." << endl
- << "//" << endl
- << name << " (" << fq_base << "* tiein);"
- << endl;
+ << "//" << endl;
- os << "// Implementation details." << endl
+ if (tiein)
+ os << name << " (" << fq_base << "* tiein);";
+ else
+ os << name << " ();";
+ }
+
+ if (tiein)
+ {
+ os << endl
+ << "// Implementation details." << endl
<< "//" << endl;
// If our base has pure virtual post, override it here.
@@ -87,6 +101,20 @@ namespace CXX
<< name << " (" << name << "*, void*);";
}
+ if (facets)
+ {
+ UnsignedLong enum_count (0);
+
+ for (Type::NamesIterator i (e.names_begin ()), end (e.names_end ());
+ i != end; ++i)
+ ++enum_count;
+
+ os << endl
+ << "protected:" << endl
+ << "static const char* const _xsde_" << name << "_enums_[" <<
+ enum_count << "UL];";
+ }
+
os << "};";
}
};