| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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/api.h" | 7 #include "src/api.h" | 
| 8 #include "src/ast.h" | 8 #include "src/ast.h" | 
| 9 #include "src/base/platform/platform.h" | 9 #include "src/base/platform/platform.h" | 
| 10 #include "src/bootstrapper.h" | 10 #include "src/bootstrapper.h" | 
| (...skipping 2983 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2994     VariableProxy* temp_proxy = factory()->NewVariableProxy(temps.at(i)); | 2994     VariableProxy* temp_proxy = factory()->NewVariableProxy(temps.at(i)); | 
| 2995     Assignment* assignment = factory()->NewAssignment( | 2995     Assignment* assignment = factory()->NewAssignment( | 
| 2996         Token::INIT_LET, proxy, temp_proxy, pos); | 2996         Token::INIT_LET, proxy, temp_proxy, pos); | 
| 2997     Statement* assignment_statement = factory()->NewExpressionStatement( | 2997     Statement* assignment_statement = factory()->NewExpressionStatement( | 
| 2998         assignment, pos); | 2998         assignment, pos); | 
| 2999     proxy->var()->set_initializer_position(pos); | 2999     proxy->var()->set_initializer_position(pos); | 
| 3000     inner_block->AddStatement(assignment_statement, zone()); | 3000     inner_block->AddStatement(assignment_statement, zone()); | 
| 3001   } | 3001   } | 
| 3002 | 3002 | 
| 3003   // Make statement: if (flag == 1) { flag = 0; } else { next; }. | 3003   // Make statement: if (flag == 1) { flag = 0; } else { next; }. | 
| 3004   { | 3004   if (next) { | 
| 3005     Expression* compare = NULL; | 3005     Expression* compare = NULL; | 
| 3006     // Make compare expresion: flag == 1. | 3006     // Make compare expresion: flag == 1. | 
| 3007     { | 3007     { | 
| 3008       Expression* const1 = factory()->NewSmiLiteral(1, RelocInfo::kNoPosition); | 3008       Expression* const1 = factory()->NewSmiLiteral(1, RelocInfo::kNoPosition); | 
| 3009       VariableProxy* flag_proxy = factory()->NewVariableProxy(flag); | 3009       VariableProxy* flag_proxy = factory()->NewVariableProxy(flag); | 
| 3010       compare = factory()->NewCompareOperation( | 3010       compare = factory()->NewCompareOperation( | 
| 3011           Token::EQ, flag_proxy, const1, pos); | 3011           Token::EQ, flag_proxy, const1, pos); | 
| 3012     } | 3012     } | 
| 3013     Statement* clear_flag = NULL; | 3013     Statement* clear_flag = NULL; | 
| 3014     // Make statement: flag = 0. | 3014     // Make statement: flag = 0. | 
| 3015     { | 3015     { | 
| 3016       VariableProxy* flag_proxy = factory()->NewVariableProxy(flag); | 3016       VariableProxy* flag_proxy = factory()->NewVariableProxy(flag); | 
| 3017       Expression* const0 = factory()->NewSmiLiteral(0, RelocInfo::kNoPosition); | 3017       Expression* const0 = factory()->NewSmiLiteral(0, RelocInfo::kNoPosition); | 
| 3018       Assignment* assignment = factory()->NewAssignment( | 3018       Assignment* assignment = factory()->NewAssignment( | 
| 3019           Token::ASSIGN, flag_proxy, const0, RelocInfo::kNoPosition); | 3019           Token::ASSIGN, flag_proxy, const0, RelocInfo::kNoPosition); | 
| 3020       clear_flag = factory()->NewExpressionStatement(assignment, pos); | 3020       clear_flag = factory()->NewExpressionStatement(assignment, pos); | 
| 3021     } | 3021     } | 
| 3022     Statement* clear_flag_or_next = factory()->NewIfStatement( | 3022     Statement* clear_flag_or_next = factory()->NewIfStatement( | 
| 3023         compare, clear_flag, next, RelocInfo::kNoPosition); | 3023         compare, clear_flag, next, RelocInfo::kNoPosition); | 
| 3024     inner_block->AddStatement(clear_flag_or_next, zone()); | 3024     inner_block->AddStatement(clear_flag_or_next, zone()); | 
| 3025   } | 3025   } | 
| 3026 | 3026 | 
| 3027 | 3027 | 
| 3028   // Make statement: if (cond) { } else { break; }. | 3028   // Make statement: if (cond) { } else { break; }. | 
| 3029   { | 3029   if (cond) { | 
| 3030     Statement* empty = factory()->NewEmptyStatement(RelocInfo::kNoPosition); | 3030     Statement* empty = factory()->NewEmptyStatement(RelocInfo::kNoPosition); | 
| 3031     BreakableStatement* t = LookupBreakTarget(NULL, CHECK_OK); | 3031     BreakableStatement* t = LookupBreakTarget(NULL, CHECK_OK); | 
| 3032     Statement* stop = factory()->NewBreakStatement(t, RelocInfo::kNoPosition); | 3032     Statement* stop = factory()->NewBreakStatement(t, RelocInfo::kNoPosition); | 
| 3033     Statement* if_not_cond_break = factory()->NewIfStatement( | 3033     Statement* if_not_cond_break = factory()->NewIfStatement( | 
| 3034         cond, empty, stop, cond->position()); | 3034         cond, empty, stop, cond->position()); | 
| 3035     inner_block->AddStatement(if_not_cond_break, zone()); | 3035     inner_block->AddStatement(if_not_cond_break, zone()); | 
| 3036   } | 3036   } | 
| 3037 | 3037 | 
| 3038   inner_block->AddStatement(body, zone()); | 3038   inner_block->AddStatement(body, zone()); | 
| 3039 | 3039 | 
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 3241   Statement* body = ParseStatement(NULL, CHECK_OK); | 3241   Statement* body = ParseStatement(NULL, CHECK_OK); | 
| 3242 | 3242 | 
| 3243   Statement* result = NULL; | 3243   Statement* result = NULL; | 
| 3244   if (let_bindings.length() > 0) { | 3244   if (let_bindings.length() > 0) { | 
| 3245     scope_ = for_scope; | 3245     scope_ = for_scope; | 
| 3246     result = DesugarLetBindingsInForStatement(inner_scope, &let_bindings, loop, | 3246     result = DesugarLetBindingsInForStatement(inner_scope, &let_bindings, loop, | 
| 3247                                               init, cond, next, body, CHECK_OK); | 3247                                               init, cond, next, body, CHECK_OK); | 
| 3248     scope_ = saved_scope; | 3248     scope_ = saved_scope; | 
| 3249     for_scope->set_end_position(scanner()->location().end_pos); | 3249     for_scope->set_end_position(scanner()->location().end_pos); | 
| 3250   } else { | 3250   } else { | 
| 3251     loop->Initialize(init, cond, next, body); |  | 
| 3252     result = loop; |  | 
| 3253     scope_ = saved_scope; | 3251     scope_ = saved_scope; | 
| 3254     for_scope->set_end_position(scanner()->location().end_pos); | 3252     for_scope->set_end_position(scanner()->location().end_pos); | 
| 3255     for_scope->FinalizeBlockScope(); | 3253     for_scope = for_scope->FinalizeBlockScope(); | 
|  | 3254     if (for_scope) { | 
|  | 3255       // Rewrite a for statement of the form | 
|  | 3256       //   for (const x = i; c; n) b | 
|  | 3257       // | 
|  | 3258       // into | 
|  | 3259       // | 
|  | 3260       //   { | 
|  | 3261       //     const x = i; | 
|  | 3262       //     for (; c; n) b | 
|  | 3263       //   } | 
|  | 3264       ASSERT(init != NULL); | 
|  | 3265       Block* block = | 
|  | 3266           factory()->NewBlock(NULL, 2, false, RelocInfo::kNoPosition); | 
|  | 3267       block->AddStatement(init, zone()); | 
|  | 3268       block->AddStatement(loop, zone()); | 
|  | 3269       block->set_scope(for_scope); | 
|  | 3270       loop->Initialize(NULL, cond, next, body); | 
|  | 3271       result = block; | 
|  | 3272     } else { | 
|  | 3273       loop->Initialize(init, cond, next, body); | 
|  | 3274       result = loop; | 
|  | 3275     } | 
| 3256   } | 3276   } | 
| 3257   return result; | 3277   return result; | 
| 3258 } | 3278 } | 
| 3259 | 3279 | 
| 3260 | 3280 | 
| 3261 DebuggerStatement* Parser::ParseDebuggerStatement(bool* ok) { | 3281 DebuggerStatement* Parser::ParseDebuggerStatement(bool* ok) { | 
| 3262   // In ECMA-262 'debugger' is defined as a reserved keyword. In some browser | 3282   // In ECMA-262 'debugger' is defined as a reserved keyword. In some browser | 
| 3263   // contexts this is used as a statement which invokes the debugger as i a | 3283   // contexts this is used as a statement which invokes the debugger as i a | 
| 3264   // break point is present. | 3284   // break point is present. | 
| 3265   // DebuggerStatement :: | 3285   // DebuggerStatement :: | 
| (...skipping 1600 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 4866     info()->SetAstValueFactory(ast_value_factory_); | 4886     info()->SetAstValueFactory(ast_value_factory_); | 
| 4867   } | 4887   } | 
| 4868   ast_value_factory_ = NULL; | 4888   ast_value_factory_ = NULL; | 
| 4869 | 4889 | 
| 4870   InternalizeUseCounts(); | 4890   InternalizeUseCounts(); | 
| 4871 | 4891 | 
| 4872   return (result != NULL); | 4892   return (result != NULL); | 
| 4873 } | 4893 } | 
| 4874 | 4894 | 
| 4875 } }  // namespace v8::internal | 4895 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|