OLD | NEW |
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 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 FAIL(fun, "Multiple export statements."); | 640 FAIL(fun, "Multiple export statements."); |
641 } | 641 } |
642 module_return = current_as_return; | 642 module_return = current_as_return; |
643 source_layout.AddExport(*module_return); | 643 source_layout.AddExport(*module_return); |
644 continue; | 644 continue; |
645 } | 645 } |
646 | 646 |
647 FAIL(current, "Invalid top-level statement in asm.js module."); | 647 FAIL(current, "Invalid top-level statement in asm.js module."); |
648 } | 648 } |
649 | 649 |
650 ZoneList<Declaration*>* decls = scope->declarations(); | 650 Declaration::List* decls = scope->declarations(); |
651 | 651 for (Declaration* decl : *decls) { |
652 for (int ii = 0; ii < decls->length(); ++ii) { | |
653 Declaration* decl = decls->at(ii); | |
654 | |
655 if (FunctionDeclaration* fun_decl = decl->AsFunctionDeclaration()) { | 652 if (FunctionDeclaration* fun_decl = decl->AsFunctionDeclaration()) { |
656 RECURSE(ValidateFunction(fun_decl)); | 653 RECURSE(ValidateFunction(fun_decl)); |
657 source_layout.AddFunction(*fun_decl); | 654 source_layout.AddFunction(*fun_decl); |
658 continue; | 655 continue; |
659 } | 656 } |
660 } | 657 } |
661 | 658 |
662 for (auto* function_table : function_pointer_tables) { | 659 for (auto* function_table : function_pointer_tables) { |
663 RECURSE(ValidateFunctionTable(function_table)); | 660 RECURSE(ValidateFunctionTable(function_table)); |
664 source_layout.AddTable(*function_table); | 661 source_layout.AddTable(*function_table); |
665 } | 662 } |
666 | 663 |
667 for (int ii = 0; ii < decls->length(); ++ii) { | 664 for (Declaration* decl : *decls) { |
668 Declaration* decl = decls->at(ii); | |
669 | |
670 if (decl->IsFunctionDeclaration()) { | 665 if (decl->IsFunctionDeclaration()) { |
671 continue; | 666 continue; |
672 } | 667 } |
673 | 668 |
674 VariableDeclaration* var_decl = decl->AsVariableDeclaration(); | 669 VariableDeclaration* var_decl = decl->AsVariableDeclaration(); |
675 if (var_decl == nullptr) { | 670 if (var_decl == nullptr) { |
676 FAIL(decl, "Invalid asm.js declaration."); | 671 FAIL(decl, "Invalid asm.js declaration."); |
677 } | 672 } |
678 | 673 |
679 auto* var_proxy = var_decl->proxy(); | 674 auto* var_proxy = var_decl->proxy(); |
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1154 // We don't check whether AsReturnStatement() below returns non-null -- | 1149 // We don't check whether AsReturnStatement() below returns non-null -- |
1155 // we leave that to the ReturnTypeAnnotations method. | 1150 // we leave that to the ReturnTypeAnnotations method. |
1156 RECURSE(return_type_ = | 1151 RECURSE(return_type_ = |
1157 ReturnTypeAnnotations(last_statement->AsReturnStatement())); | 1152 ReturnTypeAnnotations(last_statement->AsReturnStatement())); |
1158 } | 1153 } |
1159 } | 1154 } |
1160 } while (return_type_ == AsmType::None()); | 1155 } while (return_type_ == AsmType::None()); |
1161 | 1156 |
1162 DCHECK(return_type_->IsReturnType()); | 1157 DCHECK(return_type_->IsReturnType()); |
1163 | 1158 |
1164 for (auto* decl : *fun->scope()->declarations()) { | 1159 for (Declaration* decl : *fun->scope()->declarations()) { |
1165 auto* var_decl = decl->AsVariableDeclaration(); | 1160 auto* var_decl = decl->AsVariableDeclaration(); |
1166 if (var_decl == nullptr) { | 1161 if (var_decl == nullptr) { |
1167 FAIL(decl, "Functions may only define inner variables."); | 1162 FAIL(decl, "Functions may only define inner variables."); |
1168 } | 1163 } |
1169 | 1164 |
1170 auto* var_proxy = var_decl->proxy(); | 1165 auto* var_proxy = var_decl->proxy(); |
1171 if (var_proxy == nullptr) { | 1166 if (var_proxy == nullptr) { |
1172 FAIL(decl, "Invalid local declaration declaration."); | 1167 FAIL(decl, "Invalid local declaration declaration."); |
1173 } | 1168 } |
1174 | 1169 |
(...skipping 1683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2858 return true; | 2853 return true; |
2859 } | 2854 } |
2860 | 2855 |
2861 *error_message = typer.error_message(); | 2856 *error_message = typer.error_message(); |
2862 return false; | 2857 return false; |
2863 } | 2858 } |
2864 | 2859 |
2865 } // namespace wasm | 2860 } // namespace wasm |
2866 } // namespace internal | 2861 } // namespace internal |
2867 } // namespace v8 | 2862 } // namespace v8 |
OLD | NEW |