Index: tools/gn/value.cc |
diff --git a/tools/gn/value.cc b/tools/gn/value.cc |
index 659ebb9bb0b12517864a65e8203bd5a678212ecb..6bf78da2cfaf5753b7af7c6586a284f7c6edd29d 100644 |
--- a/tools/gn/value.cc |
+++ b/tools/gn/value.cc |
@@ -10,6 +10,7 @@ Value::Value() |
: type_(NONE), |
boolean_value_(false), |
int_value_(0), |
+ scope_value_(NULL), |
origin_(NULL) { |
} |
@@ -17,6 +18,7 @@ Value::Value(const ParseNode* origin, Type t) |
: type_(t), |
boolean_value_(false), |
int_value_(0), |
+ scope_value_(NULL), |
origin_(origin) { |
} |
@@ -24,6 +26,7 @@ Value::Value(const ParseNode* origin, bool bool_val) |
: type_(BOOLEAN), |
boolean_value_(bool_val), |
int_value_(0), |
+ scope_value_(NULL), |
origin_(origin) { |
} |
@@ -31,6 +34,7 @@ Value::Value(const ParseNode* origin, int64 int_val) |
: type_(INTEGER), |
boolean_value_(false), |
int_value_(int_val), |
+ scope_value_(NULL), |
origin_(origin) { |
} |
@@ -39,6 +43,7 @@ Value::Value(const ParseNode* origin, std::string str_val) |
string_value_(), |
boolean_value_(false), |
int_value_(0), |
+ scope_value_(NULL), |
origin_(origin) { |
string_value_.swap(str_val); |
} |
@@ -48,6 +53,16 @@ Value::Value(const ParseNode* origin, const char* str_val) |
string_value_(str_val), |
boolean_value_(false), |
int_value_(0), |
+ scope_value_(NULL), |
+ origin_(origin) { |
+} |
+ |
+Value::Value(const ParseNode* origin, Scope* scope) |
+ : type_(SCOPE), |
+ string_value_(), |
+ boolean_value_(false), |
+ int_value_(0), |
+ scope_value_(scope), |
origin_(origin) { |
} |
@@ -75,6 +90,8 @@ const char* Value::DescribeType(Type t) { |
return "string"; |
case LIST: |
return "list"; |
+ case SCOPE: |
+ return "scope"; |
default: |
NOTREACHED(); |
return "UNKNOWN"; |
@@ -103,6 +120,8 @@ std::string Value::ToString(bool quote_string) const { |
result.push_back(']'); |
return result; |
} |
+ case SCOPE: |
+ return std::string("<scope>"); |
} |
return std::string(); |
} |
@@ -134,6 +153,10 @@ bool Value::operator==(const Value& other) const { |
return false; |
} |
return true; |
+ case Value::SCOPE: |
+ // Its not clear what people mean when comparing scope values, so we test |
+ // for scope identity and not contents equality. |
+ return scope_value() == other.scope_value(); |
default: |
return false; |
} |