| 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/bailout-reason.h" | 9 #include "src/bailout-reason.h" | 
| 10 #include "src/base/platform/platform.h" | 10 #include "src/base/platform/platform.h" | 
| (...skipping 2907 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2918     Variable* iterator = scope_->DeclarationScope()->NewTemporary( | 2918     Variable* iterator = scope_->DeclarationScope()->NewTemporary( | 
| 2919         ast_value_factory()->dot_iterator_string()); | 2919         ast_value_factory()->dot_iterator_string()); | 
| 2920     Variable* result = scope_->DeclarationScope()->NewTemporary( | 2920     Variable* result = scope_->DeclarationScope()->NewTemporary( | 
| 2921         ast_value_factory()->dot_result_string()); | 2921         ast_value_factory()->dot_result_string()); | 
| 2922 | 2922 | 
| 2923     Expression* assign_iterator; | 2923     Expression* assign_iterator; | 
| 2924     Expression* next_result; | 2924     Expression* next_result; | 
| 2925     Expression* result_done; | 2925     Expression* result_done; | 
| 2926     Expression* assign_each; | 2926     Expression* assign_each; | 
| 2927 | 2927 | 
| 2928     // iterator = subject[Symbol.iterator]() | 2928     // var iterator = subject[Symbol.iterator](); | 
| 2929     assign_iterator = factory()->NewAssignment( | 2929     assign_iterator = factory()->NewAssignment( | 
| 2930         Token::ASSIGN, factory()->NewVariableProxy(iterator), | 2930         Token::ASSIGN, factory()->NewVariableProxy(iterator), | 
| 2931         GetIterator(subject, factory()), subject->position()); | 2931         GetIterator(subject, factory()), subject->position()); | 
| 2932 | 2932 | 
| 2933     // !%_IsSpecObject(result = iterator.next()) && | 2933     // var result = iterator.next(); | 
| 2934     //     %ThrowIteratorResultNotAnObject(result) |  | 
| 2935     { | 2934     { | 
| 2936       // result = iterator.next() |  | 
| 2937       Expression* iterator_proxy = factory()->NewVariableProxy(iterator); | 2935       Expression* iterator_proxy = factory()->NewVariableProxy(iterator); | 
| 2938       Expression* next_literal = factory()->NewStringLiteral( | 2936       Expression* next_literal = factory()->NewStringLiteral( | 
| 2939           ast_value_factory()->next_string(), RelocInfo::kNoPosition); | 2937           ast_value_factory()->next_string(), RelocInfo::kNoPosition); | 
| 2940       Expression* next_property = factory()->NewProperty( | 2938       Expression* next_property = factory()->NewProperty( | 
| 2941           iterator_proxy, next_literal, RelocInfo::kNoPosition); | 2939           iterator_proxy, next_literal, RelocInfo::kNoPosition); | 
| 2942       ZoneList<Expression*>* next_arguments = | 2940       ZoneList<Expression*>* next_arguments = | 
| 2943           new (zone()) ZoneList<Expression*>(0, zone()); | 2941           new(zone()) ZoneList<Expression*>(0, zone()); | 
| 2944       Expression* next_call = factory()->NewCall(next_property, next_arguments, | 2942       Expression* next_call = factory()->NewCall(next_property, next_arguments, | 
| 2945                                                  subject->position()); | 2943                                                  subject->position()); | 
| 2946       Expression* result_proxy = factory()->NewVariableProxy(result); | 2944       Expression* result_proxy = factory()->NewVariableProxy(result); | 
| 2947       next_result = factory()->NewAssignment(Token::ASSIGN, result_proxy, | 2945       next_result = factory()->NewAssignment(Token::ASSIGN, result_proxy, | 
| 2948                                              next_call, subject->position()); | 2946                                              next_call, subject->position()); | 
| 2949 |  | 
| 2950       // %_IsSpecObject(...) |  | 
| 2951       ZoneList<Expression*>* is_spec_object_args = |  | 
| 2952           new (zone()) ZoneList<Expression*>(1, zone()); |  | 
| 2953       is_spec_object_args->Add(next_result, zone()); |  | 
| 2954       Expression* is_spec_object_call = factory()->NewCallRuntime( |  | 
| 2955           ast_value_factory()->is_spec_object_string(), |  | 
| 2956           Runtime::FunctionForId(Runtime::kInlineIsSpecObject), |  | 
| 2957           is_spec_object_args, subject->position()); |  | 
| 2958 |  | 
| 2959       // %ThrowIteratorResultNotAnObject(result) |  | 
| 2960       Expression* result_proxy_again = factory()->NewVariableProxy(result); |  | 
| 2961       ZoneList<Expression*>* throw_arguments = |  | 
| 2962           new (zone()) ZoneList<Expression*>(1, zone()); |  | 
| 2963       throw_arguments->Add(result_proxy_again, zone()); |  | 
| 2964       Expression* throw_call = factory()->NewCallRuntime( |  | 
| 2965           ast_value_factory()->throw_iterator_result_not_an_object_string(), |  | 
| 2966           Runtime::FunctionForId(Runtime::kThrowIteratorResultNotAnObject), |  | 
| 2967           throw_arguments, subject->position()); |  | 
| 2968 |  | 
| 2969       next_result = factory()->NewBinaryOperation( |  | 
| 2970           Token::AND, factory()->NewUnaryOperation( |  | 
| 2971                           Token::NOT, is_spec_object_call, subject->position()), |  | 
| 2972           throw_call, subject->position()); |  | 
| 2973     } | 2947     } | 
| 2974 | 2948 | 
| 2975     // result.done | 2949     // result.done | 
| 2976     { | 2950     { | 
| 2977       Expression* done_literal = factory()->NewStringLiteral( | 2951       Expression* done_literal = factory()->NewStringLiteral( | 
| 2978           ast_value_factory()->done_string(), RelocInfo::kNoPosition); | 2952           ast_value_factory()->done_string(), RelocInfo::kNoPosition); | 
| 2979       Expression* result_proxy = factory()->NewVariableProxy(result); | 2953       Expression* result_proxy = factory()->NewVariableProxy(result); | 
| 2980       result_done = factory()->NewProperty( | 2954       result_done = factory()->NewProperty( | 
| 2981           result_proxy, done_literal, RelocInfo::kNoPosition); | 2955           result_proxy, done_literal, RelocInfo::kNoPosition); | 
| 2982     } | 2956     } | 
| (...skipping 2506 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 5489     } else { | 5463     } else { | 
| 5490       const uc16* data = reinterpret_cast<const uc16*>(raw_string->raw_data()); | 5464       const uc16* data = reinterpret_cast<const uc16*>(raw_string->raw_data()); | 
| 5491       running_hash = StringHasher::ComputeRunningHash(running_hash, data, | 5465       running_hash = StringHasher::ComputeRunningHash(running_hash, data, | 
| 5492                                                       raw_string->length()); | 5466                                                       raw_string->length()); | 
| 5493     } | 5467     } | 
| 5494   } | 5468   } | 
| 5495 | 5469 | 
| 5496   return running_hash; | 5470   return running_hash; | 
| 5497 } | 5471 } | 
| 5498 } }  // namespace v8::internal | 5472 } }  // namespace v8::internal | 
| OLD | NEW | 
|---|