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

Side by Side Diff: pkg/compiler/lib/src/universe/side_effects.dart

Issue 969093002: dart2js: Allow to encode side-effects in the spec-string of JS and similar built-ins. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix another bad type annotation. Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of universe; 5 part of universe;
6 6
7 class SideEffects { 7 class SideEffects {
8 // Changes flags. 8 // Changes flags.
9 static const int FLAG_CHANGES_INDEX = 0; 9 static const int FLAG_CHANGES_INDEX = 0;
10 static const int FLAG_CHANGES_INSTANCE_PROPERTY = FLAG_CHANGES_INDEX + 1; 10 static const int FLAG_CHANGES_INSTANCE_PROPERTY = FLAG_CHANGES_INDEX + 1;
11 static const int FLAG_CHANGES_STATIC_PROPERTY 11 static const int FLAG_CHANGES_STATIC_PROPERTY
12 = FLAG_CHANGES_INSTANCE_PROPERTY + 1; 12 = FLAG_CHANGES_INSTANCE_PROPERTY + 1;
13 static const int FLAG_CHANGES_COUNT = FLAG_CHANGES_STATIC_PROPERTY + 1; 13 static const int FLAG_CHANGES_COUNT = FLAG_CHANGES_STATIC_PROPERTY + 1;
14 14
15 // Depends flags (one for each changes flag). 15 // Depends flags (one for each changes flag).
16 static const int FLAG_DEPENDS_ON_INDEX_STORE = FLAG_CHANGES_COUNT; 16 static const int FLAG_DEPENDS_ON_INDEX_STORE = FLAG_CHANGES_COUNT;
17 static const int FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE = 17 static const int FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE =
18 FLAG_DEPENDS_ON_INDEX_STORE + 1; 18 FLAG_DEPENDS_ON_INDEX_STORE + 1;
19 static const int FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE = 19 static const int FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE =
20 FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE + 1; 20 FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE + 1;
21 static const int FLAG_DEPENDS_ON_COUNT = 21 static const int FLAG_DEPENDS_ON_COUNT =
22 FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE + 1; 22 FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE + 1;
23 23
24 int flags = 0; 24 int _flags = 0;
25 25
26 SideEffects() { 26 SideEffects() {
27 setAllSideEffects(); 27 setAllSideEffects();
28 setDependsOnSomething(); 28 setDependsOnSomething();
29 } 29 }
30 30
31 SideEffects.empty(); 31 SideEffects.empty();
32 32
33 bool operator==(other) => flags == other.flags; 33 bool operator==(other) => _flags == other._flags;
34 34
35 int get hashCode => throw new UnsupportedError('SideEffects.hashCode'); 35 int get hashCode => throw new UnsupportedError('SideEffects.hashCode');
36 36
37 bool getFlag(int position) => (flags & (1 << position)) != 0; 37 bool _getFlag(int position) => (_flags & (1 << position)) != 0;
38 void setFlag(int position) { flags |= (1 << position); } 38 void _setFlag(int position) { _flags |= (1 << position); }
39 bool _clearFlag(int position) { _flags &= ~(1 << position); }
39 40
40 int getChangesFlags() => flags & ((1 << FLAG_CHANGES_COUNT) - 1); 41 int getChangesFlags() => _flags & ((1 << FLAG_CHANGES_COUNT) - 1);
41 int getDependsOnFlags() { 42 int getDependsOnFlags() {
42 return (flags & ((1 << FLAG_DEPENDS_ON_COUNT) - 1)) >> FLAG_CHANGES_COUNT; 43 return (_flags & ((1 << FLAG_DEPENDS_ON_COUNT) - 1)) >> FLAG_CHANGES_COUNT;
43 } 44 }
44 45
45 bool hasSideEffects() => getChangesFlags() != 0; 46 bool hasSideEffects() => getChangesFlags() != 0;
46 bool dependsOnSomething() => getDependsOnFlags() != 0; 47 bool dependsOnSomething() => getDependsOnFlags() != 0;
47 48
48 void setAllSideEffects() { flags |= ((1 << FLAG_CHANGES_COUNT) - 1); } 49 void setAllSideEffects() { _flags |= ((1 << FLAG_CHANGES_COUNT) - 1); }
49 50
50 void clearAllSideEffects() { flags &= ~((1 << FLAG_CHANGES_COUNT) - 1); } 51 void clearAllSideEffects() { _flags &= ~((1 << FLAG_CHANGES_COUNT) - 1); }
51 52
52 void setDependsOnSomething() { 53 void setDependsOnSomething() {
53 int count = FLAG_DEPENDS_ON_COUNT - FLAG_CHANGES_COUNT; 54 int count = FLAG_DEPENDS_ON_COUNT - FLAG_CHANGES_COUNT;
54 flags |= (((1 << count) - 1) << FLAG_CHANGES_COUNT); 55 _flags |= (((1 << count) - 1) << FLAG_CHANGES_COUNT);
55 } 56 }
56 void clearAllDependencies() { 57 void clearAllDependencies() {
57 int count = FLAG_DEPENDS_ON_COUNT - FLAG_CHANGES_COUNT; 58 int count = FLAG_DEPENDS_ON_COUNT - FLAG_CHANGES_COUNT;
58 flags &= ~(((1 << count) - 1) << FLAG_CHANGES_COUNT); 59 _flags &= ~(((1 << count) - 1) << FLAG_CHANGES_COUNT);
59 } 60 }
60 61
61 bool dependsOnStaticPropertyStore() { 62 bool dependsOnStaticPropertyStore() {
62 return getFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE); 63 return _getFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE);
63 } 64 }
64 void setDependsOnStaticPropertyStore() { 65 void setDependsOnStaticPropertyStore() {
65 setFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE); 66 _setFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE);
66 } 67 }
67 void setChangesStaticProperty() { setFlag(FLAG_CHANGES_STATIC_PROPERTY); } 68 void clearDependsOnStaticPropertyStore() {
68 bool changesStaticProperty() => getFlag(FLAG_CHANGES_STATIC_PROPERTY); 69 _clearFlag(FLAG_DEPENDS_ON_STATIC_PROPERTY_STORE);
70 }
71 void setChangesStaticProperty() { _setFlag(FLAG_CHANGES_STATIC_PROPERTY); }
72 void clearChangesStaticProperty() {
73 _clearFlag(FLAG_CHANGES_STATIC_PROPERTY);
74 }
75 bool changesStaticProperty() => _getFlag(FLAG_CHANGES_STATIC_PROPERTY);
69 76
70 bool dependsOnIndexStore() => getFlag(FLAG_DEPENDS_ON_INDEX_STORE); 77 bool dependsOnIndexStore() => _getFlag(FLAG_DEPENDS_ON_INDEX_STORE);
71 void setDependsOnIndexStore() { setFlag(FLAG_DEPENDS_ON_INDEX_STORE); } 78 void setDependsOnIndexStore() { _setFlag(FLAG_DEPENDS_ON_INDEX_STORE); }
72 void setChangesIndex() { setFlag(FLAG_CHANGES_INDEX); } 79 void clearDependsOnIndexStore() { _clearFlag(FLAG_DEPENDS_ON_INDEX_STORE); }
73 bool changesIndex() => getFlag(FLAG_CHANGES_INDEX); 80 void setChangesIndex() { _setFlag(FLAG_CHANGES_INDEX); }
81 void clearChangesIndex() { _clearFlag(FLAG_CHANGES_INDEX); }
82 bool changesIndex() => _getFlag(FLAG_CHANGES_INDEX);
74 83
75 bool dependsOnInstancePropertyStore() { 84 bool dependsOnInstancePropertyStore() {
76 return getFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE); 85 return _getFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE);
77 } 86 }
78 void setDependsOnInstancePropertyStore() { 87 void setDependsOnInstancePropertyStore() {
79 setFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE); 88 _setFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE);
80 } 89 }
81 void setChangesInstanceProperty() { setFlag(FLAG_CHANGES_INSTANCE_PROPERTY); } 90 void clearDependsOnInstancePropertyStore() {
82 bool changesInstanceProperty() => getFlag(FLAG_CHANGES_INSTANCE_PROPERTY); 91 _setFlag(FLAG_DEPENDS_ON_INSTANCE_PROPERTY_STORE);
92 }
93 void setChangesInstanceProperty() {
94 _setFlag(FLAG_CHANGES_INSTANCE_PROPERTY);
95 }
96 void clearChangesInstanceProperty() {
97 _clearFlag(FLAG_CHANGES_INSTANCE_PROPERTY);
98 }
99 bool changesInstanceProperty() => _getFlag(FLAG_CHANGES_INSTANCE_PROPERTY);
83 100
84 static int computeDependsOnFlags(int flags) => flags << FLAG_CHANGES_COUNT; 101 static int computeDependsOnFlags(int flags) => flags << FLAG_CHANGES_COUNT;
85 102
86 bool dependsOn(int dependsFlags) => (flags & dependsFlags) != 0; 103 bool dependsOn(int dependsFlags) => (_flags & dependsFlags) != 0;
87 104
88 void add(SideEffects other) { 105 void add(SideEffects other) {
89 flags |= other.flags; 106 _flags |= other._flags;
107 }
108
109 void setTo(SideEffects other) {
110 _flags = other._flags;
90 } 111 }
91 112
92 String toString() { 113 String toString() {
93 StringBuffer buffer = new StringBuffer(); 114 StringBuffer buffer = new StringBuffer();
94 buffer.write('Depends on'); 115 buffer.write('Depends on');
95 if (dependsOnIndexStore()) buffer.write(' []'); 116 if (dependsOnIndexStore()) buffer.write(' []');
96 if (dependsOnInstancePropertyStore()) buffer.write(' field store'); 117 if (dependsOnInstancePropertyStore()) buffer.write(' field store');
97 if (dependsOnStaticPropertyStore()) buffer.write(' static store'); 118 if (dependsOnStaticPropertyStore()) buffer.write(' static store');
98 if (!dependsOnSomething()) buffer.write(' nothing'); 119 if (!dependsOnSomething()) buffer.write(' nothing');
99 buffer.write(', Changes'); 120 buffer.write(', Changes');
100 if (changesIndex()) buffer.write(' []'); 121 if (changesIndex()) buffer.write(' []');
101 if (changesInstanceProperty()) buffer.write(' field'); 122 if (changesInstanceProperty()) buffer.write(' field');
102 if (changesStaticProperty()) buffer.write(' static'); 123 if (changesStaticProperty()) buffer.write(' static');
103 if (!hasSideEffects()) buffer.write(' nothing'); 124 if (!hasSideEffects()) buffer.write(' nothing');
104 buffer.write('.'); 125 buffer.write('.');
105 return buffer.toString(); 126 return buffer.toString();
106 } 127 }
107 } 128 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/native/behavior.dart ('k') | sdk/lib/_internal/compiler/js_lib/foreign_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698