Fix for issue 22778, stored the function object in the forward reference table instead of the implicit static closure.

R=iposva@google.com

Review URL: https://codereview.chromium.org//1004923002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44466 260f80e4-7a28-3924-810f-c04153c831b5
This commit is contained in:
asiva@google.com 2015-03-13 15:53:50 +00:00
parent a7b1765187
commit d322d386db
2 changed files with 22 additions and 3 deletions

View file

@ -243,8 +243,9 @@ RawObject* SnapshotReader::ReadStaticImplicitClosure(intptr_t object_id,
// First create a function object and associate it with the specified
// 'object_id'.
Function& func = Function::ZoneHandle(isolate(), Function::null());
AddBackRef(object_id, &func, kIsDeserialized);
Function& func = Function::Handle(isolate(), Function::null());
Instance& obj = Instance::ZoneHandle(isolate(), Instance::null());
AddBackRef(object_id, &obj, kIsDeserialized);
// Read the library/class/function information and lookup the function.
str_ ^= ReadObjectImpl();
@ -273,7 +274,8 @@ RawObject* SnapshotReader::ReadStaticImplicitClosure(intptr_t object_id,
ASSERT(!func.IsNull());
// Return the associated implicit static closure.
return func.ImplicitStaticClosure();
obj = func.ImplicitStaticClosure();
return obj.raw();
}

View file

@ -0,0 +1,17 @@
// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import "dart:isolate";
import "package:expect/expect.dart";
func(){}
main() {
var r = new RawReceivePort();
r.handler = (v) {
Expect.isTrue(v[0] == v[1]);
r.close();
};
r.sendPort.send([func, func]);
}