Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/object.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "platform/assert.h" | 7 #include "platform/assert.h" |
| 8 #include "vm/assembler.h" | 8 #include "vm/assembler.h" |
| 9 #include "vm/bigint_operations.h" | 9 #include "vm/bigint_operations.h" |
| 10 #include "vm/bootstrap.h" | 10 #include "vm/bootstrap.h" |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 90 RawClass* Object::icdata_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 90 RawClass* Object::icdata_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 91 RawClass* Object::subtypetestcache_class_ = | 91 RawClass* Object::subtypetestcache_class_ = |
| 92 reinterpret_cast<RawClass*>(RAW_NULL); | 92 reinterpret_cast<RawClass*>(RAW_NULL); |
| 93 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 93 RawClass* Object::api_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 94 RawClass* Object::language_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 94 RawClass* Object::language_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 95 RawClass* Object::unhandled_exception_class_ = | 95 RawClass* Object::unhandled_exception_class_ = |
| 96 reinterpret_cast<RawClass*>(RAW_NULL); | 96 reinterpret_cast<RawClass*>(RAW_NULL); |
| 97 RawClass* Object::unwind_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); | 97 RawClass* Object::unwind_error_class_ = reinterpret_cast<RawClass*>(RAW_NULL); |
| 98 #undef RAW_NULL | 98 #undef RAW_NULL |
| 99 | 99 |
| 100 int Object::GetSingletonClassIndex(const RawClass* raw_class) { | 100 int Object::GetSingletonClassIndex(const RawObject* raw_obj) { |
| 101 ASSERT(raw_class->IsHeapObject()); | 101 ASSERT(raw_obj->IsHeapObject()); |
| 102 if (raw_class == class_class()) { | 102 intptr_t id = raw_obj->GetClassId(); |
| 103 return kClassClass; | 103 if (id == kClass) { |
| 104 } else if (raw_class == null_class()) { | 104 const RawClass* raw_class = reinterpret_cast<const RawClass*>(raw_obj); |
| 105 return kNullClass; | 105 id = raw_class->ptr()->id_; |
| 106 } else if (raw_class == dynamic_class()) { | 106 if ((id >= kClass && id <= kUnwindError) || |
| 107 return kDynamicClass; | 107 (id >= kNullClassId && id <= kVoidClassId)) { |
|
regis
2012/07/24 13:49:25
We usually wrap all terms in parentheses.
siva
2012/08/13 20:38:25
This function has been deleted in newer code.
On
| |
| 108 } else if (raw_class == void_class()) { | 108 return id; |
| 109 return kVoidClass; | 109 } |
| 110 } else if (raw_class == unresolved_class_class()) { | |
| 111 return kUnresolvedClassClass; | |
| 112 } else if (raw_class == type_class()) { | |
| 113 return kTypeClass; | |
| 114 } else if (raw_class == type_parameter_class()) { | |
| 115 return kTypeParameterClass; | |
| 116 } else if (raw_class == type_arguments_class()) { | |
| 117 return kTypeArgumentsClass; | |
| 118 } else if (raw_class == instantiated_type_arguments_class()) { | |
| 119 return kInstantiatedTypeArgumentsClass; | |
| 120 } else if (raw_class == function_class()) { | |
| 121 return kFunctionClass; | |
| 122 } else if (raw_class == field_class()) { | |
| 123 return kFieldClass; | |
| 124 } else if (raw_class == literal_token_class()) { | |
| 125 return kLiteralTokenClass; | |
| 126 } else if (raw_class == token_stream_class()) { | |
| 127 return kTokenStreamClass; | |
| 128 } else if (raw_class == script_class()) { | |
| 129 return kScriptClass; | |
| 130 } else if (raw_class == library_class()) { | |
| 131 return kLibraryClass; | |
| 132 } else if (raw_class == library_prefix_class()) { | |
| 133 return kLibraryPrefixClass; | |
| 134 } else if (raw_class == code_class()) { | |
| 135 return kCodeClass; | |
| 136 } else if (raw_class == instructions_class()) { | |
| 137 return kInstructionsClass; | |
| 138 } else if (raw_class == pc_descriptors_class()) { | |
| 139 return kPcDescriptorsClass; | |
| 140 } else if (raw_class == stackmap_class()) { | |
| 141 return kStackmapClass; | |
| 142 } else if (raw_class == var_descriptors_class()) { | |
| 143 return kLocalVarDescriptorsClass; | |
| 144 } else if (raw_class == exception_handlers_class()) { | |
| 145 return kExceptionHandlersClass; | |
| 146 } else if (raw_class == context_class()) { | |
| 147 return kContextClass; | |
| 148 } else if (raw_class == context_scope_class()) { | |
| 149 return kContextScopeClass; | |
| 150 } else if (raw_class == icdata_class()) { | |
| 151 return kICDataClass; | |
| 152 } else if (raw_class == subtypetestcache_class()) { | |
| 153 return kSubtypeTestCacheClass; | |
| 154 } else if (raw_class == api_error_class()) { | |
| 155 return kApiErrorClass; | |
| 156 } else if (raw_class == language_error_class()) { | |
| 157 return kLanguageErrorClass; | |
| 158 } else if (raw_class == unhandled_exception_class()) { | |
| 159 return kUnhandledExceptionClass; | |
| 160 } else if (raw_class == unwind_error_class()) { | |
| 161 return kUnwindErrorClass; | |
| 162 } | 110 } |
| 163 return kInvalidIndex; | 111 return kInvalidIndex; |
| 164 } | 112 } |
| 165 | 113 |
| 166 | 114 |
| 167 RawClass* Object::GetSingletonClass(int index) { | 115 const char* Object::GetSingletonClassName(int index) { |
| 168 switch (index) { | 116 switch (index) { |
| 169 case kClassClass: return class_class(); | 117 case kClass: return "Class"; |
| 170 case kNullClass: return null_class(); | 118 case kUnresolvedClass: return "UnresolvedClass"; |
| 171 case kDynamicClass: return dynamic_class(); | 119 case kType: return "Type"; |
| 172 case kVoidClass: return void_class(); | 120 case kTypeParameter: return "TypeParameter"; |
| 173 case kUnresolvedClassClass: return unresolved_class_class(); | 121 case kTypeArguments: return "TypeArguments"; |
| 174 case kTypeClass: return type_class(); | 122 case kInstantiatedTypeArguments: return "InstantiatedTypeArguments"; |
| 175 case kTypeParameterClass: return type_parameter_class(); | 123 case kFunction: return "Function"; |
| 176 case kTypeArgumentsClass: return type_arguments_class(); | 124 case kField: return "Field"; |
| 177 case kInstantiatedTypeArgumentsClass: | 125 case kLiteralToken: return "LiteralToken"; |
| 178 return instantiated_type_arguments_class(); | 126 case kTokenStream: return "TokenStream"; |
| 179 case kFunctionClass: return function_class(); | 127 case kScript: return "Script"; |
| 180 case kFieldClass: return field_class(); | 128 case kLibrary: return "Library"; |
| 181 case kLiteralTokenClass: return literal_token_class(); | 129 case kLibraryPrefix: return "LibraryPrefix"; |
| 182 case kTokenStreamClass: return token_stream_class(); | 130 case kCode: return "Code"; |
| 183 case kScriptClass: return script_class(); | 131 case kInstructions: return "Instructions"; |
| 184 case kLibraryClass: return library_class(); | 132 case kPcDescriptors: return "PcDescriptors"; |
| 185 case kLibraryPrefixClass: return library_prefix_class(); | 133 case kStackmap: return "Stackmap"; |
| 186 case kCodeClass: return code_class(); | 134 case kLocalVarDescriptors: return "LocalVarDescriptors"; |
| 187 case kInstructionsClass: return instructions_class(); | 135 case kExceptionHandlers: return "ExceptionHandlers"; |
| 188 case kPcDescriptorsClass: return pc_descriptors_class(); | 136 case kContext: return "Context"; |
| 189 case kStackmapClass: return stackmap_class(); | 137 case kContextScope: return "ContextScope"; |
| 190 case kLocalVarDescriptorsClass: return var_descriptors_class(); | 138 case kICData: return "ICData"; |
| 191 case kExceptionHandlersClass: return exception_handlers_class(); | 139 case kSubtypeTestCache: return "SubtypeTestCache"; |
| 192 case kContextClass: return context_class(); | 140 case kApiError: return "ApiError"; |
| 193 case kContextScopeClass: return context_scope_class(); | 141 case kLanguageError: return "LanguageError"; |
| 194 case kICDataClass: return icdata_class(); | 142 case kUnhandledException: return "UnhandledException"; |
| 195 case kSubtypeTestCacheClass: return subtypetestcache_class(); | 143 case kUnwindError: return "UnwindError"; |
| 196 case kApiErrorClass: return api_error_class(); | 144 case kNullClassId: return "Null"; |
| 197 case kLanguageErrorClass: return language_error_class(); | 145 case kDynamicClassId: return "Dynamic"; |
| 198 case kUnhandledExceptionClass: return unhandled_exception_class(); | 146 case kVoidClassId: return "void"; |
| 199 case kUnwindErrorClass: return unwind_error_class(); | |
| 200 default: break; | 147 default: break; |
| 201 } | 148 } |
| 202 UNREACHABLE(); | 149 UNREACHABLE(); |
| 203 return reinterpret_cast<RawClass*>(kHeapObjectTag); // return RAW_NULL. | |
| 204 } | |
| 205 | |
| 206 | |
| 207 const char* Object::GetSingletonClassName(int index) { | |
| 208 switch (index) { | |
| 209 case kClassClass: return "Class"; | |
| 210 case kNullClass: return "Null"; | |
| 211 case kDynamicClass: return "Dynamic"; | |
| 212 case kVoidClass: return "void"; | |
| 213 case kUnresolvedClassClass: return "UnresolvedClass"; | |
| 214 case kTypeClass: return "Type"; | |
| 215 case kTypeParameterClass: return "TypeParameter"; | |
| 216 case kTypeArgumentsClass: return "TypeArguments"; | |
| 217 case kInstantiatedTypeArgumentsClass: return "InstantiatedTypeArguments"; | |
| 218 case kFunctionClass: return "Function"; | |
| 219 case kFieldClass: return "Field"; | |
| 220 case kLiteralTokenClass: return "LiteralToken"; | |
| 221 case kTokenStreamClass: return "TokenStream"; | |
| 222 case kScriptClass: return "Script"; | |
| 223 case kLibraryClass: return "Library"; | |
| 224 case kLibraryPrefixClass: return "LibraryPrefix"; | |
| 225 case kCodeClass: return "Code"; | |
| 226 case kInstructionsClass: return "Instructions"; | |
| 227 case kPcDescriptorsClass: return "PcDescriptors"; | |
| 228 case kStackmapClass: return "Stackmap"; | |
| 229 case kLocalVarDescriptorsClass: return "LocalVarDescriptors"; | |
| 230 case kExceptionHandlersClass: return "ExceptionHandlers"; | |
| 231 case kContextClass: return "Context"; | |
| 232 case kContextScopeClass: return "ContextScope"; | |
| 233 case kICDataClass: return "ICData"; | |
| 234 case kSubtypeTestCacheClass: return "SubtypeTestCache"; | |
| 235 case kApiErrorClass: return "ApiError"; | |
| 236 case kLanguageErrorClass: return "LanguageError"; | |
| 237 case kUnhandledExceptionClass: return "UnhandledException"; | |
| 238 case kUnwindErrorClass: return "UnwindError"; | |
| 239 default: break; | |
| 240 } | |
| 241 UNREACHABLE(); | |
| 242 return NULL; | 150 return NULL; |
| 243 } | 151 } |
| 244 | 152 |
| 245 | 153 |
| 246 void Object::InitOnce() { | 154 void Object::InitOnce() { |
| 247 // TODO(iposva): NoGCScope needs to be added here. | 155 // TODO(iposva): NoGCScope needs to be added here. |
| 248 ASSERT(class_class() == null_); | 156 ASSERT(class_class() == null_); |
| 249 // Initialize the static vtable values. | 157 // Initialize the static vtable values. |
| 250 { | 158 { |
| 251 Object fake_object; | 159 Object fake_object; |
| (...skipping 793 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1045 } | 953 } |
| 1046 return raw_obj; | 954 return raw_obj; |
| 1047 } | 955 } |
| 1048 | 956 |
| 1049 | 957 |
| 1050 RawString* Class::Name() const { | 958 RawString* Class::Name() const { |
| 1051 if (raw_ptr()->name_ != String::null()) { | 959 if (raw_ptr()->name_ != String::null()) { |
| 1052 return raw_ptr()->name_; | 960 return raw_ptr()->name_; |
| 1053 } | 961 } |
| 1054 ASSERT(class_class() != Class::null()); // class_class_ should be set up. | 962 ASSERT(class_class() != Class::null()); // class_class_ should be set up. |
| 1055 intptr_t index = GetSingletonClassIndex(raw()); | 963 return String::NewSymbol(GetSingletonClassName(raw_ptr()->id_)); |
| 1056 return String::NewSymbol(GetSingletonClassName(index)); | |
| 1057 } | 964 } |
| 1058 | 965 |
| 1059 | 966 |
| 1060 RawString* Class::UserVisibleName() const { | 967 RawString* Class::UserVisibleName() const { |
| 1061 if (FLAG_show_internal_names) { | 968 if (FLAG_show_internal_names) { |
| 1062 return Name(); | 969 return Name(); |
| 1063 } | 970 } |
| 1064 switch (id()) { | 971 switch (id()) { |
| 1065 case kInteger: | 972 case kInteger: |
| 1066 case kSmi: | 973 case kSmi: |
| (...skipping 536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1603 const Type& signature_type = Type::Handle(result.SignatureType()); | 1510 const Type& signature_type = Type::Handle(result.SignatureType()); |
| 1604 ASSERT(!signature_type.IsFinalized()); | 1511 ASSERT(!signature_type.IsFinalized()); |
| 1605 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); | 1512 const Array& new_canonical_types = Array::Handle(Array::New(1, Heap::kOld)); |
| 1606 new_canonical_types.SetAt(0, signature_type); | 1513 new_canonical_types.SetAt(0, signature_type); |
| 1607 result.set_canonical_types(new_canonical_types); | 1514 result.set_canonical_types(new_canonical_types); |
| 1608 return result.raw(); | 1515 return result.raw(); |
| 1609 } | 1516 } |
| 1610 | 1517 |
| 1611 | 1518 |
| 1612 RawClass* Class::GetClass(ObjectKind kind) { | 1519 RawClass* Class::GetClass(ObjectKind kind) { |
| 1613 ObjectStore* object_store = Isolate::Current()->object_store(); | 1520 if (kind == kClosure) { |
| 1614 switch (kind) { | 1521 return Class::New<Closure>(); |
| 1615 case kInteger: | |
| 1616 ASSERT(object_store->integer_implementation_class() != Class::null()); | |
| 1617 return object_store->integer_implementation_class(); | |
| 1618 case kSmi: | |
| 1619 ASSERT(object_store->smi_class() != Class::null()); | |
| 1620 return object_store->smi_class(); | |
| 1621 case kMint: | |
| 1622 ASSERT(object_store->mint_class() != Class::null()); | |
| 1623 return object_store->mint_class(); | |
| 1624 case kBigint: | |
| 1625 ASSERT(object_store->bigint_class() != Class::null()); | |
| 1626 return object_store->bigint_class(); | |
| 1627 case kDouble: | |
| 1628 ASSERT(object_store->double_class() != Class::null()); | |
| 1629 return object_store->double_class(); | |
| 1630 case kOneByteString: | |
| 1631 ASSERT(object_store->one_byte_string_class() != Class::null()); | |
| 1632 return object_store->one_byte_string_class(); | |
| 1633 case kTwoByteString: | |
| 1634 ASSERT(object_store->two_byte_string_class() != Class::null()); | |
| 1635 return object_store->two_byte_string_class(); | |
| 1636 case kFourByteString: | |
| 1637 ASSERT(object_store->four_byte_string_class() != Class::null()); | |
| 1638 return object_store->four_byte_string_class(); | |
| 1639 case kExternalOneByteString: | |
| 1640 ASSERT(object_store->external_one_byte_string_class() != Class::null()); | |
| 1641 return object_store->external_one_byte_string_class(); | |
| 1642 case kExternalTwoByteString: | |
| 1643 ASSERT(object_store->external_two_byte_string_class() != Class::null()); | |
| 1644 return object_store->external_two_byte_string_class(); | |
| 1645 case kExternalFourByteString: | |
| 1646 ASSERT(object_store->external_four_byte_string_class() != Class::null()); | |
| 1647 return object_store->external_four_byte_string_class(); | |
| 1648 case kBool: | |
| 1649 ASSERT(object_store->bool_class() != Class::null()); | |
| 1650 return object_store->bool_class(); | |
| 1651 case kArray: | |
| 1652 ASSERT(object_store->array_class() != Class::null()); | |
| 1653 return object_store->array_class(); | |
| 1654 case kImmutableArray: | |
| 1655 ASSERT(object_store->immutable_array_class() != Class::null()); | |
| 1656 return object_store->immutable_array_class(); | |
| 1657 case kGrowableObjectArray: | |
| 1658 ASSERT(object_store->growable_object_array_class() != Class::null()); | |
| 1659 return object_store->growable_object_array_class(); | |
| 1660 case kInt8Array: | |
| 1661 ASSERT(object_store->int8_array_class() != Class::null()); | |
| 1662 return object_store->int8_array_class(); | |
| 1663 case kUint8Array: | |
| 1664 ASSERT(object_store->uint8_array_class() != Class::null()); | |
| 1665 return object_store->uint8_array_class(); | |
| 1666 case kInt16Array: | |
| 1667 ASSERT(object_store->int16_array_class() != Class::null()); | |
| 1668 return object_store->int16_array_class(); | |
| 1669 case kUint16Array: | |
| 1670 ASSERT(object_store->uint16_array_class() != Class::null()); | |
| 1671 return object_store->uint16_array_class(); | |
| 1672 case kInt32Array: | |
| 1673 ASSERT(object_store->int32_array_class() != Class::null()); | |
| 1674 return object_store->int32_array_class(); | |
| 1675 case kUint32Array: | |
| 1676 ASSERT(object_store->uint32_array_class() != Class::null()); | |
| 1677 return object_store->uint32_array_class(); | |
| 1678 case kInt64Array: | |
| 1679 ASSERT(object_store->int64_array_class() != Class::null()); | |
| 1680 return object_store->int64_array_class(); | |
| 1681 case kUint64Array: | |
| 1682 ASSERT(object_store->uint64_array_class() != Class::null()); | |
| 1683 return object_store->uint64_array_class(); | |
| 1684 case kFloat32Array: | |
| 1685 ASSERT(object_store->float32_array_class() != Class::null()); | |
| 1686 return object_store->float32_array_class(); | |
| 1687 case kFloat64Array: | |
| 1688 ASSERT(object_store->float64_array_class() != Class::null()); | |
| 1689 return object_store->float64_array_class(); | |
| 1690 case kExternalInt8Array: | |
| 1691 ASSERT(object_store->external_int8_array_class() != Class::null()); | |
| 1692 return object_store->external_int8_array_class(); | |
| 1693 case kExternalUint8Array: | |
| 1694 ASSERT(object_store->external_uint8_array_class() != Class::null()); | |
| 1695 return object_store->external_uint8_array_class(); | |
| 1696 case kExternalInt16Array: | |
| 1697 ASSERT(object_store->external_int16_array_class() != Class::null()); | |
| 1698 return object_store->external_int16_array_class(); | |
| 1699 case kExternalUint16Array: | |
| 1700 ASSERT(object_store->external_uint16_array_class() != Class::null()); | |
| 1701 return object_store->external_uint16_array_class(); | |
| 1702 case kExternalInt32Array: | |
| 1703 ASSERT(object_store->external_int32_array_class() != Class::null()); | |
| 1704 return object_store->external_int32_array_class(); | |
| 1705 case kExternalUint32Array: | |
| 1706 ASSERT(object_store->external_uint32_array_class() != Class::null()); | |
| 1707 return object_store->external_uint32_array_class(); | |
| 1708 case kExternalInt64Array: | |
| 1709 ASSERT(object_store->external_int64_array_class() != Class::null()); | |
| 1710 return object_store->external_int64_array_class(); | |
| 1711 case kExternalUint64Array: | |
| 1712 ASSERT(object_store->external_uint64_array_class() != Class::null()); | |
| 1713 return object_store->external_uint64_array_class(); | |
| 1714 case kExternalFloat32Array: | |
| 1715 ASSERT(object_store->external_float32_array_class() != Class::null()); | |
| 1716 return object_store->external_float32_array_class(); | |
| 1717 case kExternalFloat64Array: | |
| 1718 ASSERT(object_store->external_float64_array_class() != Class::null()); | |
| 1719 return object_store->external_float64_array_class(); | |
| 1720 case kStacktrace: | |
| 1721 ASSERT(object_store->stacktrace_class() != Class::null()); | |
| 1722 return object_store->stacktrace_class(); | |
| 1723 case kJSRegExp: | |
| 1724 ASSERT(object_store->jsregexp_class() != Class::null()); | |
| 1725 return object_store->jsregexp_class(); | |
| 1726 case kClosure: | |
| 1727 return Class::New<Closure>(); | |
| 1728 case kInstance: | |
| 1729 return Class::New<Instance>(); | |
| 1730 default: | |
| 1731 OS::Print("Class::GetClass kind unknown: %d\n", kind); | |
| 1732 UNREACHABLE(); | |
| 1733 } | 1522 } |
| 1523 if (kind == kInstance) { | |
| 1524 return Class::New<Instance>(); | |
| 1525 } | |
| 1526 if (kind >= kInteger && kind <= kJSRegExp) { | |
| 1527 Isolate* isolate = Isolate::Current(); | |
| 1528 ASSERT(isolate->class_table()->At(kind) != Class::null()); | |
| 1529 return isolate->class_table()->At(kind); | |
| 1530 } | |
| 1531 OS::Print("Class::GetClass kind unknown: %d\n", kind); | |
| 1532 UNREACHABLE(); | |
| 1734 return Class::null(); | 1533 return Class::null(); |
| 1735 } | 1534 } |
| 1736 | 1535 |
| 1737 | 1536 |
| 1738 RawClass* Class::NewNativeWrapper(Library* library, | 1537 RawClass* Class::NewNativeWrapper(Library* library, |
| 1739 const String& name, | 1538 const String& name, |
| 1740 int field_count) { | 1539 int field_count) { |
| 1741 Class& cls = Class::Handle(library->LookupClass(name)); | 1540 Class& cls = Class::Handle(library->LookupClass(name)); |
| 1742 if (cls.IsNull()) { | 1541 if (cls.IsNull()) { |
| 1743 cls = New<Instance>(name, Script::Handle(), Scanner::kDummyTokenIndex); | 1542 cls = New<Instance>(name, Script::Handle(), Scanner::kDummyTokenIndex); |
| (...skipping 5465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 7209 const Function& target) const { | 7008 const Function& target) const { |
| 7210 ASSERT(num_args_tested() > 1); // Otherwise use 'AddReceiverCheck'. | 7009 ASSERT(num_args_tested() > 1); // Otherwise use 'AddReceiverCheck'. |
| 7211 ASSERT(class_ids.length() == num_args_tested()); | 7010 ASSERT(class_ids.length() == num_args_tested()); |
| 7212 intptr_t old_num = NumberOfChecks(); | 7011 intptr_t old_num = NumberOfChecks(); |
| 7213 Array& data = Array::Handle(ic_data()); | 7012 Array& data = Array::Handle(ic_data()); |
| 7214 intptr_t new_len = data.Length() + TestEntryLength(); | 7013 intptr_t new_len = data.Length() + TestEntryLength(); |
| 7215 data = Array::Grow(data, new_len, Heap::kOld); | 7014 data = Array::Grow(data, new_len, Heap::kOld); |
| 7216 set_ic_data(data); | 7015 set_ic_data(data); |
| 7217 intptr_t data_pos = old_num * TestEntryLength(); | 7016 intptr_t data_pos = old_num * TestEntryLength(); |
| 7218 for (intptr_t i = 0; i < class_ids.length(); i++) { | 7017 for (intptr_t i = 0; i < class_ids.length(); i++) { |
| 7219 // Null is used as terminating value, do not add it. | 7018 // Null is used as terminating value, do not add it. |
|
regis
2012/07/24 13:49:25
You need to sync: r9835 committed - Use kIllegalOb
siva
2012/08/13 20:38:25
Done.
| |
| 7220 ASSERT(class_ids[i] != kNullClass); | |
| 7221 ASSERT(class_ids[i] != kIllegalObjectKind); | 7019 ASSERT(class_ids[i] != kIllegalObjectKind); |
| 7222 data.SetAt(data_pos++, Smi::Handle(Smi::New(class_ids[i]))); | 7020 data.SetAt(data_pos++, Smi::Handle(Smi::New(class_ids[i]))); |
| 7223 } | 7021 } |
| 7224 ASSERT(!target.IsNull()); | 7022 ASSERT(!target.IsNull()); |
| 7225 data.SetAt(data_pos, target); | 7023 data.SetAt(data_pos, target); |
| 7226 } | 7024 } |
| 7227 | 7025 |
| 7228 | 7026 |
| 7229 void ICData::AddReceiverCheck(intptr_t receiver_class_id, | 7027 void ICData::AddReceiverCheck(intptr_t receiver_class_id, |
| 7230 const Function& target) const { | 7028 const Function& target) const { |
| 7231 ASSERT(num_args_tested() == 1); // Otherwise use 'AddCheck'. | 7029 ASSERT(num_args_tested() == 1); // Otherwise use 'AddCheck'. |
| 7232 // Not supporting collection of null receivers. | 7030 // Not supporting collection of null receivers. |
| 7233 ASSERT(receiver_class_id != kNullClass); | 7031 ASSERT(receiver_class_id != kNullClassId); |
| 7234 ASSERT(receiver_class_id != kIllegalObjectKind); | 7032 ASSERT(receiver_class_id != kIllegalObjectKind); |
| 7235 ASSERT(!target.IsNull()); | 7033 ASSERT(!target.IsNull()); |
| 7236 | 7034 |
| 7237 intptr_t old_num = NumberOfChecks(); | 7035 intptr_t old_num = NumberOfChecks(); |
| 7238 Array& data = Array::Handle(ic_data()); | 7036 Array& data = Array::Handle(ic_data()); |
| 7239 intptr_t new_len = data.Length() + TestEntryLength(); | 7037 intptr_t new_len = data.Length() + TestEntryLength(); |
| 7240 data = Array::Grow(data, new_len, Heap::kOld); | 7038 data = Array::Grow(data, new_len, Heap::kOld); |
| 7241 set_ic_data(data); | 7039 set_ic_data(data); |
| 7242 intptr_t data_pos = old_num * TestEntryLength(); | 7040 intptr_t data_pos = old_num * TestEntryLength(); |
| 7243 if ((receiver_class_id == kSmi) && (data_pos > 0)) { | 7041 if ((receiver_class_id == kSmi) && (data_pos > 0)) { |
| (...skipping 3631 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 10875 const String& str = String::Handle(pattern()); | 10673 const String& str = String::Handle(pattern()); |
| 10876 const char* format = "JSRegExp: pattern=%s flags=%s"; | 10674 const char* format = "JSRegExp: pattern=%s flags=%s"; |
| 10877 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); | 10675 intptr_t len = OS::SNPrint(NULL, 0, format, str.ToCString(), Flags()); |
| 10878 char* chars = reinterpret_cast<char*>( | 10676 char* chars = reinterpret_cast<char*>( |
| 10879 Isolate::Current()->current_zone()->Allocate(len + 1)); | 10677 Isolate::Current()->current_zone()->Allocate(len + 1)); |
| 10880 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); | 10678 OS::SNPrint(chars, (len + 1), format, str.ToCString(), Flags()); |
| 10881 return chars; | 10679 return chars; |
| 10882 } | 10680 } |
| 10883 | 10681 |
| 10884 } // namespace dart | 10682 } // namespace dart |
| OLD | NEW |