| // 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/builder_record.h" | 
 |  | 
 | #include "tools/gn/item.h" | 
 |  | 
 | BuilderRecord::BuilderRecord(ItemType type, const Label& label) | 
 |     : type_(type), | 
 |       label_(label), | 
 |       originally_referenced_from_(nullptr), | 
 |       should_generate_(false), | 
 |       resolved_(false) {} | 
 |  | 
 | BuilderRecord::~BuilderRecord() = default; | 
 |  | 
 | // static | 
 | const char* BuilderRecord::GetNameForType(ItemType type) { | 
 |   switch (type) { | 
 |     case ITEM_TARGET: | 
 |       return "target"; | 
 |     case ITEM_CONFIG: | 
 |       return "config"; | 
 |     case ITEM_TOOLCHAIN: | 
 |       return "toolchain"; | 
 |     case ITEM_POOL: | 
 |       return "pool"; | 
 |     case ITEM_UNKNOWN: | 
 |     default: | 
 |       return "unknown"; | 
 |   } | 
 | } | 
 |  | 
 | // static | 
 | bool BuilderRecord::IsItemOfType(const Item* item, ItemType type) { | 
 |   switch (type) { | 
 |     case ITEM_TARGET: | 
 |       return !!item->AsTarget(); | 
 |     case ITEM_CONFIG: | 
 |       return !!item->AsConfig(); | 
 |     case ITEM_TOOLCHAIN: | 
 |       return !!item->AsToolchain(); | 
 |     case ITEM_POOL: | 
 |       return !!item->AsPool(); | 
 |     case ITEM_UNKNOWN: | 
 |     default: | 
 |       return false; | 
 |   } | 
 | } | 
 |  | 
 | // static | 
 | BuilderRecord::ItemType BuilderRecord::TypeOfItem(const Item* item) { | 
 |   if (item->AsTarget()) | 
 |     return ITEM_TARGET; | 
 |   if (item->AsConfig()) | 
 |     return ITEM_CONFIG; | 
 |   if (item->AsToolchain()) | 
 |     return ITEM_TOOLCHAIN; | 
 |   if (item->AsPool()) | 
 |     return ITEM_POOL; | 
 |  | 
 |   NOTREACHED(); | 
 |   return ITEM_UNKNOWN; | 
 | } | 
 |  | 
 | void BuilderRecord::AddDep(BuilderRecord* record) { | 
 |   all_deps_.insert(record); | 
 |   if (!record->resolved()) { | 
 |     unresolved_deps_.insert(record); | 
 |     record->waiting_on_resolution_.insert(this); | 
 |   } | 
 | } |