Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(204)

Side by Side Diff: runtime/vm/object.cc

Issue 2693863006: VM: Restore old implementation of ClassID.cid* fields (Closed)
Patch Set: Done Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | tools/patch_sdk.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "include/dart_api.h" 7 #include "include/dart_api.h"
8 #include "platform/assert.h" 8 #include "platform/assert.h"
9 #include "vm/assembler.h" 9 #include "vm/assembler.h"
10 #include "vm/become.h" 10 #include "vm/become.h"
(...skipping 1652 matching lines...) Expand 10 before | Expand all | Expand 10 after
1663 } 1663 }
1664 1664
1665 ClassFinalizer::VerifyBootstrapClasses(); 1665 ClassFinalizer::VerifyBootstrapClasses();
1666 1666
1667 // Set up the intrinsic state of all functions (core, math and typed data). 1667 // Set up the intrinsic state of all functions (core, math and typed data).
1668 Intrinsifier::InitializeState(); 1668 Intrinsifier::InitializeState();
1669 1669
1670 // Set up recognized state of all functions (core, math and typed data). 1670 // Set up recognized state of all functions (core, math and typed data).
1671 MethodRecognizer::InitializeState(); 1671 MethodRecognizer::InitializeState();
1672 1672
1673 // Adds static const fields (class ids) to the class 'ClassID');
1674 lib = Library::LookupLibrary(thread, Symbols::DartInternal());
1675 ASSERT(!lib.IsNull());
1676 cls = lib.LookupClassAllowPrivate(Symbols::ClassID());
1677 ASSERT(!cls.IsNull());
1678 cls.InjectCIDFields();
1679
1673 isolate->object_store()->InitKnownObjects(); 1680 isolate->object_store()->InitKnownObjects();
1674 #endif // !defined(DART_PRECOMPILED_RUNTIME) 1681 #endif // !defined(DART_PRECOMPILED_RUNTIME)
1675 } else { 1682 } else {
1676 // Object::Init version when we are running in a version of dart that has a 1683 // Object::Init version when we are running in a version of dart that has a
1677 // full snapshot linked in and an isolate is initialized using the full 1684 // full snapshot linked in and an isolate is initialized using the full
1678 // snapshot. 1685 // snapshot.
1679 ObjectStore* object_store = isolate->object_store(); 1686 ObjectStore* object_store = isolate->object_store();
1680 1687
1681 Class& cls = Class::Handle(zone); 1688 Class& cls = Class::Handle(zone);
1682 1689
(...skipping 1467 matching lines...) Expand 10 before | Expand all | Expand 10 after
3150 const intptr_t num_old_fields = arr.Length(); 3157 const intptr_t num_old_fields = arr.Length();
3151 const Array& new_arr = Array::Handle( 3158 const Array& new_arr = Array::Handle(
3152 Array::Grow(arr, num_old_fields + num_new_fields, Heap::kOld)); 3159 Array::Grow(arr, num_old_fields + num_new_fields, Heap::kOld));
3153 for (intptr_t i = 0; i < num_new_fields; i++) { 3160 for (intptr_t i = 0; i < num_new_fields; i++) {
3154 new_arr.SetAt(i + num_old_fields, *new_fields.At(i)); 3161 new_arr.SetAt(i + num_old_fields, *new_fields.At(i));
3155 } 3162 }
3156 SetFields(new_arr); 3163 SetFields(new_arr);
3157 } 3164 }
3158 3165
3159 3166
3167 void Class::InjectCIDFields() const {
3168 Thread* thread = Thread::Current();
3169 Zone* zone = thread->zone();
3170 Field& field = Field::Handle(zone);
3171 Smi& value = Smi::Handle(zone);
3172 String& field_name = String::Handle(zone);
3173
3174 #define CLASS_LIST_WITH_NULL(V) \
3175 V(Null) \
3176 CLASS_LIST_NO_OBJECT(V)
3177
3178 #define ADD_SET_FIELD(clazz) \
3179 field_name = Symbols::New(thread, "cid" #clazz); \
3180 field = \
3181 Field::New(field_name, true, false, true, false, *this, \
3182 Type::Handle(Type::IntType()), TokenPosition::kMinSource); \
3183 value = Smi::New(k##clazz##Cid); \
3184 field.SetStaticValue(value, true); \
3185 AddField(field);
3186
3187 CLASS_LIST_WITH_NULL(ADD_SET_FIELD)
3188 #undef ADD_SET_FIELD
3189 #undef CLASS_LIST_WITH_NULL
3190 }
3191
3192
3160 template <class FakeInstance> 3193 template <class FakeInstance>
3161 RawClass* Class::NewCommon(intptr_t index) { 3194 RawClass* Class::NewCommon(intptr_t index) {
3162 ASSERT(Object::class_class() != Class::null()); 3195 ASSERT(Object::class_class() != Class::null());
3163 Class& result = Class::Handle(); 3196 Class& result = Class::Handle();
3164 { 3197 {
3165 RawObject* raw = 3198 RawObject* raw =
3166 Object::Allocate(Class::kClassId, Class::InstanceSize(), Heap::kOld); 3199 Object::Allocate(Class::kClassId, Class::InstanceSize(), Heap::kOld);
3167 NoSafepointScope no_safepoint; 3200 NoSafepointScope no_safepoint;
3168 result ^= raw; 3201 result ^= raw;
3169 } 3202 }
(...skipping 19679 matching lines...) Expand 10 before | Expand all | Expand 10 after
22849 return UserTag::null(); 22882 return UserTag::null();
22850 } 22883 }
22851 22884
22852 22885
22853 const char* UserTag::ToCString() const { 22886 const char* UserTag::ToCString() const {
22854 const String& tag_label = String::Handle(label()); 22887 const String& tag_label = String::Handle(label());
22855 return tag_label.ToCString(); 22888 return tag_label.ToCString();
22856 } 22889 }
22857 22890
22858 } // namespace dart 22891 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | tools/patch_sdk.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698