| Index: tools/gn/value.cc
|
| diff --git a/tools/gn/value.cc b/tools/gn/value.cc
|
| index 6bf78da2cfaf5753b7af7c6586a284f7c6edd29d..1fb7155dc1b609d410f884d5f3163b7b016ca760 100644
|
| --- a/tools/gn/value.cc
|
| +++ b/tools/gn/value.cc
|
| @@ -5,12 +5,12 @@
|
| #include "tools/gn/value.h"
|
|
|
| #include "base/strings/string_number_conversions.h"
|
| +#include "tools/gn/scope.h"
|
|
|
| Value::Value()
|
| : type_(NONE),
|
| boolean_value_(false),
|
| int_value_(0),
|
| - scope_value_(NULL),
|
| origin_(NULL) {
|
| }
|
|
|
| @@ -18,7 +18,6 @@ Value::Value(const ParseNode* origin, Type t)
|
| : type_(t),
|
| boolean_value_(false),
|
| int_value_(0),
|
| - scope_value_(NULL),
|
| origin_(origin) {
|
| }
|
|
|
| @@ -26,7 +25,6 @@ Value::Value(const ParseNode* origin, bool bool_val)
|
| : type_(BOOLEAN),
|
| boolean_value_(bool_val),
|
| int_value_(0),
|
| - scope_value_(NULL),
|
| origin_(origin) {
|
| }
|
|
|
| @@ -34,7 +32,6 @@ Value::Value(const ParseNode* origin, int64 int_val)
|
| : type_(INTEGER),
|
| boolean_value_(false),
|
| int_value_(int_val),
|
| - scope_value_(NULL),
|
| origin_(origin) {
|
| }
|
|
|
| @@ -43,7 +40,6 @@ 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);
|
| }
|
| @@ -53,22 +49,44 @@ 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)
|
| +Value::Value(const ParseNode* origin, scoped_ptr<Scope> scope)
|
| : type_(SCOPE),
|
| string_value_(),
|
| boolean_value_(false),
|
| int_value_(0),
|
| - scope_value_(scope),
|
| + scope_value_(scope.Pass()),
|
| origin_(origin) {
|
| }
|
|
|
| +Value::Value(const Value& other)
|
| + : type_(other.type_),
|
| + string_value_(other.string_value_),
|
| + boolean_value_(other.boolean_value_),
|
| + int_value_(other.int_value_),
|
| + list_value_(other.list_value_),
|
| + origin_(other.origin_) {
|
| + if (type() == SCOPE && other.scope_value_.get())
|
| + scope_value_ = other.scope_value_->MakeClosure();
|
| +}
|
| +
|
| Value::~Value() {
|
| }
|
|
|
| +Value& Value::operator=(const Value& other) {
|
| + type_ = other.type_;
|
| + string_value_ = other.string_value_;
|
| + boolean_value_ = other.boolean_value_;
|
| + int_value_ = other.int_value_;
|
| + list_value_ = other.list_value_;
|
| + if (type() == SCOPE && other.scope_value_.get())
|
| + scope_value_ = other.scope_value_->MakeClosure();
|
| + origin_ = other.origin_;
|
| + return *this;
|
| +}
|
| +
|
| void Value::RecursivelySetOrigin(const ParseNode* origin) {
|
| set_origin(origin);
|
| if (type_ == Value::LIST) {
|
| @@ -98,6 +116,11 @@ const char* Value::DescribeType(Type t) {
|
| }
|
| }
|
|
|
| +void Value::SetScopeValue(scoped_ptr<Scope> scope) {
|
| + DCHECK(type_ == SCOPE);
|
| + scope_value_ = scope.Pass();
|
| +}
|
| +
|
| std::string Value::ToString(bool quote_string) const {
|
| switch (type_) {
|
| case NONE:
|
| @@ -154,9 +177,10 @@ bool Value::operator==(const Value& other) const {
|
| }
|
| 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();
|
| + // Scopes are always considered not equal because there's currently
|
| + // no use case for comparing them, and it requires a bunch of complex
|
| + // iteration code.
|
| + return false;
|
| default:
|
| return false;
|
| }
|
|
|