Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1105)

Side by Side Diff: src/asmjs/asm-typer.cc

Issue 2553033002: [wasm] [asm.js] Avoid expensive GetLineNumber up front in asm-typer. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/asmjs/asm-typer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 the V8 project authors. All rights reserved. 1 // Copyright 2016 the V8 project 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 "src/asmjs/asm-typer.h" 5 #include "src/asmjs/asm-typer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 forward_definitions_(zone), 182 forward_definitions_(zone),
183 ffi_use_signatures_(zone), 183 ffi_use_signatures_(zone),
184 stdlib_types_(zone), 184 stdlib_types_(zone),
185 stdlib_math_types_(zone), 185 stdlib_math_types_(zone),
186 module_info_(VariableInfo::ForSpecialSymbol(zone_, kModule)), 186 module_info_(VariableInfo::ForSpecialSymbol(zone_, kModule)),
187 global_scope_(ZoneHashMap::kDefaultHashMapCapacity, 187 global_scope_(ZoneHashMap::kDefaultHashMapCapacity,
188 ZoneAllocationPolicy(zone)), 188 ZoneAllocationPolicy(zone)),
189 local_scope_(ZoneHashMap::kDefaultHashMapCapacity, 189 local_scope_(ZoneHashMap::kDefaultHashMapCapacity,
190 ZoneAllocationPolicy(zone)), 190 ZoneAllocationPolicy(zone)),
191 stack_limit_(isolate->stack_guard()->real_climit()), 191 stack_limit_(isolate->stack_guard()->real_climit()),
192 module_node_types_(zone_),
193 function_node_types_(zone_),
194 fround_type_(AsmType::FroundType(zone_)), 192 fround_type_(AsmType::FroundType(zone_)),
195 ffi_type_(AsmType::FFIType(zone_)), 193 ffi_type_(AsmType::FFIType(zone_)),
196 function_pointer_tables_(zone_) { 194 function_pointer_tables_(zone_) {
197 InitializeStdlib(); 195 InitializeStdlib();
198 } 196 }
199 197
200 namespace { 198 namespace {
201 bool ValidAsmIdentifier(Handle<String> name) { 199 bool ValidAsmIdentifier(Handle<String> name) {
202 static const char* kInvalidAsmNames[] = {"eval", "arguments"}; 200 static const char* kInvalidAsmNames[] = {"eval", "arguments"};
203 201
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
392 390
393 if (entry == nullptr && !module_name_.is_null() && 391 if (entry == nullptr && !module_name_.is_null() &&
394 module_name_->Equals(*variable->name())) { 392 module_name_->Equals(*variable->name())) {
395 return module_info_; 393 return module_info_;
396 } 394 }
397 395
398 return entry ? reinterpret_cast<VariableInfo*>(entry->value) : nullptr; 396 return entry ? reinterpret_cast<VariableInfo*>(entry->value) : nullptr;
399 } 397 }
400 398
401 void AsmTyper::AddForwardReference(VariableProxy* proxy, VariableInfo* info) { 399 void AsmTyper::AddForwardReference(VariableProxy* proxy, VariableInfo* info) {
402 info->SetFirstForwardUse(proxy->position() == kNoSourcePosition 400 info->SetFirstForwardUse(proxy->position());
403 ? -1
404 : script_->GetLineNumber(proxy->position()));
405 forward_definitions_.push_back(info); 401 forward_definitions_.push_back(info);
406 } 402 }
407 403
408 bool AsmTyper::AddGlobal(Variable* variable, VariableInfo* info) { 404 bool AsmTyper::AddGlobal(Variable* variable, VariableInfo* info) {
409 // We can't DCHECK(!in_function_) because function may actually install global 405 // We can't DCHECK(!in_function_) because function may actually install global
410 // names (forward defined functions and function tables.) 406 // names (forward defined functions and function tables.)
411 DCHECK(info->mutability() != VariableInfo::kInvalidMutability); 407 DCHECK(info->mutability() != VariableInfo::kInvalidMutability);
412 DCHECK(info->IsGlobal()); 408 DCHECK(info->IsGlobal());
413 DCHECK(ValidAsmIdentifier(variable->name())); 409 DCHECK(ValidAsmIdentifier(variable->name()));
414 410
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 } 698 }
703 } 699 }
704 700
705 // 6.2 ValidateExport 701 // 6.2 ValidateExport
706 if (module_return_ == nullptr) { 702 if (module_return_ == nullptr) {
707 FAIL(fun, "Missing asm.js module export."); 703 FAIL(fun, "Missing asm.js module export.");
708 } 704 }
709 705
710 for (auto* forward_def : forward_definitions_) { 706 for (auto* forward_def : forward_definitions_) {
711 if (forward_def->missing_definition()) { 707 if (forward_def->missing_definition()) {
712 FAIL_LINE(forward_def->source_location(), 708 int position = forward_def->source_location();
713 "Missing definition for forward declared identifier."); 709 int line =
710 position == kNoSourcePosition ? -1 : script_->GetLineNumber(position);
711
712 FAIL_LINE(line, "Missing definition for forward declared identifier.");
714 } 713 }
715 } 714 }
716 715
717 RECURSE(ValidateExport(module_return_)); 716 RECURSE(ValidateExport(module_return_));
718 717
719 if (!source_layout_.IsValid()) { 718 if (!source_layout_.IsValid()) {
720 FAIL(fun, "Invalid asm.js source code layout."); 719 FAIL(fun, "Invalid asm.js source code layout.");
721 } 720 }
722 721
723 return AsmType::Int(); // Any type that is not AsmType::None(); 722 return AsmType::Int(); // Any type that is not AsmType::None();
(...skipping 2154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2878 return true; 2877 return true;
2879 } 2878 }
2880 2879
2881 *error_message = typer.error_message(); 2880 *error_message = typer.error_message();
2882 return false; 2881 return false;
2883 } 2882 }
2884 2883
2885 } // namespace wasm 2884 } // namespace wasm
2886 } // namespace internal 2885 } // namespace internal
2887 } // namespace v8 2886 } // namespace v8
OLDNEW
« no previous file with comments | « src/asmjs/asm-typer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698