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

Issue 2625913003: Defer all recursive mixins (Closed)

Created:
3 years, 11 months ago by vsm
Modified:
3 years, 11 months ago
Reviewers:
Leaf, Jennifer Messerly
CC:
dev-compiler+reviews_dartlang.org
Target Ref:
refs/heads/master
Visibility:
Public.

Description

Defer all recursive mixins This defers mixins along with the supertype. It passes Leaf's example on the bug. Will add that as a proper test. Fixes #28334 R=jmesserly@google.com Committed: https://github.com/dart-lang/sdk/commit/46b7f79fd50cc2c9b21fbc76fbc487b74782ae2b

Patch Set 1 #

Total comments: 6
Unified diffs Side-by-side diffs Delta from patch set Stats (+22 lines, -19 lines) Patch
M pkg/dev_compiler/lib/js/amd/dart_sdk.js View 1 chunk +1 line, -1 line 0 comments Download
M pkg/dev_compiler/lib/js/common/dart_sdk.js View 1 chunk +1 line, -1 line 0 comments Download
M pkg/dev_compiler/lib/js/es6/dart_sdk.js View 1 chunk +1 line, -1 line 0 comments Download
M pkg/dev_compiler/lib/js/legacy/dart_sdk.js View 1 chunk +1 line, -1 line 0 comments Download
M pkg/dev_compiler/lib/src/compiler/code_generator.dart View 2 chunks +18 lines, -15 lines 6 comments Download

Messages

Total messages: 7 (3 generated)
vsm
3 years, 11 months ago (2017-01-11 17:59:49 UTC) #3
Jennifer Messerly
lgtm https://codereview.chromium.org/2625913003/diff/1/pkg/dev_compiler/lib/src/compiler/code_generator.dart File pkg/dev_compiler/lib/src/compiler/code_generator.dart (right): https://codereview.chromium.org/2625913003/diff/1/pkg/dev_compiler/lib/src/compiler/code_generator.dart#newcode1252 pkg/dev_compiler/lib/src/compiler/code_generator.dart:1252: var basetypes = [ type.superclass ]..addAll(type.mixins); nit: run ...
3 years, 11 months ago (2017-01-11 18:11:47 UTC) #4
vsm
Committed patchset #1 (id:1) manually as 46b7f79fd50cc2c9b21fbc76fbc487b74782ae2b (presubmit successful).
3 years, 11 months ago (2017-01-11 18:32:32 UTC) #6
vsm
3 years, 11 months ago (2017-01-11 18:33:01 UTC) #7
Message was sent while issue was closed.
https://codereview.chromium.org/2625913003/diff/1/pkg/dev_compiler/lib/src/co...
File pkg/dev_compiler/lib/src/compiler/code_generator.dart (right):

https://codereview.chromium.org/2625913003/diff/1/pkg/dev_compiler/lib/src/co...
pkg/dev_compiler/lib/src/compiler/code_generator.dart:1252: var basetypes = [
type.superclass ]..addAll(type.mixins);
On 2017/01/11 18:11:47, Jennifer Messerly wrote:
> nit: run dart format

Done.

https://codereview.chromium.org/2625913003/diff/1/pkg/dev_compiler/lib/src/co...
pkg/dev_compiler/lib/src/compiler/code_generator.dart:1256: if
(basetypes.any((t) => _deferIfNeeded(t, element))) {
On 2017/01/11 18:11:47, Jennifer Messerly wrote:
> alternatively, could do this:
> 
> var baseTypes = <DartType>[];
> for (var t in [type.superclass]..addAll(type.mixins)) {
>   if (_deferIfNeeded(t, element)) {
>     baseTypes.add(fillDynamicTypeArgs(t.element.type));
>     _hasDeferredSupertype.add(element);
>   } else {
>     baseTypes.add(t);
>   }
> }
> 
> 
> ... slightly more precise on which types are being deferred. Not sure it's
worth
> it tho.

We also don't need to fill in dynamic for all type params on a single type -
just where it's recursive.  Thought about doing this, but didn't seem worth it.

https://codereview.chromium.org/2625913003/diff/1/pkg/dev_compiler/lib/src/co...
pkg/dev_compiler/lib/src/compiler/code_generator.dart:1681: } else if
(_hasDeferredSupertype.contains(classElem)) {
On 2017/01/11 18:11:47, Jennifer Messerly wrote:
> incidentally ... this isn't caused by your change, but I'm never sure why we
> used _hasDeferredSupertype like a global Set. It should be quite possible to
> return the value from _emitClassHeritage and pass it back down to this method.
> 
> We're literally using a Set on the class rather than pass a return value and
> parameter. It's strange and I've been meaning to refactor it at some point.

Added a comment.  _emitClassHeritage/_emitClassExpression are called a handful
of places - wasn't obvious if we'd need to thread all of those.

Powered by Google App Engine
This is Rietveld 408576698