// 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() = default; 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; }