| Index: src/asmjs/asm-typer.cc
|
| diff --git a/src/asmjs/asm-typer.cc b/src/asmjs/asm-typer.cc
|
| index 405047a5a29eb0aed8ccf32a1644b9bbb2fcf651..e63d2bebc3614e14b6365548a3f56759ef96cb0d 100644
|
| --- a/src/asmjs/asm-typer.cc
|
| +++ b/src/asmjs/asm-typer.cc
|
| @@ -9,6 +9,7 @@
|
| #include <memory>
|
| #include <string>
|
|
|
| +#include "include/v8.h"
|
| #include "src/v8.h"
|
|
|
| #include "src/asmjs/asm-types.h"
|
| @@ -17,21 +18,25 @@
|
| #include "src/base/bits.h"
|
| #include "src/codegen.h"
|
| #include "src/globals.h"
|
| +#include "src/messages.h"
|
| #include "src/utils.h"
|
|
|
| -#define FAIL_LINE(line, msg) \
|
| - do { \
|
| - base::OS::SNPrintF(error_message_, sizeof(error_message_), \
|
| - "asm: line %d: %s", (line) + 1, msg); \
|
| - return AsmType::None(); \
|
| +#define FAIL_LOCATION(location, msg) \
|
| + do { \
|
| + Handle<String> message(isolate_->factory()->InternalizeOneByteString( \
|
| + STATIC_CHAR_VECTOR(msg))); \
|
| + error_message_ = MessageHandler::MakeMessageObject( \
|
| + isolate_, MessageTemplate::kAsmJsInvalid, (location), message, \
|
| + Handle<JSArray>::null()); \
|
| + error_message_->set_error_level(v8::Isolate::kMessageWarning); \
|
| + message_location_ = *(location); \
|
| + return AsmType::None(); \
|
| } while (false)
|
|
|
| -#define FAIL(node, msg) \
|
| - do { \
|
| - int line = node->position() == kNoSourcePosition \
|
| - ? -1 \
|
| - : script_->GetLineNumber(node->position()); \
|
| - FAIL_LINE(line, msg); \
|
| +#define FAIL(node, msg) \
|
| + do { \
|
| + MessageLocation location(script_, node->position(), node->position()); \
|
| + FAIL_LOCATION(&location, msg); \
|
| } while (false)
|
|
|
| #define RECURSE(call) \
|
| @@ -164,8 +169,8 @@ AsmTyper::VariableInfo* AsmTyper::VariableInfo::Clone(Zone* zone) const {
|
| return new_var_info;
|
| }
|
|
|
| -void AsmTyper::VariableInfo::SetFirstForwardUse(int source_location) {
|
| - DCHECK(source_location_ == -1);
|
| +void AsmTyper::VariableInfo::SetFirstForwardUse(
|
| + const MessageLocation& source_location) {
|
| missing_definition_ = true;
|
| source_location_ = source_location;
|
| }
|
| @@ -400,7 +405,8 @@ AsmTyper::VariableInfo* AsmTyper::Lookup(Variable* variable) const {
|
| }
|
|
|
| void AsmTyper::AddForwardReference(VariableProxy* proxy, VariableInfo* info) {
|
| - info->SetFirstForwardUse(proxy->position());
|
| + MessageLocation location(script_, proxy->position(), proxy->position());
|
| + info->SetFirstForwardUse(location);
|
| forward_definitions_.push_back(info);
|
| }
|
|
|
| @@ -738,11 +744,8 @@ AsmType* AsmTyper::ValidateModuleAfterFunctionsPhase(FunctionLiteral* fun) {
|
|
|
| for (auto* forward_def : forward_definitions_) {
|
| if (forward_def->missing_definition()) {
|
| - int position = forward_def->source_location();
|
| - int line =
|
| - position == kNoSourcePosition ? -1 : script_->GetLineNumber(position);
|
| -
|
| - FAIL_LINE(line, "Missing definition for forward declared identifier.");
|
| + FAIL_LOCATION(forward_def->source_location(),
|
| + "Missing definition for forward declared identifier.");
|
| }
|
| }
|
|
|
| @@ -2905,19 +2908,6 @@ AsmType* AsmTyper::NewHeapView(CallNew* new_heap_view) {
|
| return heap_view_info->type();
|
| }
|
|
|
| -bool IsValidAsm(Isolate* isolate, Zone* zone, Handle<Script> script,
|
| - FunctionLiteral* root, std::string* error_message) {
|
| - error_message->clear();
|
| -
|
| - AsmTyper typer(isolate, zone, script, root);
|
| - if (typer.Validate()) {
|
| - return true;
|
| - }
|
| -
|
| - *error_message = typer.error_message();
|
| - return false;
|
| -}
|
| -
|
| } // namespace wasm
|
| } // namespace internal
|
| } // namespace v8
|
|
|