naiveproxy/tools/gn/parse_node_value_adapter.cc
2018-01-29 00:30:36 +08:00

48 lines
1.4 KiB
C++

// Copyright 2016 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/parse_node_value_adapter.h"
#include "tools/gn/parse_tree.h"
#include "tools/gn/scope.h"
ParseNodeValueAdapter::ParseNodeValueAdapter() : ref_(nullptr) {
}
ParseNodeValueAdapter::~ParseNodeValueAdapter() {
}
bool ParseNodeValueAdapter::Init(Scope* scope,
const ParseNode* node,
Err* err) {
const IdentifierNode* identifier = node->AsIdentifier();
if (identifier) {
ref_ = scope->GetValue(identifier->value().value(), true);
if (!ref_) {
identifier->MakeErrorDescribing("Undefined identifier");
return false;
}
return true;
}
temporary_ = node->Execute(scope, err);
return !err->has_error();
}
bool ParseNodeValueAdapter::InitForType(Scope* scope,
const ParseNode* node,
Value::Type type,
Err* err) {
if (!Init(scope, node, err))
return false;
if (get().VerifyTypeIs(type, err))
return true;
// Fix up the error range (see class comment in the header file) to be the
// identifier node rather than the original value.
*err = Err(node, err->message(), err->help_text());
return false;
}