Chromium Code Reviews| Index: runtime/vm/bootstrap.cc |
| diff --git a/runtime/vm/bootstrap.cc b/runtime/vm/bootstrap.cc |
| index 9839c5a952c0805bec5d897b6e6663867a16a407..d90c7321eea087b51d8585725490b0e5b4118f63 100644 |
| --- a/runtime/vm/bootstrap.cc |
| +++ b/runtime/vm/bootstrap.cc |
| @@ -267,8 +267,23 @@ static void Finish(Thread* thread, bool from_kernel) { |
| // instances. This allows us to just finalize function types without going |
| // through the hoops of trying to compile their scope class. |
| ObjectStore* object_store = thread->isolate()->object_store(); |
| - Class& cls = Class::Handle(thread->zone(), object_store->closure_class()); |
| + Zone* zone = thread->zone(); |
| + Class& cls = Class::Handle(zone, object_store->closure_class()); |
| Compiler::CompileClass(cls); |
| + |
| +#if defined(DEBUG) |
| + // Verify that closure field offsets are identical in Dart and C++. |
| + const Array& fields = Array::Handle(zone, cls.fields()); |
| + ASSERT(fields.Length() == 3); |
| + Field& field = Field::Handle(zone); |
| + field ^= fields.At(0); |
|
Cutch
2017/02/24 22:58:32
Maybe also verify field name?
regis
2017/02/24 23:02:35
The Dart names are never used. As long as we have
|
| + ASSERT(field.Offset() == Closure::instantiator_offset()); |
| + field ^= fields.At(1); |
| + ASSERT(field.Offset() == Closure::function_offset()); |
| + field ^= fields.At(2); |
| + ASSERT(field.Offset() == Closure::context_offset()); |
| +#endif // defined(DEBUG) |
| + |
| // Eagerly compile Bool class, bool constants are used from within compiler. |
| cls = object_store->bool_class(); |
| Compiler::CompileClass(cls); |