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

Side by Side Diff: src/typing-asm.cc

Issue 1609893002: Add function tables to asm to wasm (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 11 months 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 | « no previous file | src/wasm/asm-wasm-builder.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/typing-asm.h" 5 #include "src/typing-asm.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "src/v8.h" 9 #include "src/v8.h"
10 10
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 return cache_.kAsmInt; 714 return cache_.kAsmInt;
715 } else { 715 } else {
716 return type; 716 return type;
717 } 717 }
718 } 718 }
719 719
720 720
721 void AsmTyper::VisitHeapAccess(Property* expr, bool assigning, 721 void AsmTyper::VisitHeapAccess(Property* expr, bool assigning,
722 Type* assignment_type) { 722 Type* assignment_type) {
723 Type::ArrayType* array_type = computed_type_->AsArray(); 723 Type::ArrayType* array_type = computed_type_->AsArray();
724 size_t size = array_size_; 724 // size_t size = array_size_;
725 Type* type = array_type->AsArray()->Element(); 725 Type* type = array_type->AsArray()->Element();
726 if (type->IsFunction()) { 726 if (type->IsFunction()) {
727 if (assigning) { 727 if (assigning) {
728 FAIL(expr, "assigning to function table is illegal"); 728 FAIL(expr, "assigning to function table is illegal");
729 } 729 }
730 BinaryOperation* bin = expr->key()->AsBinaryOperation(); 730 // TODO(bradnelson): Fix the parser and then un-comment this part
731 if (bin == NULL || bin->op() != Token::BIT_AND) { 731 // BinaryOperation* bin = expr->key()->AsBinaryOperation();
732 FAIL(expr->key(), "expected & in call"); 732 // if (bin == NULL || bin->op() != Token::BIT_AND) {
733 } 733 // FAIL(expr->key(), "expected & in call");
734 RECURSE(VisitWithExpectation(bin->left(), cache_.kAsmSigned, 734 // }
735 "array index expected to be integer")); 735 // RECURSE(VisitWithExpectation(bin->left(), cache_.kAsmSigned,
736 Literal* right = bin->right()->AsLiteral(); 736 // "array index expected to be integer"));
737 if (right == NULL || right->raw_value()->ContainsDot()) { 737 // Literal* right = bin->right()->AsLiteral();
738 FAIL(right, "call mask must be integer"); 738 // if (right == NULL || right->raw_value()->ContainsDot()) {
739 } 739 // FAIL(right, "call mask must be integer");
740 RECURSE(VisitWithExpectation(bin->right(), cache_.kAsmSigned, 740 // }
741 "call mask expected to be integer")); 741 // RECURSE(VisitWithExpectation(bin->right(), cache_.kAsmSigned,
742 if (static_cast<size_t>(right->raw_value()->AsNumber()) != size - 1) { 742 // "call mask expected to be integer"));
743 FAIL(right, "call mask must match function table"); 743 // if (static_cast<size_t>(right->raw_value()->AsNumber()) != size - 1) {
744 } 744 // FAIL(right, "call mask must match function table");
745 bin->set_bounds(Bounds(cache_.kAsmSigned)); 745 // }
746 // bin->set_bounds(Bounds(cache_.kAsmSigned));
747 RECURSE(VisitWithExpectation(expr->key(), cache_.kAsmSigned,
748 "must be integer"));
746 IntersectResult(expr, type); 749 IntersectResult(expr, type);
747 } else { 750 } else {
748 Literal* literal = expr->key()->AsLiteral(); 751 Literal* literal = expr->key()->AsLiteral();
749 if (literal) { 752 if (literal) {
750 RECURSE(VisitWithExpectation(literal, cache_.kAsmSigned, 753 RECURSE(VisitWithExpectation(literal, cache_.kAsmSigned,
751 "array index expected to be integer")); 754 "array index expected to be integer"));
752 } else { 755 } else {
753 BinaryOperation* bin = expr->key()->AsBinaryOperation(); 756 BinaryOperation* bin = expr->key()->AsBinaryOperation();
754 if (bin == NULL || bin->op() != Token::SAR) { 757 if (bin == NULL || bin->op() != Token::SAR) {
755 FAIL(expr->key(), "expected >> in heap access"); 758 FAIL(expr->key(), "expected >> in heap access");
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
1483 1486
1484 1487
1485 void AsmTyper::VisitRewritableAssignmentExpression( 1488 void AsmTyper::VisitRewritableAssignmentExpression(
1486 RewritableAssignmentExpression* expr) { 1489 RewritableAssignmentExpression* expr) {
1487 RECURSE(Visit(expr->expression())); 1490 RECURSE(Visit(expr->expression()));
1488 } 1491 }
1489 1492
1490 1493
1491 } // namespace internal 1494 } // namespace internal
1492 } // namespace v8 1495 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/wasm/asm-wasm-builder.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698