Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9)

Unified Diff: tools/gn/token.cc

Issue 21114002: Add initial prototype for the GN meta-buildsystem. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add owners and readme Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gn/token.h ('k') | tools/gn/tokenizer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/gn/token.cc
diff --git a/tools/gn/token.cc b/tools/gn/token.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cbce5e75d07050aa1eb474a8e98ec66cac2f984c
--- /dev/null
+++ b/tools/gn/token.cc
@@ -0,0 +1,60 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "tools/gn/token.h"
+
+#include "base/logging.h"
+
+namespace {
+
+std::string UnescapeString(const base::StringPiece& input) {
+ std::string result;
+ result.reserve(input.size());
+
+ for (size_t i = 0; i < input.size(); i++) {
+ if (input[i] == '\\') {
+ DCHECK(i < input.size() - 1); // Last char shouldn't be a backslash or
+ // it would have escaped the terminator.
+ i++; // Skip backslash, next char is a literal.
+ }
+ result.push_back(input[i]);
+ }
+ return result;
+}
+
+} // namespace
+
+Token::Token() : type_(INVALID), value_() {
+}
+
+Token::Token(const Location& location,
+ Type t,
+ const base::StringPiece& v)
+ : type_(t),
+ value_(v),
+ location_(location) {
+}
+
+bool Token::IsIdentifierEqualTo(const char* v) const {
+ return type_ == IDENTIFIER && value_ == v;
+}
+
+bool Token::IsOperatorEqualTo(const char* v) const {
+ return type_ == OPERATOR && value_ == v;
+}
+
+bool Token::IsScoperEqualTo(const char* v) const {
+ return type_ == SCOPER && value_ == v;
+}
+
+bool Token::IsStringEqualTo(const char* v) const {
+ return type_ == STRING && value_ == v;
+}
+
+std::string Token::StringValue() const {
+ DCHECK(type() == STRING);
+
+ // Trim off the string terminators at the end.
+ return UnescapeString(value_.substr(1, value_.size() - 2));
+}
« no previous file with comments | « tools/gn/token.h ('k') | tools/gn/tokenizer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698