| OLD | NEW | 
|---|
| 1 // Copyright 2017 the V8 project authors. All rights reserved. | 1 // Copyright 2017 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/builtins/builtins-utils-gen.h" | 5 #include "src/builtins/builtins-utils-gen.h" | 
| 6 #include "src/builtins/builtins.h" | 6 #include "src/builtins/builtins.h" | 
| 7 #include "src/code-stub-assembler.h" | 7 #include "src/code-stub-assembler.h" | 
| 8 | 8 | 
| 9 namespace v8 { | 9 namespace v8 { | 
| 10 namespace internal { | 10 namespace internal { | 
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 61   Branch(TaggedIsSmi(object), &return_false, &if_objectisnotsmi); | 61   Branch(TaggedIsSmi(object), &return_false, &if_objectisnotsmi); | 
| 62   BIND(&if_objectisnotsmi); | 62   BIND(&if_objectisnotsmi); | 
| 63 | 63 | 
| 64   Node* map = LoadMap(object); | 64   Node* map = LoadMap(object); | 
| 65   Node* instance_type = LoadMapInstanceType(map); | 65   Node* instance_type = LoadMapInstanceType(map); | 
| 66 | 66 | 
| 67   { | 67   { | 
| 68     VARIABLE(var_index, MachineType::PointerRepresentation()); | 68     VARIABLE(var_index, MachineType::PointerRepresentation()); | 
| 69     VARIABLE(var_unique, MachineRepresentation::kTagged); | 69     VARIABLE(var_unique, MachineRepresentation::kTagged); | 
| 70 | 70 | 
| 71     Label keyisindex(this), if_iskeyunique(this); | 71     Label if_index(this), if_unique_name(this), if_notunique_name(this); | 
| 72     TryToName(key, &keyisindex, &var_index, &if_iskeyunique, &var_unique, | 72     TryToName(key, &if_index, &var_index, &if_unique_name, &var_unique, | 
| 73               &call_runtime); | 73               &call_runtime, &if_notunique_name); | 
| 74 | 74 | 
| 75     BIND(&if_iskeyunique); | 75     BIND(&if_unique_name); | 
| 76     TryHasOwnProperty(object, map, instance_type, var_unique.value(), | 76     TryHasOwnProperty(object, map, instance_type, var_unique.value(), | 
| 77                       &return_true, &return_false, &call_runtime); | 77                       &return_true, &return_false, &call_runtime); | 
| 78 | 78 | 
| 79     BIND(&keyisindex); | 79     BIND(&if_index); | 
| 80     // Handle negative keys in the runtime. | 80     { | 
| 81     GotoIf(IntPtrLessThan(var_index.value(), IntPtrConstant(0)), &call_runtime); | 81       // Handle negative keys in the runtime. | 
| 82     TryLookupElement(object, map, instance_type, var_index.value(), | 82       GotoIf(IntPtrLessThan(var_index.value(), IntPtrConstant(0)), | 
| 83                      &return_true, &return_false, &return_false, &call_runtime); | 83              &call_runtime); | 
|  | 84       TryLookupElement(object, map, instance_type, var_index.value(), | 
|  | 85                        &return_true, &return_false, &return_false, | 
|  | 86                        &call_runtime); | 
|  | 87     } | 
|  | 88 | 
|  | 89     BIND(&if_notunique_name); | 
|  | 90     { | 
|  | 91       Node* function = ExternalConstant( | 
|  | 92           ExternalReference::try_internalize_string_function(isolate())); | 
|  | 93       Node* result = CallCFunction1(MachineType::AnyTagged(), | 
|  | 94                                     MachineType::AnyTagged(), function, key); | 
|  | 95       // If internalization failed, then the string did not exist in the string | 
|  | 96       // table yet, which implies that no existing object has a property with | 
|  | 97       // that name. | 
|  | 98       Label internalized(this); | 
|  | 99       GotoIf(TaggedIsNotSmi(result), &internalized); | 
|  | 100       Node* int_result = SmiUntag(result); | 
|  | 101       GotoIf(WordEqual(int_result, IntPtrConstant(ResultSentinel::kNotFound)), | 
|  | 102              &return_false); | 
|  | 103       GotoIf( | 
|  | 104           WordEqual(int_result, IntPtrConstant(ResultSentinel::kUnsupported)), | 
|  | 105           &call_runtime); | 
|  | 106       var_index.Bind(int_result); | 
|  | 107       Goto(&if_index); | 
|  | 108 | 
|  | 109       BIND(&internalized); | 
|  | 110       var_unique.Bind(result); | 
|  | 111       Goto(&if_unique_name); | 
|  | 112     } | 
| 84   } | 113   } | 
| 85   BIND(&return_true); | 114   BIND(&return_true); | 
| 86   Return(BooleanConstant(true)); | 115   Return(BooleanConstant(true)); | 
| 87 | 116 | 
| 88   BIND(&return_false); | 117   BIND(&return_false); | 
| 89   Return(BooleanConstant(false)); | 118   Return(BooleanConstant(false)); | 
| 90 | 119 | 
| 91   BIND(&call_runtime); | 120   BIND(&call_runtime); | 
| 92   Return(CallRuntime(Runtime::kObjectHasOwnProperty, context, object, key)); | 121   Return(CallRuntime(Runtime::kObjectHasOwnProperty, context, object, key)); | 
| 93 } | 122 } | 
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 395 | 424 | 
| 396 TF_BUILTIN(GetSuperConstructor, ObjectBuiltinsAssembler) { | 425 TF_BUILTIN(GetSuperConstructor, ObjectBuiltinsAssembler) { | 
| 397   Node* object = Parameter(Descriptor::kObject); | 426   Node* object = Parameter(Descriptor::kObject); | 
| 398   Node* context = Parameter(Descriptor::kContext); | 427   Node* context = Parameter(Descriptor::kContext); | 
| 399 | 428 | 
| 400   Return(GetSuperConstructor(object, context)); | 429   Return(GetSuperConstructor(object, context)); | 
| 401 } | 430 } | 
| 402 | 431 | 
| 403 }  // namespace internal | 432 }  // namespace internal | 
| 404 }  // namespace v8 | 433 }  // namespace v8 | 
| OLD | NEW | 
|---|