aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/hybrid/parser-name-processor.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xsde/cxx/hybrid/parser-name-processor.cxx')
-rw-r--r--xsde/cxx/hybrid/parser-name-processor.cxx15
1 files changed, 15 insertions, 0 deletions
diff --git a/xsde/cxx/hybrid/parser-name-processor.cxx b/xsde/cxx/hybrid/parser-name-processor.cxx
index 482c195..c913766 100644
--- a/xsde/cxx/hybrid/parser-name-processor.cxx
+++ b/xsde/cxx/hybrid/parser-name-processor.cxx
@@ -126,6 +126,12 @@ namespace CXX
return t.context ().get<Boolean> ("fixed");
}
+ Boolean
+ recursive (SemanticGraph::Type& t)
+ {
+ return t.context ().count ("recursive");
+ }
+
public:
String
find_name (String const& n, String const& suffix, NameSet& set)
@@ -379,6 +385,15 @@ namespace CXX
cc.set ("pstate-type", state_type);
cc.set ("pstate", find_name (state_type, "_", set));
+
+ if (recursive (c))
+ {
+ cc.set ("pstate-first", find_name (state_type, "_first_", set));
+
+ if (c.inherits_p () && !recursive (c.inherits ().base ()))
+ cc.set ("pstate-top", find_name (state_type, "_top_", set));
+ }
+
cc.set ("pstate-base", find_name (base + L"_base", "_", set));
// State members are in a nested struct so use a new and