Files
sdk/pkg/dev_compiler/test/codegen/expect/opassign.js
T
John Messerly 93251ee241 upgrade to latest analyzer
fixes https://github.com/dart-lang/dev_compiler/issues/471

Changes here are:
* Analyzer now infers list/map literals
* Analyzer changed how isPotentiallyMutated* APIs work, so we need to track current function
* Another fix to arrow functions. We shouldn't skip generating covariant arg checks. If there were any, we use `=> { block }` form rather than `=> expr` form.

R=vsm@google.com

Review URL: https://codereview.chromium.org/1757343002 .
2016-03-03 11:32:54 -08:00

61 lines
1.6 KiB
JavaScript

dart_library.library('opassign', null, /* Imports */[
'dart/_runtime',
'dart/core'
], /* Lazy imports */[
], function(exports, dart, core) {
'use strict';
let dartx = dart.dartx;
dart.copyProperties(exports, {
get index() {
core.print('called "index" getter');
return 0;
}
});
dart.defineLazyProperties(exports, {
get _foo() {
return new Foo();
}
});
dart.copyProperties(exports, {
get foo() {
core.print('called "foo" getter');
return exports._foo;
}
});
class Foo extends core.Object {
Foo() {
this.x = 100;
}
}
function main() {
let f = dart.map([0, 40]);
core.print('should only call "index" 2 times:');
let i = dart.as(exports.index, core.int);
f[dartx.set](i, dart.notNull(f[dartx.get](i)) + 1);
forcePostfix((() => {
let i = dart.as(exports.index, core.int), x = f[dartx.get](i);
f[dartx.set](i, dart.notNull(x) + 1);
return x;
})());
core.print('should only call "foo" 2 times:');
let o = exports.foo;
dart.dput(o, 'x', dart.dsend(dart.dload(o, 'x'), '+', 1));
forcePostfix((() => {
let o = exports.foo, x = dart.dload(o, 'x');
dart.dput(o, 'x', dart.dsend(x, '+', 1));
return x;
})());
core.print('op assign test, should only call "index" twice:');
let i$ = dart.as(exports.index, core.int);
f[dartx.set](i$, dart.notNull(f[dartx.get](i$)) + dart.notNull(f[dartx.get](exports.index)));
}
dart.fn(main);
function forcePostfix(x) {
}
dart.fn(forcePostfix);
// Exports:
exports.Foo = Foo;
exports.main = main;
exports.forcePostfix = forcePostfix;
});