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

Side by Side Diff: test/codegen/expect/DeltaBlue.js

Issue 1355893003: Rewire DDC to use the analyzer task model (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 3 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
OLDNEW
1 dart_library.library('DeltaBlue', null, /* Imports */[ 1 dart_library.library('DeltaBlue', null, /* Imports */[
2 "dart_runtime/dart", 2 "dart_runtime/dart",
3 'BenchmarkBase', 3 'BenchmarkBase',
4 'dart/core' 4 'dart/core'
5 ], /* Lazy imports */[ 5 ], /* Lazy imports */[
6 ], function(exports, dart, BenchmarkBase, core) { 6 ], function(exports, dart, BenchmarkBase, core) {
7 'use strict'; 7 'use strict';
8 let dartx = dart.dartx; 8 let dartx = dart.dartx;
9 function main() { 9 function main() {
10 new DeltaBlue().report(); 10 dart.dcall(new DeltaBlue().report);
11 } 11 }
12 dart.fn(main); 12 dart.fn(main);
13 class DeltaBlue extends BenchmarkBase.BenchmarkBase { 13 class DeltaBlue extends BenchmarkBase.BenchmarkBase {
14 DeltaBlue() { 14 DeltaBlue() {
15 super.BenchmarkBase("DeltaBlue"); 15 super.BenchmarkBase("DeltaBlue");
16 } 16 }
17 run() { 17 run() {
18 chainTest(100); 18 dart.dcall(chainTest, 100);
19 projectionTest(100); 19 dart.dcall(projectionTest, 100);
20 } 20 }
21 } 21 }
22 dart.setSignature(DeltaBlue, { 22 dart.setSignature(DeltaBlue, {
23 constructors: () => ({DeltaBlue: [DeltaBlue, []]}) 23 constructors: () => ({DeltaBlue: [DeltaBlue, []]})
24 }); 24 });
25 class Strength extends core.Object { 25 class Strength extends core.Object {
26 Strength(value, name) { 26 Strength(value, name) {
27 this.value = value; 27 this.value = value;
28 this.name = name; 28 this.name = name;
29 } 29 }
30 nextWeaker() { 30 nextWeaker() {
31 return dart.const(dart.list([STRONG_PREFERRED, PREFERRED, STRONG_DEFAULT, NORMAL, WEAK_DEFAULT, WEAKEST], Strength))[dartx.get](this.value); 31 return dart.const(dart.list([dart.as(STRONG_PREFERRED, Strength), dart.as( PREFERRED, Strength), dart.as(STRONG_DEFAULT, Strength), dart.as(NORMAL, Strengt h), dart.as(WEAK_DEFAULT, Strength), dart.as(WEAKEST, Strength)], Strength))[dar tx.get](this.value);
32 } 32 }
33 static stronger(s1, s2) { 33 static stronger(s1, s2) {
34 return dart.notNull(s1.value) < dart.notNull(s2.value); 34 return dart.notNull(s1.value) < dart.notNull(s2.value);
35 } 35 }
36 static weaker(s1, s2) { 36 static weaker(s1, s2) {
37 return dart.notNull(s1.value) > dart.notNull(s2.value); 37 return dart.notNull(s1.value) > dart.notNull(s2.value);
38 } 38 }
39 static weakest(s1, s2) { 39 static weakest(s1, s2) {
40 return dart.notNull(Strength.weaker(s1, s2)) ? s1 : s2; 40 return dart.notNull(dart.dcall(Strength.weaker, s1, s2)) ? s1 : s2;
41 } 41 }
42 static strongest(s1, s2) { 42 static strongest(s1, s2) {
43 return dart.notNull(Strength.stronger(s1, s2)) ? s1 : s2; 43 return dart.notNull(dart.dcall(Strength.stronger, s1, s2)) ? s1 : s2;
44 } 44 }
45 } 45 }
46 dart.setSignature(Strength, { 46 dart.setSignature(Strength, {
47 constructors: () => ({Strength: [Strength, [core.int, core.String]]}), 47 constructors: () => ({Strength: [Strength, [core.int, core.String]]}),
48 methods: () => ({nextWeaker: [Strength, []]}), 48 methods: () => ({nextWeaker: [Strength, []]}),
49 statics: () => ({ 49 statics: () => ({
50 stronger: [core.bool, [Strength, Strength]], 50 stronger: [core.bool, [Strength, Strength]],
51 weaker: [core.bool, [Strength, Strength]], 51 weaker: [core.bool, [Strength, Strength]],
52 weakest: [Strength, [Strength, Strength]], 52 weakest: [Strength, [Strength, Strength]],
53 strongest: [Strength, [Strength, Strength]] 53 strongest: [Strength, [Strength, Strength]]
54 }), 54 }),
55 names: ['stronger', 'weaker', 'weakest', 'strongest'] 55 names: ['stronger', 'weaker', 'weakest', 'strongest']
56 }); 56 });
57 let REQUIRED = dart.const(new Strength(0, "required")); 57 let REQUIRED = dart.const(new Strength(0, "required"));
58 let STRONG_PREFERRED = dart.const(new Strength(1, "strongPreferred")); 58 let STRONG_PREFERRED = dart.const(new Strength(1, "strongPreferred"));
59 let PREFERRED = dart.const(new Strength(2, "preferred")); 59 let PREFERRED = dart.const(new Strength(2, "preferred"));
60 let STRONG_DEFAULT = dart.const(new Strength(3, "strongDefault")); 60 let STRONG_DEFAULT = dart.const(new Strength(3, "strongDefault"));
61 let NORMAL = dart.const(new Strength(4, "normal")); 61 let NORMAL = dart.const(new Strength(4, "normal"));
62 let WEAK_DEFAULT = dart.const(new Strength(5, "weakDefault")); 62 let WEAK_DEFAULT = dart.const(new Strength(5, "weakDefault"));
63 let WEAKEST = dart.const(new Strength(6, "weakest")); 63 let WEAKEST = dart.const(new Strength(6, "weakest"));
64 class Constraint extends core.Object { 64 class Constraint extends core.Object {
65 Constraint(strength) { 65 Constraint(strength) {
66 this.strength = strength; 66 this.strength = strength;
67 } 67 }
68 addConstraint() { 68 addConstraint() {
69 this.addToGraph(); 69 dart.dcall(this.addToGraph);
70 exports.planner.incrementalAdd(this); 70 dart.dcall(exports.planner.incrementalAdd, this);
71 } 71 }
72 satisfy(mark) { 72 satisfy(mark) {
73 this.chooseMethod(dart.as(mark, core.int)); 73 dart.dcall(this.chooseMethod, mark);
74 if (!dart.notNull(this.isSatisfied())) { 74 if (!dart.notNull(dart.dcall(this.isSatisfied))) {
75 if (dart.equals(this.strength, REQUIRED)) { 75 if (dart.equals(this.strength, REQUIRED)) {
76 core.print("Could not satisfy a required constraint!"); 76 dart.dcall(core.print, "Could not satisfy a required constraint!");
77 } 77 }
78 return null; 78 return null;
79 } 79 }
80 this.markInputs(dart.as(mark, core.int)); 80 dart.dcall(this.markInputs, mark);
81 let out = this.output(); 81 let out = dart.dcall(this.output);
82 let overridden = out.determinedBy; 82 let overridden = out.determinedBy;
83 if (overridden != null) 83 if (overridden != null)
84 overridden.markUnsatisfied(); 84 dart.dcall(overridden.markUnsatisfied);
85 out.determinedBy = this; 85 out.determinedBy = this;
86 if (!dart.notNull(exports.planner.addPropagate(this, dart.as(mark, core.in t)))) 86 if (!dart.notNull(dart.dcall(exports.planner.addPropagate, this, mark)))
87 core.print("Cycle encountered"); 87 dart.dcall(core.print, "Cycle encountered");
88 out.mark = dart.as(mark, core.int); 88 out.mark = dart.as(mark, core.int);
89 return overridden; 89 return overridden;
90 } 90 }
91 destroyConstraint() { 91 destroyConstraint() {
92 if (dart.notNull(this.isSatisfied())) 92 if (dart.notNull(dart.dcall(this.isSatisfied)))
93 exports.planner.incrementalRemove(this); 93 dart.dcall(exports.planner.incrementalRemove, this);
94 this.removeFromGraph(); 94 dart.dcall(this.removeFromGraph);
95 } 95 }
96 isInput() { 96 isInput() {
97 return false; 97 return false;
98 } 98 }
99 } 99 }
100 dart.setSignature(Constraint, { 100 dart.setSignature(Constraint, {
101 constructors: () => ({Constraint: [Constraint, [Strength]]}), 101 constructors: () => ({Constraint: [Constraint, [Strength]]}),
102 methods: () => ({ 102 methods: () => ({
103 addConstraint: [dart.void, []], 103 addConstraint: [dart.void, []],
104 satisfy: [Constraint, [dart.dynamic]], 104 satisfy: [Constraint, [dart.dynamic]],
105 destroyConstraint: [dart.void, []], 105 destroyConstraint: [dart.void, []],
106 isInput: [core.bool, []] 106 isInput: [core.bool, []]
107 }) 107 })
108 }); 108 });
109 class UnaryConstraint extends Constraint { 109 class UnaryConstraint extends Constraint {
110 UnaryConstraint(myOutput, strength) { 110 UnaryConstraint(myOutput, strength) {
111 this.myOutput = myOutput; 111 this.myOutput = myOutput;
112 this.satisfied = false; 112 this.satisfied = false;
113 super.Constraint(strength); 113 super.Constraint(strength);
114 this.addConstraint(); 114 dart.dcall(this.addConstraint);
115 } 115 }
116 addToGraph() { 116 addToGraph() {
117 this.myOutput.addConstraint(this); 117 dart.dcall(this.myOutput.addConstraint, this);
118 this.satisfied = false; 118 this.satisfied = false;
119 } 119 }
120 chooseMethod(mark) { 120 chooseMethod(mark) {
121 this.satisfied = this.myOutput.mark != mark && dart.notNull(Strength.stron ger(this.strength, this.myOutput.walkStrength)); 121 this.satisfied = this.myOutput.mark != mark && dart.notNull(dart.dcall(Str ength.stronger, this.strength, this.myOutput.walkStrength));
122 } 122 }
123 isSatisfied() { 123 isSatisfied() {
124 return this.satisfied; 124 return this.satisfied;
125 } 125 }
126 markInputs(mark) {} 126 markInputs(mark) {}
127 output() { 127 output() {
128 return this.myOutput; 128 return this.myOutput;
129 } 129 }
130 recalculate() { 130 recalculate() {
131 this.myOutput.walkStrength = this.strength; 131 this.myOutput.walkStrength = this.strength;
132 this.myOutput.stay = !dart.notNull(this.isInput()); 132 this.myOutput.stay = !dart.notNull(dart.dcall(this.isInput));
133 if (dart.notNull(this.myOutput.stay)) 133 if (dart.notNull(this.myOutput.stay))
134 this.execute(); 134 dart.dcall(this.execute);
135 } 135 }
136 markUnsatisfied() { 136 markUnsatisfied() {
137 this.satisfied = false; 137 this.satisfied = false;
138 } 138 }
139 inputsKnown(mark) { 139 inputsKnown(mark) {
140 return true; 140 return true;
141 } 141 }
142 removeFromGraph() { 142 removeFromGraph() {
143 if (this.myOutput != null) 143 if (this.myOutput != null)
144 this.myOutput.removeConstraint(this); 144 dart.dcall(this.myOutput.removeConstraint, this);
145 this.satisfied = false; 145 this.satisfied = false;
146 } 146 }
147 } 147 }
148 dart.setSignature(UnaryConstraint, { 148 dart.setSignature(UnaryConstraint, {
149 constructors: () => ({UnaryConstraint: [UnaryConstraint, [Variable, Strength ]]}), 149 constructors: () => ({UnaryConstraint: [UnaryConstraint, [Variable, Strength ]]}),
150 methods: () => ({ 150 methods: () => ({
151 addToGraph: [dart.void, []], 151 addToGraph: [dart.void, []],
152 chooseMethod: [dart.void, [core.int]], 152 chooseMethod: [dart.void, [core.int]],
153 isSatisfied: [core.bool, []], 153 isSatisfied: [core.bool, []],
154 markInputs: [dart.void, [core.int]], 154 markInputs: [dart.void, [core.int]],
(...skipping 29 matching lines...) Expand all
184 }); 184 });
185 let NONE = 1; 185 let NONE = 1;
186 let FORWARD = 2; 186 let FORWARD = 2;
187 let BACKWARD = 0; 187 let BACKWARD = 0;
188 class BinaryConstraint extends Constraint { 188 class BinaryConstraint extends Constraint {
189 BinaryConstraint(v1, v2, strength) { 189 BinaryConstraint(v1, v2, strength) {
190 this.v1 = v1; 190 this.v1 = v1;
191 this.v2 = v2; 191 this.v2 = v2;
192 this.direction = NONE; 192 this.direction = NONE;
193 super.Constraint(strength); 193 super.Constraint(strength);
194 this.addConstraint(); 194 dart.dcall(this.addConstraint);
195 } 195 }
196 chooseMethod(mark) { 196 chooseMethod(mark) {
197 if (this.v1.mark == mark) { 197 if (this.v1.mark == mark) {
198 this.direction = this.v2.mark != mark && dart.notNull(Strength.stronger( this.strength, this.v2.walkStrength)) ? FORWARD : NONE; 198 this.direction = this.v2.mark != mark && dart.notNull(dart.dcall(Strengt h.stronger, this.strength, this.v2.walkStrength)) ? FORWARD : NONE;
199 } 199 }
200 if (this.v2.mark == mark) { 200 if (this.v2.mark == mark) {
201 this.direction = this.v1.mark != mark && dart.notNull(Strength.stronger( this.strength, this.v1.walkStrength)) ? BACKWARD : NONE; 201 this.direction = this.v1.mark != mark && dart.notNull(dart.dcall(Strengt h.stronger, this.strength, this.v1.walkStrength)) ? BACKWARD : NONE;
202 } 202 }
203 if (dart.notNull(Strength.weaker(this.v1.walkStrength, this.v2.walkStrengt h))) { 203 if (dart.notNull(dart.dcall(Strength.weaker, this.v1.walkStrength, this.v2 .walkStrength))) {
204 this.direction = dart.notNull(Strength.stronger(this.strength, this.v1.w alkStrength)) ? BACKWARD : NONE; 204 this.direction = dart.notNull(dart.dcall(Strength.stronger, this.strengt h, this.v1.walkStrength)) ? BACKWARD : NONE;
205 } else { 205 } else {
206 this.direction = dart.notNull(Strength.stronger(this.strength, this.v2.w alkStrength)) ? FORWARD : BACKWARD; 206 this.direction = dart.notNull(dart.dcall(Strength.stronger, this.strengt h, this.v2.walkStrength)) ? FORWARD : BACKWARD;
207 } 207 }
208 } 208 }
209 addToGraph() { 209 addToGraph() {
210 this.v1.addConstraint(this); 210 dart.dcall(this.v1.addConstraint, this);
211 this.v2.addConstraint(this); 211 dart.dcall(this.v2.addConstraint, this);
212 this.direction = NONE; 212 this.direction = NONE;
213 } 213 }
214 isSatisfied() { 214 isSatisfied() {
215 return this.direction != NONE; 215 return this.direction != NONE;
216 } 216 }
217 markInputs(mark) { 217 markInputs(mark) {
218 this.input().mark = mark; 218 dart.dcall(this.input).mark = mark;
219 } 219 }
220 input() { 220 input() {
221 return this.direction == FORWARD ? this.v1 : this.v2; 221 return this.direction == FORWARD ? this.v1 : this.v2;
222 } 222 }
223 output() { 223 output() {
224 return this.direction == FORWARD ? this.v2 : this.v1; 224 return this.direction == FORWARD ? this.v2 : this.v1;
225 } 225 }
226 recalculate() { 226 recalculate() {
227 let ihn = this.input(), out = this.output(); 227 let ihn = dart.dcall(this.input), out = dart.dcall(this.output);
228 out.walkStrength = Strength.weakest(this.strength, ihn.walkStrength); 228 out.walkStrength = dart.dcall(Strength.weakest, this.strength, ihn.walkStr ength);
229 out.stay = ihn.stay; 229 out.stay = ihn.stay;
230 if (dart.notNull(out.stay)) 230 if (dart.notNull(out.stay))
231 this.execute(); 231 dart.dcall(this.execute);
232 } 232 }
233 markUnsatisfied() { 233 markUnsatisfied() {
234 this.direction = NONE; 234 this.direction = NONE;
235 } 235 }
236 inputsKnown(mark) { 236 inputsKnown(mark) {
237 let i = this.input(); 237 let i = dart.dcall(this.input);
238 return i.mark == mark || dart.notNull(i.stay) || i.determinedBy == null; 238 return i.mark == mark || dart.notNull(i.stay) || i.determinedBy == null;
239 } 239 }
240 removeFromGraph() { 240 removeFromGraph() {
241 if (this.v1 != null) 241 if (this.v1 != null)
242 this.v1.removeConstraint(this); 242 dart.dcall(this.v1.removeConstraint, this);
243 if (this.v2 != null) 243 if (this.v2 != null)
244 this.v2.removeConstraint(this); 244 dart.dcall(this.v2.removeConstraint, this);
245 this.direction = NONE; 245 this.direction = NONE;
246 } 246 }
247 } 247 }
248 dart.setSignature(BinaryConstraint, { 248 dart.setSignature(BinaryConstraint, {
249 constructors: () => ({BinaryConstraint: [BinaryConstraint, [Variable, Variab le, Strength]]}), 249 constructors: () => ({BinaryConstraint: [BinaryConstraint, [Variable, Variab le, Strength]]}),
250 methods: () => ({ 250 methods: () => ({
251 chooseMethod: [dart.void, [core.int]], 251 chooseMethod: [dart.void, [core.int]],
252 addToGraph: [dart.void, []], 252 addToGraph: [dart.void, []],
253 isSatisfied: [core.bool, []], 253 isSatisfied: [core.bool, []],
254 markInputs: [dart.void, [core.int]], 254 markInputs: [dart.void, [core.int]],
255 input: [Variable, []], 255 input: [Variable, []],
256 output: [Variable, []], 256 output: [Variable, []],
257 recalculate: [dart.void, []], 257 recalculate: [dart.void, []],
258 markUnsatisfied: [dart.void, []], 258 markUnsatisfied: [dart.void, []],
259 inputsKnown: [core.bool, [core.int]], 259 inputsKnown: [core.bool, [core.int]],
260 removeFromGraph: [dart.void, []] 260 removeFromGraph: [dart.void, []]
261 }) 261 })
262 }); 262 });
263 class ScaleConstraint extends BinaryConstraint { 263 class ScaleConstraint extends BinaryConstraint {
264 ScaleConstraint(src, scale, offset, dest, strength) { 264 ScaleConstraint(src, scale, offset, dest, strength) {
265 this.scale = scale; 265 this.scale = scale;
266 this.offset = offset; 266 this.offset = offset;
267 super.BinaryConstraint(src, dest, strength); 267 super.BinaryConstraint(src, dest, strength);
268 } 268 }
269 addToGraph() { 269 addToGraph() {
270 super.addToGraph(); 270 dart.dcall(super.addToGraph);
271 this.scale.addConstraint(this); 271 dart.dcall(this.scale.addConstraint, this);
272 this.offset.addConstraint(this); 272 dart.dcall(this.offset.addConstraint, this);
273 } 273 }
274 removeFromGraph() { 274 removeFromGraph() {
275 super.removeFromGraph(); 275 dart.dcall(super.removeFromGraph);
276 if (this.scale != null) 276 if (this.scale != null)
277 this.scale.removeConstraint(this); 277 dart.dcall(this.scale.removeConstraint, this);
278 if (this.offset != null) 278 if (this.offset != null)
279 this.offset.removeConstraint(this); 279 dart.dcall(this.offset.removeConstraint, this);
280 } 280 }
281 markInputs(mark) { 281 markInputs(mark) {
282 super.markInputs(mark); 282 dart.dcall(super.markInputs, mark);
283 this.scale.mark = this.offset.mark = mark; 283 this.scale.mark = this.offset.mark = mark;
284 } 284 }
285 execute() { 285 execute() {
286 if (this.direction == FORWARD) { 286 if (this.direction == FORWARD) {
287 this.v2.value = dart.notNull(this.v1.value) * dart.notNull(this.scale.va lue) + dart.notNull(this.offset.value); 287 this.v2.value = dart.notNull(this.v1.value) * dart.notNull(this.scale.va lue) + dart.notNull(this.offset.value);
288 } else { 288 } else {
289 this.v1.value = ((dart.notNull(this.v2.value) - dart.notNull(this.offset .value)) / dart.notNull(this.scale.value))[dartx.truncate](); 289 this.v1.value = ((dart.notNull(this.v2.value) - dart.notNull(this.offset .value)) / dart.notNull(this.scale.value))[dartx.truncate]();
290 } 290 }
291 } 291 }
292 recalculate() { 292 recalculate() {
293 let ihn = this.input(), out = this.output(); 293 let ihn = dart.dcall(this.input), out = dart.dcall(this.output);
294 out.walkStrength = Strength.weakest(this.strength, ihn.walkStrength); 294 out.walkStrength = dart.dcall(Strength.weakest, this.strength, ihn.walkStr ength);
295 out.stay = dart.notNull(ihn.stay) && dart.notNull(this.scale.stay) && dart .notNull(this.offset.stay); 295 out.stay = dart.notNull(ihn.stay) && dart.notNull(this.scale.stay) && dart .notNull(this.offset.stay);
296 if (dart.notNull(out.stay)) 296 if (dart.notNull(out.stay))
297 this.execute(); 297 dart.dcall(this.execute);
298 } 298 }
299 } 299 }
300 dart.setSignature(ScaleConstraint, { 300 dart.setSignature(ScaleConstraint, {
301 constructors: () => ({ScaleConstraint: [ScaleConstraint, [Variable, Variable , Variable, Variable, Strength]]}), 301 constructors: () => ({ScaleConstraint: [ScaleConstraint, [Variable, Variable , Variable, Variable, Strength]]}),
302 methods: () => ({execute: [dart.void, []]}) 302 methods: () => ({execute: [dart.void, []]})
303 }); 303 });
304 class EqualityConstraint extends BinaryConstraint { 304 class EqualityConstraint extends BinaryConstraint {
305 EqualityConstraint(v1, v2, strength) { 305 EqualityConstraint(v1, v2, strength) {
306 super.BinaryConstraint(v1, v2, strength); 306 super.BinaryConstraint(v1, v2, strength);
307 } 307 }
308 execute() { 308 execute() {
309 this.output().value = this.input().value; 309 dart.dcall(this.output).value = dart.dcall(this.input).value;
310 } 310 }
311 } 311 }
312 dart.setSignature(EqualityConstraint, { 312 dart.setSignature(EqualityConstraint, {
313 constructors: () => ({EqualityConstraint: [EqualityConstraint, [Variable, Va riable, Strength]]}), 313 constructors: () => ({EqualityConstraint: [EqualityConstraint, [Variable, Va riable, Strength]]}),
314 methods: () => ({execute: [dart.void, []]}) 314 methods: () => ({execute: [dart.void, []]})
315 }); 315 });
316 class Variable extends core.Object { 316 class Variable extends core.Object {
317 Variable(name, value) { 317 Variable(name, value) {
318 this.constraints = dart.list([], Constraint); 318 this.constraints = dart.list([], Constraint);
319 this.walkStrength = dart.as(WEAKEST, Strength);
319 this.name = name; 320 this.name = name;
320 this.value = value; 321 this.value = value;
321 this.determinedBy = null; 322 this.determinedBy = null;
322 this.mark = 0; 323 this.mark = 0;
323 this.walkStrength = WEAKEST;
324 this.stay = true; 324 this.stay = true;
325 } 325 }
326 addConstraint(c) { 326 addConstraint(c) {
327 this.constraints[dartx.add](c); 327 dart.dcall(this.constraints[dartx.add], c);
328 } 328 }
329 removeConstraint(c) { 329 removeConstraint(c) {
330 this.constraints[dartx.remove](c); 330 dart.dcall(this.constraints[dartx.remove], c);
331 if (dart.equals(this.determinedBy, c)) 331 if (dart.equals(this.determinedBy, c))
332 this.determinedBy = null; 332 this.determinedBy = null;
333 } 333 }
334 } 334 }
335 dart.setSignature(Variable, { 335 dart.setSignature(Variable, {
336 constructors: () => ({Variable: [Variable, [core.String, core.int]]}), 336 constructors: () => ({Variable: [Variable, [core.String, core.int]]}),
337 methods: () => ({ 337 methods: () => ({
338 addConstraint: [dart.void, [Constraint]], 338 addConstraint: [dart.void, [Constraint]],
339 removeConstraint: [dart.void, [Constraint]] 339 removeConstraint: [dart.void, [Constraint]]
340 }) 340 })
341 }); 341 });
342 class Planner extends core.Object { 342 class Planner extends core.Object {
343 Planner() { 343 Planner() {
344 this.currentMark = 0; 344 this.currentMark = 0;
345 } 345 }
346 incrementalAdd(c) { 346 incrementalAdd(c) {
347 let mark = this.newMark(); 347 let mark = dart.dcall(this.newMark);
348 for (let overridden = c.satisfy(mark); overridden != null; overridden = ov erridden.satisfy(mark)) 348 for (let overridden = dart.dcall(c.satisfy, mark); overridden != null; ove rridden = dart.dcall(overridden.satisfy, mark))
349 ; 349 ;
350 } 350 }
351 incrementalRemove(c) { 351 incrementalRemove(c) {
352 let out = c.output(); 352 let out = dart.dcall(c.output);
353 c.markUnsatisfied(); 353 dart.dcall(c.markUnsatisfied);
354 c.removeFromGraph(); 354 dart.dcall(c.removeFromGraph);
355 let unsatisfied = this.removePropagateFrom(out); 355 let unsatisfied = dart.dcall(this.removePropagateFrom, out);
356 let strength = REQUIRED; 356 let strength = dart.as(REQUIRED, Strength);
357 do { 357 do {
358 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied[dartx.length] ); i = dart.notNull(i) + 1) { 358 for (let i = 0; dart.notNull(i) < dart.notNull(unsatisfied[dartx.length] ); i = dart.notNull(i) + 1) {
359 let u = unsatisfied[dartx.get](i); 359 let u = unsatisfied[dartx.get](i);
360 if (dart.equals(u.strength, strength)) 360 if (dart.equals(u.strength, strength))
361 this.incrementalAdd(u); 361 dart.dcall(this.incrementalAdd, u);
362 } 362 }
363 strength = strength.nextWeaker(); 363 strength = dart.dcall(strength.nextWeaker);
364 } while (!dart.equals(strength, WEAKEST)); 364 } while (!dart.equals(strength, WEAKEST));
365 } 365 }
366 newMark() { 366 newMark() {
367 return this.currentMark = dart.notNull(this.currentMark) + 1; 367 return this.currentMark = dart.notNull(this.currentMark) + 1;
368 } 368 }
369 makePlan(sources) { 369 makePlan(sources) {
370 let mark = this.newMark(); 370 let mark = dart.dcall(this.newMark);
371 let plan = new Plan(); 371 let plan = new Plan();
372 let todo = sources; 372 let todo = sources;
373 while (dart.notNull(todo[dartx.length]) > 0) { 373 while (dart.notNull(todo[dartx.length]) > 0) {
374 let c = todo[dartx.removeLast](); 374 let c = dart.dcall(todo[dartx.removeLast]);
375 if (c.output().mark != mark && dart.notNull(c.inputsKnown(mark))) { 375 if (dart.dcall(c.output).mark != mark && dart.notNull(dart.dcall(c.input sKnown, mark))) {
376 plan.addConstraint(c); 376 dart.dcall(plan.addConstraint, c);
377 c.output().mark = mark; 377 dart.dcall(c.output).mark = mark;
378 this.addConstraintsConsumingTo(c.output(), todo); 378 dart.dcall(this.addConstraintsConsumingTo, dart.dcall(c.output), todo) ;
379 } 379 }
380 } 380 }
381 return plan; 381 return plan;
382 } 382 }
383 extractPlanFromConstraints(constraints) { 383 extractPlanFromConstraints(constraints) {
384 let sources = dart.list([], Constraint); 384 let sources = dart.list([], Constraint);
385 for (let i = 0; dart.notNull(i) < dart.notNull(constraints[dartx.length]); i = dart.notNull(i) + 1) { 385 for (let i = 0; dart.notNull(i) < dart.notNull(constraints[dartx.length]); i = dart.notNull(i) + 1) {
386 let c = constraints[dartx.get](i); 386 let c = constraints[dartx.get](i);
387 if (dart.notNull(c.isInput()) && dart.notNull(c.isSatisfied())) 387 if (dart.notNull(dart.dcall(c.isInput)) && dart.notNull(dart.dcall(c.isS atisfied)))
388 sources[dartx.add](c); 388 dart.dcall(sources[dartx.add], c);
389 } 389 }
390 return this.makePlan(sources); 390 return dart.dcall(this.makePlan, sources);
391 } 391 }
392 addPropagate(c, mark) { 392 addPropagate(c, mark) {
393 let todo = dart.list([c], Constraint); 393 let todo = dart.list([c], Constraint);
394 while (dart.notNull(todo[dartx.length]) > 0) { 394 while (dart.notNull(todo[dartx.length]) > 0) {
395 let d = todo[dartx.removeLast](); 395 let d = dart.dcall(todo[dartx.removeLast]);
396 if (d.output().mark == mark) { 396 if (dart.dcall(d.output).mark == mark) {
397 this.incrementalRemove(c); 397 dart.dcall(this.incrementalRemove, c);
398 return false; 398 return false;
399 } 399 }
400 d.recalculate(); 400 dart.dcall(d.recalculate);
401 this.addConstraintsConsumingTo(d.output(), todo); 401 dart.dcall(this.addConstraintsConsumingTo, dart.dcall(d.output), todo);
402 } 402 }
403 return true; 403 return true;
404 } 404 }
405 removePropagateFrom(out) { 405 removePropagateFrom(out) {
406 out.determinedBy = null; 406 out.determinedBy = null;
407 out.walkStrength = WEAKEST; 407 out.walkStrength = dart.as(WEAKEST, Strength);
408 out.stay = true; 408 out.stay = true;
409 let unsatisfied = dart.list([], Constraint); 409 let unsatisfied = dart.list([], Constraint);
410 let todo = dart.list([out], Variable); 410 let todo = dart.list([out], Variable);
411 while (dart.notNull(todo[dartx.length]) > 0) { 411 while (dart.notNull(todo[dartx.length]) > 0) {
412 let v = todo[dartx.removeLast](); 412 let v = dart.dcall(todo[dartx.removeLast]);
413 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt h]); i = dart.notNull(i) + 1) { 413 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt h]); i = dart.notNull(i) + 1) {
414 let c = v.constraints[dartx.get](i); 414 let c = v.constraints[dartx.get](i);
415 if (!dart.notNull(c.isSatisfied())) 415 if (!dart.notNull(dart.dcall(c.isSatisfied)))
416 unsatisfied[dartx.add](c); 416 dart.dcall(unsatisfied[dartx.add], c);
417 } 417 }
418 let determining = v.determinedBy; 418 let determining = v.determinedBy;
419 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt h]); i = dart.notNull(i) + 1) { 419 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.lengt h]); i = dart.notNull(i) + 1) {
420 let next = v.constraints[dartx.get](i); 420 let next = v.constraints[dartx.get](i);
421 if (!dart.equals(next, determining) && dart.notNull(next.isSatisfied() )) { 421 if (!dart.equals(next, determining) && dart.notNull(dart.dcall(next.is Satisfied))) {
422 next.recalculate(); 422 dart.dcall(next.recalculate);
423 todo[dartx.add](next.output()); 423 dart.dcall(todo[dartx.add], dart.dcall(next.output));
424 } 424 }
425 } 425 }
426 } 426 }
427 return unsatisfied; 427 return unsatisfied;
428 } 428 }
429 addConstraintsConsumingTo(v, coll) { 429 addConstraintsConsumingTo(v, coll) {
430 let determining = v.determinedBy; 430 let determining = v.determinedBy;
431 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.length] ); i = dart.notNull(i) + 1) { 431 for (let i = 0; dart.notNull(i) < dart.notNull(v.constraints[dartx.length] ); i = dart.notNull(i) + 1) {
432 let c = v.constraints[dartx.get](i); 432 let c = v.constraints[dartx.get](i);
433 if (!dart.equals(c, determining) && dart.notNull(c.isSatisfied())) 433 if (!dart.equals(c, determining) && dart.notNull(dart.dcall(c.isSatisfie d)))
434 coll[dartx.add](c); 434 dart.dcall(coll[dartx.add], c);
435 } 435 }
436 } 436 }
437 } 437 }
438 dart.setSignature(Planner, { 438 dart.setSignature(Planner, {
439 methods: () => ({ 439 methods: () => ({
440 incrementalAdd: [dart.void, [Constraint]], 440 incrementalAdd: [dart.void, [Constraint]],
441 incrementalRemove: [dart.void, [Constraint]], 441 incrementalRemove: [dart.void, [Constraint]],
442 newMark: [core.int, []], 442 newMark: [core.int, []],
443 makePlan: [Plan, [core.List$(Constraint)]], 443 makePlan: [Plan, [core.List$(Constraint)]],
444 extractPlanFromConstraints: [Plan, [core.List$(Constraint)]], 444 extractPlanFromConstraints: [Plan, [core.List$(Constraint)]],
445 addPropagate: [core.bool, [Constraint, core.int]], 445 addPropagate: [core.bool, [Constraint, core.int]],
446 removePropagateFrom: [core.List$(Constraint), [Variable]], 446 removePropagateFrom: [core.List$(Constraint), [Variable]],
447 addConstraintsConsumingTo: [dart.void, [Variable, core.List$(Constraint)]] 447 addConstraintsConsumingTo: [dart.void, [Variable, core.List$(Constraint)]]
448 }) 448 })
449 }); 449 });
450 class Plan extends core.Object { 450 class Plan extends core.Object {
451 Plan() { 451 Plan() {
452 this.list = dart.list([], Constraint); 452 this.list = dart.list([], Constraint);
453 } 453 }
454 addConstraint(c) { 454 addConstraint(c) {
455 this.list[dartx.add](c); 455 dart.dcall(this.list[dartx.add], c);
456 } 456 }
457 size() { 457 size() {
458 return this.list[dartx.length]; 458 return this.list[dartx.length];
459 } 459 }
460 execute() { 460 execute() {
461 for (let i = 0; dart.notNull(i) < dart.notNull(this.list[dartx.length]); i = dart.notNull(i) + 1) { 461 for (let i = 0; dart.notNull(i) < dart.notNull(this.list[dartx.length]); i = dart.notNull(i) + 1) {
462 this.list[dartx.get](i).execute(); 462 dart.dcall(this.list[dartx.get](i).execute);
463 } 463 }
464 } 464 }
465 } 465 }
466 dart.setSignature(Plan, { 466 dart.setSignature(Plan, {
467 methods: () => ({ 467 methods: () => ({
468 addConstraint: [dart.void, [Constraint]], 468 addConstraint: [dart.void, [Constraint]],
469 size: [core.int, []], 469 size: [core.int, []],
470 execute: [dart.void, []] 470 execute: [dart.void, []]
471 }) 471 })
472 }); 472 });
473 function chainTest(n) { 473 function chainTest(n) {
474 exports.planner = new Planner(); 474 exports.planner = new Planner();
475 let prev = null, first = null, last = null; 475 let prev = null, first = null, last = null;
476 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1) { 476 for (let i = 0; dart.notNull(i) <= dart.notNull(n); i = dart.notNull(i) + 1) {
477 let v = new Variable("v", 0); 477 let v = new Variable("v", 0);
478 if (prev != null) 478 if (prev != null)
479 new EqualityConstraint(prev, v, REQUIRED); 479 new EqualityConstraint(prev, v, dart.as(REQUIRED, Strength));
480 if (i == 0) 480 if (i == 0)
481 first = v; 481 first = v;
482 if (i == n) 482 if (i == n)
483 last = v; 483 last = v;
484 prev = v; 484 prev = v;
485 } 485 }
486 new StayConstraint(last, STRONG_DEFAULT); 486 new StayConstraint(last, dart.as(STRONG_DEFAULT, Strength));
487 let edit = new EditConstraint(first, PREFERRED); 487 let edit = new EditConstraint(first, dart.as(PREFERRED, Strength));
488 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Cons traint)); 488 let plan = dart.dcall(exports.planner.extractPlanFromConstraints, dart.list( [edit], Constraint));
489 for (let i = 0; dart.notNull(i) < 100; i = dart.notNull(i) + 1) { 489 for (let i = 0; dart.notNull(i) < 100; i = dart.notNull(i) + 1) {
490 first.value = i; 490 first.value = i;
491 plan.execute(); 491 dart.dcall(plan.execute);
492 if (last.value != i) { 492 if (last.value != i) {
493 core.print("Chain test failed:"); 493 dart.dcall(core.print, "Chain test failed:");
494 core.print(`Expected last value to be ${i} but it was ${last.value}.`); 494 dart.dcall(core.print, `Expected last value to be ${i} but it was ${last .value}.`);
495 } 495 }
496 } 496 }
497 } 497 }
498 dart.fn(chainTest, dart.void, [core.int]); 498 dart.fn(chainTest, dart.void, [core.int]);
499 function projectionTest(n) { 499 function projectionTest(n) {
500 exports.planner = new Planner(); 500 exports.planner = new Planner();
501 let scale = new Variable("scale", 10); 501 let scale = new Variable("scale", 10);
502 let offset = new Variable("offset", 1000); 502 let offset = new Variable("offset", 1000);
503 let src = null, dst = null; 503 let src = null, dst = null;
504 let dests = dart.list([], Variable); 504 let dests = dart.list([], Variable);
505 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1) { 505 for (let i = 0; dart.notNull(i) < dart.notNull(n); i = dart.notNull(i) + 1) {
506 src = new Variable("src", i); 506 src = new Variable("src", i);
507 dst = new Variable("dst", i); 507 dst = new Variable("dst", i);
508 dests[dartx.add](dst); 508 dart.dcall(dests[dartx.add], dst);
509 new StayConstraint(src, NORMAL); 509 new StayConstraint(src, dart.as(NORMAL, Strength));
510 new ScaleConstraint(src, scale, offset, dst, REQUIRED); 510 new ScaleConstraint(src, scale, offset, dst, dart.as(REQUIRED, Strength));
511 } 511 }
512 change(src, 17); 512 dart.dcall(change, src, 17);
513 if (dst.value != 1170) 513 if (dst.value != 1170)
514 core.print("Projection 1 failed"); 514 dart.dcall(core.print, "Projection 1 failed");
515 change(dst, 1050); 515 dart.dcall(change, dst, 1050);
516 if (src.value != 5) 516 if (src.value != 5)
517 core.print("Projection 2 failed"); 517 dart.dcall(core.print, "Projection 2 failed");
518 change(scale, 5); 518 dart.dcall(change, scale, 5);
519 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) { 519 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) {
520 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 1000) 520 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 1000)
521 core.print("Projection 3 failed"); 521 dart.dcall(core.print, "Projection 3 failed");
522 } 522 }
523 change(offset, 2000); 523 dart.dcall(change, offset, 2000);
524 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) { 524 for (let i = 0; dart.notNull(i) < dart.notNull(n) - 1; i = dart.notNull(i) + 1) {
525 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 2000) 525 if (dests[dartx.get](i).value != dart.notNull(i) * 5 + 2000)
526 core.print("Projection 4 failed"); 526 dart.dcall(core.print, "Projection 4 failed");
527 } 527 }
528 } 528 }
529 dart.fn(projectionTest, dart.void, [core.int]); 529 dart.fn(projectionTest, dart.void, [core.int]);
530 function change(v, newValue) { 530 function change(v, newValue) {
531 let edit = new EditConstraint(v, PREFERRED); 531 let edit = new EditConstraint(v, dart.as(PREFERRED, Strength));
532 let plan = exports.planner.extractPlanFromConstraints(dart.list([edit], Edit Constraint)); 532 let plan = dart.dcall(exports.planner.extractPlanFromConstraints, dart.list( [edit], EditConstraint));
533 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) { 533 for (let i = 0; dart.notNull(i) < 10; i = dart.notNull(i) + 1) {
534 v.value = newValue; 534 v.value = newValue;
535 plan.execute(); 535 dart.dcall(plan.execute);
536 } 536 }
537 edit.destroyConstraint(); 537 dart.dcall(edit.destroyConstraint);
538 } 538 }
539 dart.fn(change, dart.void, [Variable, core.int]); 539 dart.fn(change, dart.void, [Variable, core.int]);
540 exports.planner = null; 540 exports.planner = null;
541 // Exports: 541 // Exports:
542 exports.main = main; 542 exports.main = main;
543 exports.DeltaBlue = DeltaBlue; 543 exports.DeltaBlue = DeltaBlue;
544 exports.Strength = Strength; 544 exports.Strength = Strength;
545 exports.REQUIRED = REQUIRED; 545 exports.REQUIRED = REQUIRED;
546 exports.STRONG_PREFERRED = STRONG_PREFERRED; 546 exports.STRONG_PREFERRED = STRONG_PREFERRED;
547 exports.PREFERRED = PREFERRED; 547 exports.PREFERRED = PREFERRED;
(...skipping 11 matching lines...) Expand all
559 exports.BinaryConstraint = BinaryConstraint; 559 exports.BinaryConstraint = BinaryConstraint;
560 exports.ScaleConstraint = ScaleConstraint; 560 exports.ScaleConstraint = ScaleConstraint;
561 exports.EqualityConstraint = EqualityConstraint; 561 exports.EqualityConstraint = EqualityConstraint;
562 exports.Variable = Variable; 562 exports.Variable = Variable;
563 exports.Planner = Planner; 563 exports.Planner = Planner;
564 exports.Plan = Plan; 564 exports.Plan = Plan;
565 exports.chainTest = chainTest; 565 exports.chainTest = chainTest;
566 exports.projectionTest = projectionTest; 566 exports.projectionTest = projectionTest;
567 exports.change = change; 567 exports.change = change;
568 }); 568 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698