| 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 #include "src/typing-asm.h" | 7 #include "src/typing-asm.h" |
| 8 | 8 |
| 9 #include "src/ast.h" | 9 #include "src/ast.h" |
| 10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 305 FAIL(stmt, "continue statement inside module body"); | 305 FAIL(stmt, "continue statement inside module body"); |
| 306 } | 306 } |
| 307 } | 307 } |
| 308 | 308 |
| 309 | 309 |
| 310 void AsmTyper::VisitReturnStatement(ReturnStatement* stmt) { | 310 void AsmTyper::VisitReturnStatement(ReturnStatement* stmt) { |
| 311 // Handle module return statement in VisitAsmModule. | 311 // Handle module return statement in VisitAsmModule. |
| 312 if (!in_function_) { | 312 if (!in_function_) { |
| 313 return; | 313 return; |
| 314 } | 314 } |
| 315 // Returning literals handled in annotations. | 315 Literal* literal = stmt->expression()->AsLiteral(); |
| 316 if (stmt->expression()->IsLiteral()) { | 316 if (literal) { |
| 317 return; | 317 VisitLiteral(literal, true); |
| 318 } else { |
| 319 RECURSE( |
| 320 VisitWithExpectation(stmt->expression(), Type::Any(), |
| 321 "return expression expected to have return type")); |
| 318 } | 322 } |
| 319 RECURSE( | 323 if (!computed_type_->Is(return_type_) || !return_type_->Is(computed_type_)) { |
| 320 VisitWithExpectation(stmt->expression(), return_type_, | 324 FAIL(stmt->expression(), "return type does not match function signature"); |
| 321 "return expression expected to have return type")); | 325 } |
| 322 } | 326 } |
| 323 | 327 |
| 324 | 328 |
| 325 void AsmTyper::VisitWithStatement(WithStatement* stmt) { | 329 void AsmTyper::VisitWithStatement(WithStatement* stmt) { |
| 326 FAIL(stmt, "bad with statement"); | 330 FAIL(stmt, "bad with statement"); |
| 327 } | 331 } |
| 328 | 332 |
| 329 | 333 |
| 330 void AsmTyper::VisitSwitchStatement(SwitchStatement* stmt) { | 334 void AsmTyper::VisitSwitchStatement(SwitchStatement* stmt) { |
| 331 if (!in_function_) { | 335 if (!in_function_) { |
| (...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 computed_type_->Print(); | 1206 computed_type_->Print(); |
| 1203 PrintF("Expected type: "); | 1207 PrintF("Expected type: "); |
| 1204 expected_type_->Print(); | 1208 expected_type_->Print(); |
| 1205 #endif | 1209 #endif |
| 1206 FAIL(expr, msg); | 1210 FAIL(expr, msg); |
| 1207 } | 1211 } |
| 1208 expected_type_ = save; | 1212 expected_type_ = save; |
| 1209 } | 1213 } |
| 1210 } // namespace internal | 1214 } // namespace internal |
| 1211 } // namespace v8 | 1215 } // namespace v8 |
| OLD | NEW |