| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 // Required to get M_E etc. in MSVC. | 7 // Required to get M_E etc. in MSVC. |
| 8 #if defined(_WIN32) | 8 #if defined(_WIN32) |
| 9 #define _USE_MATH_DEFINES | 9 #define _USE_MATH_DEFINES |
| 10 #endif | 10 #endif |
| (...skipping 571 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 WasmFunctionBuilder* function = LookupOrInsertFunction(var); | 582 WasmFunctionBuilder* function = LookupOrInsertFunction(var); |
| 583 function->SetExported(); | 583 function->SetExported(); |
| 584 function->SetName( | 584 function->SetName( |
| 585 AsmWasmBuilder::single_function_name, | 585 AsmWasmBuilder::single_function_name, |
| 586 static_cast<int>(strlen(AsmWasmBuilder::single_function_name))); | 586 static_cast<int>(strlen(AsmWasmBuilder::single_function_name))); |
| 587 } | 587 } |
| 588 } | 588 } |
| 589 | 589 |
| 590 void VisitLiteral(Literal* expr) { | 590 void VisitLiteral(Literal* expr) { |
| 591 Handle<Object> value = expr->value(); | 591 Handle<Object> value = expr->value(); |
| 592 if (!value->IsNumber() || (scope_ != kFuncScope && scope_ != kInitScope)) { | 592 if (!(value->IsNumber() || expr->raw_value()->IsTrue() || |
| 593 expr->raw_value()->IsFalse()) || |
| 594 (scope_ != kFuncScope && scope_ != kInitScope)) { |
| 593 return; | 595 return; |
| 594 } | 596 } |
| 595 AsmType* type = typer_->TypeOf(expr); | 597 AsmType* type = typer_->TypeOf(expr); |
| 596 DCHECK_NE(type, AsmType::None()); | 598 DCHECK_NE(type, AsmType::None()); |
| 597 | 599 |
| 598 if (type->IsA(AsmType::Signed())) { | 600 if (type->IsA(AsmType::Signed())) { |
| 599 int32_t i = 0; | 601 int32_t i = 0; |
| 600 if (!value->ToInt32(&i)) { | 602 if (!value->ToInt32(&i)) { |
| 601 UNREACHABLE(); | 603 UNREACHABLE(); |
| 602 } | 604 } |
| 603 byte code[] = {WASM_I32V(i)}; | 605 byte code[] = {WASM_I32V(i)}; |
| 604 current_function_builder_->EmitCode(code, sizeof(code)); | 606 current_function_builder_->EmitCode(code, sizeof(code)); |
| 605 } else if (type->IsA(AsmType::Unsigned()) || type->IsA(AsmType::FixNum())) { | 607 } else if (type->IsA(AsmType::Unsigned()) || type->IsA(AsmType::FixNum())) { |
| 606 uint32_t u = 0; | 608 uint32_t u = 0; |
| 607 if (!value->ToUint32(&u)) { | 609 if (!value->ToUint32(&u)) { |
| 608 UNREACHABLE(); | 610 UNREACHABLE(); |
| 609 } | 611 } |
| 610 int32_t i = static_cast<int32_t>(u); | 612 int32_t i = static_cast<int32_t>(u); |
| 611 byte code[] = {WASM_I32V(i)}; | 613 byte code[] = {WASM_I32V(i)}; |
| 612 current_function_builder_->EmitCode(code, sizeof(code)); | 614 current_function_builder_->EmitCode(code, sizeof(code)); |
| 615 } else if (type->IsA(AsmType::Int())) { |
| 616 // The parser can collapse !0, !1 etc to true / false. |
| 617 // Allow these as int literals. |
| 618 if (expr->raw_value()->IsTrue()) { |
| 619 byte code[] = {WASM_I32V(1)}; |
| 620 current_function_builder_->EmitCode(code, sizeof(code)); |
| 621 } else if (expr->raw_value()->IsFalse()) { |
| 622 byte code[] = {WASM_I32V(0)}; |
| 623 current_function_builder_->EmitCode(code, sizeof(code)); |
| 624 } else { |
| 625 UNREACHABLE(); |
| 626 } |
| 613 } else if (type->IsA(AsmType::Double())) { | 627 } else if (type->IsA(AsmType::Double())) { |
| 614 double val = expr->raw_value()->AsNumber(); | 628 double val = expr->raw_value()->AsNumber(); |
| 615 byte code[] = {WASM_F64(val)}; | 629 byte code[] = {WASM_F64(val)}; |
| 616 current_function_builder_->EmitCode(code, sizeof(code)); | 630 current_function_builder_->EmitCode(code, sizeof(code)); |
| 617 } else { | 631 } else { |
| 618 UNREACHABLE(); | 632 UNREACHABLE(); |
| 619 } | 633 } |
| 620 } | 634 } |
| 621 | 635 |
| 622 void VisitRegExpLiteral(RegExpLiteral* expr) { UNREACHABLE(); } | 636 void VisitRegExpLiteral(RegExpLiteral* expr) { UNREACHABLE(); } |
| (...skipping 1264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1887 impl.builder_->WriteTo(*buffer); | 1901 impl.builder_->WriteTo(*buffer); |
| 1888 return buffer; | 1902 return buffer; |
| 1889 } | 1903 } |
| 1890 | 1904 |
| 1891 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; | 1905 const char* AsmWasmBuilder::foreign_init_name = "__foreign_init__"; |
| 1892 const char* AsmWasmBuilder::single_function_name = "__single_function__"; | 1906 const char* AsmWasmBuilder::single_function_name = "__single_function__"; |
| 1893 | 1907 |
| 1894 } // namespace wasm | 1908 } // namespace wasm |
| 1895 } // namespace internal | 1909 } // namespace internal |
| 1896 } // namespace v8 | 1910 } // namespace v8 |
| OLD | NEW |