93251ee241
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 .
61 lines
1.6 KiB
JavaScript
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;
|
|
});
|