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

Issue 23633002: Implementation for ClosureMirror.findInContext. (Closed)

Created:
7 years, 3 months ago by Michael Lippautz (Google)
Modified:
7 years, 2 months ago
Reviewers:
ahe, rmacnak, gbracha, siva
CC:
reviews_dartlang.org, vm-dev_dartlang.org
Visibility:
Public.

Description

Implementation for ClosureMirror.findInContext. Fixes issue 5897. BUG=https://code.google.com/p/dart/issues/detail?id=5897 R=asiva@google.com, gbracha@google.com, rmacnak@google.com Committed: https://code.google.com/p/dart/source/detail?r=27982

Patch Set 1 : #

Patch Set 2 : #

Total comments: 42

Patch Set 3 : Addressed comments + rebase #

Total comments: 6

Patch Set 4 : Addressed comments #

Total comments: 32

Patch Set 5 : Aaaaaaaaaand one more round of comments #

Unified diffs Side-by-side diffs Delta from patch set Stats (+616 lines, -181 lines) Patch
M runtime/lib/mirrors.cc View 1 2 3 4 10 chunks +421 lines, -159 lines 0 comments Download
M runtime/lib/mirrors_impl.dart View 1 2 2 chunks +13 lines, -3 lines 0 comments Download
M runtime/vm/bootstrap_natives.h View 1 chunk +1 line, -0 lines 0 comments Download
M runtime/vm/dart_api_impl.cc View 1 2 3 chunks +2 lines, -14 lines 0 comments Download
M runtime/vm/object.h View 1 2 1 chunk +2 lines, -0 lines 0 comments Download
M runtime/vm/object.cc View 1 2 1 chunk +7 lines, -0 lines 0 comments Download
M sdk/lib/mirrors/mirrors.dart View 1 1 chunk +1 line, -1 line 0 comments Download
M tests/lib/lib.status View 1 2 1 chunk +1 line, -0 lines 0 comments Download
A tests/lib/mirrors/closure_mirror_find_in_context_test.dart View 1 2 1 chunk +151 lines, -0 lines 0 comments Download
A tests/lib/mirrors/closure_mirror_import1.dart View 1 chunk +15 lines, -0 lines 0 comments Download
A + tests/lib/mirrors/closure_mirror_import2.dart View 1 chunk +2 lines, -4 lines 0 comments Download

Messages

Total messages: 12 (0 generated)
Michael Lippautz (Google)
RFC. Probably requires more refactoring. Ideas? Code itself works as intended, accounting for imports (w/ ...
7 years, 3 months ago (2013-08-27 20:54:01 UTC) #1
Michael Lippautz (Google)
+Peter: API + tests Rebased and reworked the complete patchset. Partially depends on https://codereview.chromium.org/23909002/ (resolver.h/.cc ...
7 years, 3 months ago (2013-09-05 20:26:53 UTC) #2
Michael Lippautz (Google)
PTAL Rebased on not dependent on any other CLs anymore.
7 years, 2 months ago (2013-09-25 23:25:34 UTC) #3
gbracha
API lgtm
7 years, 2 months ago (2013-09-25 23:26:54 UTC) #4
siva
https://chromiumcodereview.appspot.com/23633002/diff/21001/runtime/lib/mirrors.cc File runtime/lib/mirrors.cc (right): https://chromiumcodereview.appspot.com/23633002/diff/21001/runtime/lib/mirrors.cc#newcode411 runtime/lib/mirrors.cc:411: } This function should probably be an instance method ...
7 years, 2 months ago (2013-09-26 17:05:07 UTC) #5
rmacnak
https://codereview.chromium.org/23633002/diff/21001/runtime/lib/mirrors.cc File runtime/lib/mirrors.cc (right): https://codereview.chromium.org/23633002/diff/21001/runtime/lib/mirrors.cc#newcode411 runtime/lib/mirrors.cc:411: } On 2013/09/26 17:05:07, siva wrote: > This function ...
7 years, 2 months ago (2013-09-26 17:49:38 UTC) #6
Michael Lippautz (Google)
Thanks for all the comments! - Since a field being null is different from not ...
7 years, 2 months ago (2013-09-26 21:16:01 UTC) #7
rmacnak
LGTM with comments https://codereview.chromium.org/23633002/diff/32001/runtime/lib/mirrors.cc File runtime/lib/mirrors.cc (right): https://codereview.chromium.org/23633002/diff/32001/runtime/lib/mirrors.cc#newcode428 runtime/lib/mirrors.cc:428: if (result.IsError()) { Could also use ...
7 years, 2 months ago (2013-09-26 22:16:00 UTC) #8
Michael Lippautz (Google)
https://codereview.chromium.org/23633002/diff/32001/runtime/lib/mirrors.cc File runtime/lib/mirrors.cc (right): https://codereview.chromium.org/23633002/diff/32001/runtime/lib/mirrors.cc#newcode428 runtime/lib/mirrors.cc:428: if (result.IsError()) { On 2013/09/26 22:16:00, Ryan Macnak wrote: ...
7 years, 2 months ago (2013-09-26 22:40:50 UTC) #9
siva
LGTM with some comments https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc File runtime/lib/mirrors.cc (right): https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#newcode406 runtime/lib/mirrors.cc:406: } else if (result.IsInstance()) { ...
7 years, 2 months ago (2013-09-27 00:21:00 UTC) #10
Michael Lippautz (Google)
Committed patchset #5 manually as r27982 (presubmit successful).
7 years, 2 months ago (2013-09-27 01:28:20 UTC) #11
Michael Lippautz (Google)
7 years, 2 months ago (2013-09-27 01:29:29 UTC) #12
Message was sent while issue was closed.
https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc
File runtime/lib/mirrors.cc (right):

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:406: } else if (result.IsInstance()) {
On 2013/09/27 00:21:01, siva wrote:
> if (result.IsInstance()) {
>   ...
>   ...
> }
> 
> The else is not needed as you have an UNREACHABLE();

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:425: 
On 2013/09/27 00:21:01, siva wrote:
> blank line not needed

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:461: // Looking for a getter but found a regular method:
closurize.
On 2013/09/27 00:21:01, siva wrote:
> closurize it.

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:469: // A field was found.  Check for a getter in the
field's owner classs.
On 2013/09/27 00:21:01, siva wrote:
> An uninitialized field was found.

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:476: }
On 2013/09/27 00:21:01, siva wrote:
> will read better if you wrote it as
> if (!field.IsUninitialized()) {
>   return field.value();
> }
> ...
> ...
> ...

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:497: // not leak into Dartland.
On 2013/09/27 00:21:01, siva wrote:
> How do you ensure that it does not leak into Dart land?

Adjusted the comment.

As clarified offline: All these functions are static and thus local to the
mirrors.cc file. The calling root function (ClosureMirror_findInContext) make
sure that this special null does not leak.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:517: // Looking for a getter but found a regular method:
closurize.
On 2013/09/27 00:21:01, siva wrote:
> closurize it.

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:552: String& internal_getter_name =
String::Handle(Field::GetterName(getter_name));
On 2013/09/27 00:21:01, siva wrote:
> const String&

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:554: Resolver::ResolveDynamicAnyArgsAllowPrivate(klass,
internal_getter_name));
On 2013/09/27 00:21:01, siva wrote:
> const Function& function

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:562: 
On 2013/09/27 00:21:01, siva wrote:
> Add a comment here that InvokeDynamicFunction invokes NoSuchMethod if function
> is Null

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:579: Instance& result = Instance::Handle();
On 2013/09/27 00:21:01, siva wrote:
> This declaration can be moved inside the if (...) as it is only used there
> 
> const Instance& result = Result::Handle(InvokeLibrary......)

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:678: InvokeLibraryGetter(library, lookup_name, false));
On 2013/09/27 00:21:01, siva wrote:
> const Instance& result

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:682: Function& func = Function::Handle(
On 2013/09/27 00:21:01, siva wrote:
> const Function

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:690: Class& cls = Class::Handle(
On 2013/09/27 00:21:01, siva wrote:
> const Class

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:1225: } else if (parts_len == 3) {
On 2013/09/27 00:21:01, siva wrote:
> this can just be:
> 
> else {
>   ASSERT(parts_len == 3);
>   ....
> }

Done.

https://codereview.chromium.org/23633002/diff/38001/runtime/lib/mirrors.cc#ne...
runtime/lib/mirrors.cc:1240: // We return a tuple (list) where the first slot
indicates whether we found a
On 2013/09/27 00:21:01, siva wrote:
> first slot is a boolean that indicates

Done.

Powered by Google App Engine
This is Rietveld 408576698