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

Issue 12764005: Get rid of old code for union/intersection in HType. (Closed)

Created:
7 years, 9 months ago by kasperl
Modified:
7 years, 9 months ago
Reviewers:
ngeoffray
CC:
reviews_dartlang.org
Visibility:
Public.

Description

Get rid of old code for union/intersection in HType. Introduce the concept of an empty type mask and use it to represent both truly non-nullable empty masks (conflicting) and nullable empty masks (null). Here are the differences (old ==> new) between the output of the union and intersection operations when running all our tests: Unchecked ========= intersection(BoundedType(mask=[null|exact=JSExtendableArray]), indexable) :: readable array ==> extendable array intersection(BoundedType(mask=[null|exact=JSFixedArray]), indexable) :: readable array ==> fixed array intersection(BoundedType(mask=[null|exact=JSFixedArray]), mutable array) :: mutable array ==> fixed array intersection(BoundedType(mask=[subclass=Object]), null type) :: null type ==> conflicting intersection(BoundedType(mask=[subclass=Object]), String or null) :: String or null ==> String intersection(BoundedType(mask=[subclass=Object]), unknown) :: unknown ==> BoundedType(mask=[subclass=Object]) intersection(BoundedType(mask=[subtype=Map]), unknown) :: BoundedType(mask=[subtype=Map]) ==> conflicting intersection(unknown, BoundedType(mask=[subtype=Map])) :: BoundedType(mask=[subtype=Map]) ==> conflicting intersection(unknown, BoundedType(mask=[subtype=SendPortSync])) :: BoundedType(mask=[subtype=SendPortSync]) ==> conflicting union(integer or null, String) :: unknown ==> BoundedType(mask=[null|subtype=Comparable]) union(integer, String) :: unknown ==> BoundedType(mask=[subtype=Comparable]) union(null type, BoundedType(mask=[exact=Function])) :: unknown ==> BoundedType(mask=[null|exact=Function]) union(null type, BoundedType(mask=[exact=HashMap])) :: unknown ==> BoundedType(mask=[null|exact=HashMap]) union(null type, BoundedType(mask=[exact=_NativeJsSendPort])) :: unknown ==> BoundedType(mask=[null|exact=_NativeJsSendPort]) union(readable array, BoundedType(mask=[subclass=Iterable])) :: unknown ==> BoundedType(mask=[subtype=Iterable]) Checked ======= intersection(BoundedType(mask=[null|exact=JSExtendableArray]), indexable) :: readable array ==> extendable array intersection(BoundedType(mask=[null|exact=JSFixedArray]), indexable) :: readable array ==> fixed array intersection(BoundedType(mask=[null|exact=JSFixedArray]), mutable array) :: mutable array ==> fixed array intersection(BoundedType(mask=[null|subtype=_FutureErrorTest]), unknown) :: BoundedType(mask=[null|subtype=_FutureErrorTest]) ==> null type intersection(BoundedType(mask=[null|subtype=_FutureOnError]), unknown) :: BoundedType(mask=[null|subtype=_FutureOnError]) ==> null type intersection(BoundedType(mask=[subclass=Object]), null type) :: null type ==> conflicting intersection(BoundedType(mask=[subclass=Object]), unknown) :: unknown ==> BoundedType(mask=[subclass=Object]) intersection(BoundedType(mask=[subtype=Map]), unknown) :: BoundedType(mask=[subtype=Map]) ==> conflicting intersection(unknown, BoundedType(mask=[null|subtype=_CheckExceptionFn])) :: BoundedType(mask=[null|subtype=_CheckExceptionFn]) ==> null type intersection(unknown, BoundedType(mask=[null|subtype=Function])) :: BoundedType(mask=[null|subtype=Function]) ==> null type intersection(unknown, BoundedType(mask=[null|subtype=Object])) :: BoundedType(mask=[null|subtype=Object]) ==> unknown intersection(unknown, BoundedType(mask=[null|subtype=void])) :: BoundedType(mask=[null|subtype=void]) ==> null type intersection(unknown, BoundedType(mask=[subtype=Map])) :: BoundedType(mask=[subtype=Map]) ==> conflicting intersection(unknown, BoundedType(mask=[subtype=SendPortSync])) :: BoundedType(mask=[subtype=SendPortSync]) ==> conflicting union(integer or null, String) :: unknown ==> BoundedType(mask=[null|subtype=Comparable]) union(integer, String) :: unknown ==> BoundedType(mask=[subtype=Comparable]) union(null type, BoundedType(mask=[exact=HashMap])) :: unknown ==> BoundedType(mask=[null|exact=HashMap]) union(null type, BoundedType(mask=[exact=_NativeJsSendPort])) :: unknown ==> BoundedType(mask=[null|exact=_NativeJsSendPort]) union(number or null, BoundedType(mask=[null|subtype=Comparable])) :: unknown ==> BoundedType(mask=[null|subtype=Comparable]) union(number or null, String or null) :: unknown ==> BoundedType(mask=[null|subtype=Comparable]) union(readable array, BoundedType(mask=[subclass=Iterable])) :: unknown ==> BoundedType(mask=[subtype=Iterable]) union(String or null, number or null) :: unknown ==> BoundedType(mask=[null|subtype=Comparable]) union(String or null, number) :: unknown ==> BoundedType(mask=[null|subtype=Comparable]) R=ngeoffray@google.com BUG= Committed: https://code.google.com/p/dart/source/detail?r=19838

Patch Set 1 #

Patch Set 2 : Remove unused factory methods. #

Total comments: 6

Patch Set 3 : Add comments. #

Messages

Total messages: 6 (0 generated)
kasperl
7 years, 9 months ago (2013-03-11 13:40:38 UTC) #1
kasperl
On 2013/03/11 13:40:38, kasperl wrote: The intersections with 'unknown' look a little bit weird. I'll ...
7 years, 9 months ago (2013-03-11 13:47:33 UTC) #2
kasperl
On 2013/03/11 13:47:33, kasperl wrote: > On 2013/03/11 13:40:38, kasperl wrote: > > The intersections ...
7 years, 9 months ago (2013-03-11 13:53:37 UTC) #3
ngeoffray
LGTM! https://codereview.chromium.org/12764005/diff/5001/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart File sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (right): https://codereview.chromium.org/12764005/diff/5001/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart#newcode2046 sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart:2046: if (mask.isEmpty) continue; Please add a comment that ...
7 years, 9 months ago (2013-03-11 14:52:28 UTC) #4
kasperl
https://codereview.chromium.org/12764005/diff/5001/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart File sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart (right): https://codereview.chromium.org/12764005/diff/5001/sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart#newcode2046 sdk/lib/_internal/compiler/implementation/js_backend/emitter.dart:2046: if (mask.isEmpty) continue; On 2013/03/11 14:52:28, ngeoffray wrote: > ...
7 years, 9 months ago (2013-03-12 05:56:56 UTC) #5
kasperl
7 years, 9 months ago (2013-03-12 05:59:50 UTC) #6
Message was sent while issue was closed.
Committed patchset #3 manually as r19838 (presubmit successful).

Powered by Google App Engine
This is Rietveld 408576698