aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools/bookmaker/includeParser.cpp
diff options
context:
space:
mode:
authorGravatar Cary Clark <caryclark@skia.org>2018-03-09 15:32:01 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-03-09 20:57:50 +0000
commitbbfda2583f5bff3b9b0c76e0bdb132ff0cce7f8d (patch)
tree6b71992ae1570ce6432b4aa53e9e3d56d342f724 /tools/bookmaker/includeParser.cpp
parent0fc41da384fdb7e52b3254b33d663e55912e7fea (diff)
add starting template support
some support for interfaces containing template <typename x> class x includeParser now correctly balances bracket indentions and builds correct hierarchy. Cross-check does not detect that the bmh definition is missing the class; then includeWriter asserts when the bmh class can't be found. TBR=caryclark@google.com Bug: skia:6898 Change-Id: Ibb70667ed4a6f8e553eec3924b56dfde737b4383 Reviewed-on: https://skia-review.googlesource.com/113460 Reviewed-by: Cary Clark <caryclark@skia.org> Commit-Queue: Cary Clark <caryclark@skia.org>
Diffstat (limited to 'tools/bookmaker/includeParser.cpp')
-rw-r--r--tools/bookmaker/includeParser.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/tools/bookmaker/includeParser.cpp b/tools/bookmaker/includeParser.cpp
index 07189dcc3f..c69af7a05a 100644
--- a/tools/bookmaker/includeParser.cpp
+++ b/tools/bookmaker/includeParser.cpp
@@ -1723,7 +1723,7 @@ bool IncludeParser::parseObject(Definition* child, Definition* markupDef) {
}
break;
case KeyWord::kTemplate:
- if (!this->parseTemplate()) {
+ if (!this->parseTemplate(child, markupDef)) {
return child->reportError<bool>("failed to parse template");
}
break;
@@ -1849,9 +1849,8 @@ bool IncludeParser::parseObject(Definition* child, Definition* markupDef) {
return true;
}
-bool IncludeParser::parseTemplate() {
-
- return true;
+bool IncludeParser::parseTemplate(Definition* child, Definition* markupDef) {
+ return this->parseObjects(child, markupDef);
}
bool IncludeParser::parseTypedef(Definition* child, Definition* markupDef) {
@@ -2142,7 +2141,8 @@ bool IncludeParser::parseChar() {
}
if (Definition::Type::kKeyWord == fParent->fType
&& KeyProperty::kObject == (kKeyWords[(int) fParent->fKeyWord].fProperty)) {
- if (KeyWord::kClass == fParent->fKeyWord && fParent->fParent &&
+ bool parentIsClass = KeyWord::kClass == fParent->fKeyWord;
+ if (parentIsClass && fParent->fParent &&
KeyWord::kEnum == fParent->fParent->fKeyWord) {
this->popObject();
}
@@ -2150,6 +2150,9 @@ bool IncludeParser::parseChar() {
fInEnum = false;
}
this->popObject();
+ if (parentIsClass && fParent && KeyWord::kTemplate == fParent->fKeyWord) {
+ this->popObject();
+ }
fPriorEnum = nullptr;
} else if (Definition::Type::kBracket == fParent->fType
&& fParent->fParent && Definition::Type::kKeyWord == fParent->fParent->fType