OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "tools/gn/loader.h" | 5 #include "tools/gn/loader.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "tools/gn/build_settings.h" | 10 #include "tools/gn/build_settings.h" |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
238 our_scope.set_item_collector(&collected_items); | 238 our_scope.set_item_collector(&collected_items); |
239 | 239 |
240 ScopedTrace trace(TraceItem::TRACE_FILE_EXECUTE, file_name.value()); | 240 ScopedTrace trace(TraceItem::TRACE_FILE_EXECUTE, file_name.value()); |
241 trace.SetToolchain(settings->toolchain_label()); | 241 trace.SetToolchain(settings->toolchain_label()); |
242 | 242 |
243 Err err; | 243 Err err; |
244 root->Execute(&our_scope, &err); | 244 root->Execute(&our_scope, &err); |
245 if (err.has_error()) | 245 if (err.has_error()) |
246 g_scheduler->FailWithError(err); | 246 g_scheduler->FailWithError(err); |
247 | 247 |
| 248 if (!our_scope.CheckForUnusedVars(&err)) |
| 249 g_scheduler->FailWithError(err); |
| 250 |
248 // Pass all of the items that were defined off to the builder. | 251 // Pass all of the items that were defined off to the builder. |
249 for (size_t i = 0; i < collected_items.size(); i++) | 252 for (size_t i = 0; i < collected_items.size(); i++) |
250 settings->build_settings()->ItemDefined(collected_items[i]->Pass()); | 253 settings->build_settings()->ItemDefined(collected_items[i]->Pass()); |
251 | 254 |
252 trace.Done(); | 255 trace.Done(); |
253 | 256 |
254 main_loop_->PostTask(FROM_HERE, base::Bind(&LoaderImpl::DidLoadFile, this)); | 257 main_loop_->PostTask(FROM_HERE, base::Bind(&LoaderImpl::DidLoadFile, this)); |
255 } | 258 } |
256 | 259 |
257 void LoaderImpl::BackgroundLoadBuildConfig( | 260 void LoaderImpl::BackgroundLoadBuildConfig( |
(...skipping 20 matching lines...) Expand all Loading... |
278 base_config->SetProperty(kDefaultToolchainKey, &default_toolchain_label); | 281 base_config->SetProperty(kDefaultToolchainKey, &default_toolchain_label); |
279 | 282 |
280 ScopedTrace trace(TraceItem::TRACE_FILE_EXECUTE, | 283 ScopedTrace trace(TraceItem::TRACE_FILE_EXECUTE, |
281 settings->build_settings()->build_config_file().value()); | 284 settings->build_settings()->build_config_file().value()); |
282 trace.SetToolchain(settings->toolchain_label()); | 285 trace.SetToolchain(settings->toolchain_label()); |
283 | 286 |
284 const BlockNode* root_block = root->AsBlock(); | 287 const BlockNode* root_block = root->AsBlock(); |
285 Err err; | 288 Err err; |
286 root_block->ExecuteBlockInScope(base_config, &err); | 289 root_block->ExecuteBlockInScope(base_config, &err); |
287 | 290 |
| 291 // Clear all private variables left in the scope. We want the root build |
| 292 // config to be like a .gni file in that variables beginning with an |
| 293 // underscore aren't exported. |
| 294 base_config->RemovePrivateIdentifiers(); |
| 295 |
288 trace.Done(); | 296 trace.Done(); |
289 | 297 |
290 if (err.has_error()) | 298 if (err.has_error()) |
291 g_scheduler->FailWithError(err); | 299 g_scheduler->FailWithError(err); |
292 | 300 |
293 base_config->ClearProcessingBuildConfig(); | 301 base_config->ClearProcessingBuildConfig(); |
294 if (settings->is_default()) { | 302 if (settings->is_default()) { |
295 // The default toolchain must have been set in the default build config | 303 // The default toolchain must have been set in the default build config |
296 // file. | 304 // file. |
297 if (default_toolchain_label.is_null()) { | 305 if (default_toolchain_label.is_null()) { |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 const SourceFile& file_name, | 394 const SourceFile& file_name, |
387 const base::Callback<void(const ParseNode*)>& callback, | 395 const base::Callback<void(const ParseNode*)>& callback, |
388 Err* err) { | 396 Err* err) { |
389 if (async_load_file_.is_null()) { | 397 if (async_load_file_.is_null()) { |
390 return g_scheduler->input_file_manager()->AsyncLoadFile( | 398 return g_scheduler->input_file_manager()->AsyncLoadFile( |
391 origin, build_settings, file_name, callback, err); | 399 origin, build_settings, file_name, callback, err); |
392 } | 400 } |
393 return async_load_file_.Run( | 401 return async_load_file_.Run( |
394 origin, build_settings, file_name, callback, err); | 402 origin, build_settings, file_name, callback, err); |
395 } | 403 } |
OLD | NEW |