aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/bookmaker/bookmaker.h7
-rw-r--r--tools/bookmaker/includeParser.cpp50
-rw-r--r--tools/bookmaker/includeWriter.cpp6
3 files changed, 25 insertions, 38 deletions
diff --git a/tools/bookmaker/bookmaker.h b/tools/bookmaker/bookmaker.h
index b2654409d0..968644f8b1 100644
--- a/tools/bookmaker/bookmaker.h
+++ b/tools/bookmaker/bookmaker.h
@@ -1643,6 +1643,7 @@ public:
fInBrace = nullptr;
fIncludeWord = nullptr;
fLastObject = nullptr;
+ fAttrDeprecated = nullptr;
fPrev = '\0';
fInChar = false;
fInCharCommentString = false;
@@ -1815,6 +1816,9 @@ protected:
MarkType fMarkType;
};
+ static const char gAttrDeprecated[];
+ static const size_t kAttrDeprecatedLen;
+
DefinitionMap fMaps[Last_MarkType + 1];
unordered_map<string, Definition> fIncludeMap;
unordered_map<string, IClassDefinition> fIClassMap;
@@ -1829,6 +1833,7 @@ protected:
Definition* fInBrace;
Definition* fLastObject;
Definition* fPriorEnum;
+ const Definition* fAttrDeprecated;
int fPriorIndex;
const char* fIncludeWord;
char fPrev;
@@ -1938,7 +1943,6 @@ public:
fEnumDef = nullptr;
fMethodDef = nullptr;
fBmhStructDef = nullptr;
- fAttrDeprecated = nullptr;
fInStruct = false;
fWroteMethod = false;
fIndentNext = false;
@@ -1961,7 +1965,6 @@ private:
const Definition* fEnumDef;
const Definition* fMethodDef;
const Definition* fBmhStructDef;
- const Definition* fAttrDeprecated;
const char* fContinuation; // used to construct paren-qualified method name
int fAnonymousEnumCount;
int fEnumItemValueTab;
diff --git a/tools/bookmaker/includeParser.cpp b/tools/bookmaker/includeParser.cpp
index c69af7a05a..900617667c 100644
--- a/tools/bookmaker/includeParser.cpp
+++ b/tools/bookmaker/includeParser.cpp
@@ -9,6 +9,9 @@
#include "SkOSFile.h"
#include "SkOSPath.h"
+const char IncludeParser::gAttrDeprecated[] = "SK_ATTR_DEPRECATED";
+const size_t IncludeParser::kAttrDeprecatedLen = sizeof(gAttrDeprecated) - 1;
+
const IncludeKey kKeyWords[] = {
{ "", KeyWord::kNone, KeyProperty::kNone },
{ "SK_API", KeyWord::kSK_API, KeyProperty::kModifier },
@@ -329,7 +332,8 @@ bool IncludeParser::crossCheck(BmhParser& bmhParser) {
}
}
if (!def) {
- if ("SK_ATTR_DEPRECATED" == token.fName) {
+ if (gAttrDeprecated == token.fName) {
+ fAttrDeprecated = &token;
break;
}
if (0 == token.fName.find("SkDEBUGCODE")) {
@@ -353,6 +357,9 @@ bool IncludeParser::crossCheck(BmhParser& bmhParser) {
if (MarkType::kDefinedBy == def->fMarkType) {
def->fParent->fVisited = true;
}
+ if (token.fDeprecated && !def->fDeprecated) {
+ fFailed = !def->reportError<bool>("expect bmh to be marked deprecated");
+ }
} else {
SkDebugf("method differs from bmh: %s\n", fullName.c_str());
fFailed = true;
@@ -1749,7 +1756,8 @@ bool IncludeParser::parseObject(Definition* child, Definition* markupDef) {
child->fStart, fLastObject->fLineCount);
if (!checkDeprecated.eof()) {
checkDeprecated.skipWhiteSpace();
- if (checkDeprecated.startsWith("SK_ATTR_DEPRECATED")) {
+ if (checkDeprecated.startsWith(gAttrDeprecated)) {
+ fAttrDeprecated = child;
break;
}
}
@@ -1759,7 +1767,8 @@ bool IncludeParser::parseObject(Definition* child, Definition* markupDef) {
std::advance(tokenIter, child->fParentIndex);
tokenIter = std::prev(tokenIter);
TextParser previousToken(&*tokenIter);
- if (previousToken.startsWith("SK_ATTR_DEPRECATED")) {
+ if (previousToken.startsWith(gAttrDeprecated)) {
+ fAttrDeprecated = &*tokenIter;
break;
}
if (Bracket::kPound == child->fParent->fBracket &&
@@ -1774,6 +1783,11 @@ bool IncludeParser::parseObject(Definition* child, Definition* markupDef) {
if (!this->parseMethod(child, markupDef)) {
return child->reportError<bool>("failed to parse method");
}
+ if (fAttrDeprecated) {
+ Definition* lastMethod = &markupDef->fTokens.back();
+ lastMethod->fDeprecated = true;
+ fAttrDeprecated = nullptr;
+ }
break;
case Bracket::kSlashSlash:
case Bracket::kSlashStar:
@@ -2047,35 +2061,7 @@ bool IncludeParser::parseChar() {
']' == test ? Bracket::kSquare : Bracket::kBrace) == this->topBracket()) {
this->popBracket();
if (!fInFunction) {
- bool deprecatedMacro = false;
- if (')' == test) {
- auto iter = fParent->fTokens.end();
- bool lookForWord = false;
- while (fParent->fTokens.begin() != iter) {
- --iter;
- if (lookForWord) {
- if (Definition::Type::kWord != iter->fType) {
- break;
- }
- string word(iter->fContentStart, iter->length());
- if ("SK_ATTR_EXTERNALLY_DEPRECATED" == word) {
- deprecatedMacro = true;
- // remove macro paren (would confuse method parsing later)
- fParent->fTokens.pop_back();
- fParent->fChildren.pop_back();
- }
- break;
- }
- if (Definition::Type::kBracket != iter->fType) {
- break;
- }
- if (Bracket::kParen != iter->fBracket) {
- break;
- }
- lookForWord = true;
- }
- }
- fInFunction = ')' == test && !deprecatedMacro;
+ fInFunction = ')' == test;
} else {
fInFunction = '}' != test;
}
diff --git a/tools/bookmaker/includeWriter.cpp b/tools/bookmaker/includeWriter.cpp
index 2442138ea2..7af7202e8c 100644
--- a/tools/bookmaker/includeWriter.cpp
+++ b/tools/bookmaker/includeWriter.cpp
@@ -1533,10 +1533,8 @@ bool IncludeWriter::populate(Definition* def, ParentPair* prevPair, RootDefiniti
memberStart = &child;
staticOnly = false;
}
- const char attrDeprecated[] = "SK_ATTR_DEPRECATED";
- const size_t attrDeprecatedLen = sizeof(attrDeprecated) - 1;
- if (attrDeprecatedLen == child.fContentEnd - child.fContentStart &&
- !strncmp(attrDeprecated, child.fStart, attrDeprecatedLen)) {
+ if (kAttrDeprecatedLen == (size_t) (child.fContentEnd - child.fContentStart) &&
+ !strncmp(gAttrDeprecated, child.fStart, kAttrDeprecatedLen)) {
fAttrDeprecated = &child;
}
continue;