d3932e1c50
Improves handling of identifiers and known elements, the `identical` function, and generative constructors. R=ochafik@google.com, vsm@google.com Review URL: https://codereview.chromium.org/1752193002 .
280 lines
7.3 KiB
JavaScript
280 lines
7.3 KiB
JavaScript
dart_library.library('notnull', null, /* Imports */[
|
|
'dart/_runtime',
|
|
'dart/core'
|
|
], /* Lazy imports */[
|
|
], function(exports, dart, core) {
|
|
'use strict';
|
|
let dartx = dart.dartx;
|
|
function intAssignments() {
|
|
let i = 0;
|
|
i = i & 1;
|
|
i = i | 1;
|
|
i = i ^ 1;
|
|
i = i >> 1;
|
|
i = i << 1;
|
|
i = i - 1;
|
|
i = i % 1;
|
|
i = i + 1;
|
|
let t = i;
|
|
t == null ? i = 1 : t;
|
|
i = i * 1;
|
|
i = (i / 1)[dartx.truncate]();
|
|
i++;
|
|
--i;
|
|
core.print(i + 1);
|
|
let j = 1;
|
|
j = i < 10 ? 1 : 2;
|
|
core.print(j + 1);
|
|
}
|
|
dart.fn(intAssignments, dart.void, []);
|
|
function doubleAssignments() {
|
|
let d = 0.0;
|
|
d = d / 1;
|
|
core.print(d + 1);
|
|
}
|
|
dart.fn(doubleAssignments, dart.void, []);
|
|
function boolAssignments() {
|
|
let b = true;
|
|
b != b;
|
|
core.print(b);
|
|
}
|
|
dart.fn(boolAssignments, dart.void, []);
|
|
function increments() {
|
|
let i = 1;
|
|
core.print(++i);
|
|
core.print(i++);
|
|
core.print(--i);
|
|
core.print(i--);
|
|
let j = null;
|
|
j = 1;
|
|
core.print((j = dart.notNull(j) + 1));
|
|
core.print((() => {
|
|
let x = j;
|
|
j = dart.notNull(x) + 1;
|
|
return x;
|
|
})());
|
|
core.print((j = dart.notNull(j) - 1));
|
|
core.print((() => {
|
|
let x = j;
|
|
j = dart.notNull(x) - 1;
|
|
return x;
|
|
})());
|
|
}
|
|
dart.fn(increments, dart.void, []);
|
|
function conditionals(cond) {
|
|
if (cond === void 0) cond = null;
|
|
let nullable = null;
|
|
nullable = 1;
|
|
let nonNullable = 1;
|
|
let a = dart.notNull(cond) ? nullable : nullable;
|
|
let b = dart.notNull(cond) ? nullable : nonNullable;
|
|
let c = dart.notNull(cond) ? nonNullable : nonNullable;
|
|
let d = dart.notNull(cond) ? nonNullable : nullable;
|
|
core.print(dart.notNull(a) + dart.notNull(b) + c + dart.notNull(d));
|
|
}
|
|
dart.fn(conditionals, dart.void, [], [core.bool]);
|
|
function nullAwareOps() {
|
|
let nullable = null;
|
|
let nonNullable = 1;
|
|
let a = (nullable != null ? nullable : nullable);
|
|
let b = (nullable != null ? nullable : nonNullable);
|
|
let c = nonNullable;
|
|
let d = nonNullable;
|
|
core.print(dart.notNull(a) + dart.notNull(b) + c + d);
|
|
let s = "";
|
|
core.print(dart.notNull(s[dartx.length]) + 1);
|
|
}
|
|
dart.fn(nullAwareOps, dart.void, []);
|
|
function nullableLocals(param) {
|
|
core.print(dart.notNull(param) + 1);
|
|
let i = null;
|
|
i = 1;
|
|
core.print(dart.notNull(i) + 1);
|
|
let j = 1;
|
|
j = i == 1 ? 1 : null;
|
|
core.print(dart.notNull(j) + 1);
|
|
}
|
|
dart.fn(nullableLocals, dart.void, [core.int]);
|
|
function optParams(x, y) {
|
|
if (x === void 0) x = null;
|
|
if (y === void 0) y = 1;
|
|
core.print(dart.notNull(x) + dart.notNull(y));
|
|
}
|
|
dart.fn(optParams, dart.void, [], [core.int, core.int]);
|
|
function namedParams(opts) {
|
|
let x = opts && 'x' in opts ? opts.x : null;
|
|
let y = opts && 'y' in opts ? opts.y : 1;
|
|
core.print(dart.notNull(x) + dart.notNull(y));
|
|
}
|
|
dart.fn(namedParams, dart.void, [], {x: core.int, y: core.int});
|
|
function forLoops(length) {
|
|
for (let i = 0; i < 10; i++) {
|
|
core.print(i + 1);
|
|
}
|
|
for (let i = 0; i < dart.notNull(length()); i++) {
|
|
core.print(i + 1);
|
|
}
|
|
for (let i = 0, n = length(); i < dart.notNull(n); i++) {
|
|
core.print(i + 1);
|
|
}
|
|
for (let i = 0, n = dart.notNull(length()) + 0; i < n; i++) {
|
|
core.print(i + 1);
|
|
}
|
|
}
|
|
dart.fn(forLoops, dart.void, [dart.functionType(core.int, [])]);
|
|
function nullableCycle() {
|
|
let x = 1;
|
|
let y = 2;
|
|
let z = null;
|
|
x = y;
|
|
y = z;
|
|
z = x;
|
|
core.print(dart.notNull(x) + dart.notNull(y) + dart.notNull(z));
|
|
let s = null;
|
|
s = s;
|
|
core.print(dart.notNull(s) + 1);
|
|
}
|
|
dart.fn(nullableCycle, dart.void, []);
|
|
function nonNullableCycle() {
|
|
let x = 1;
|
|
let y = 2;
|
|
let z = 3;
|
|
x = y;
|
|
y = z;
|
|
z = x;
|
|
core.print(x + y + z);
|
|
let s = 1;
|
|
s = s;
|
|
core.print(s + 1);
|
|
}
|
|
dart.fn(nonNullableCycle, dart.void, []);
|
|
class Foo extends core.Object {
|
|
Foo() {
|
|
this.intField = null;
|
|
this.varField = null;
|
|
}
|
|
f(o) {
|
|
core.print(1 + dart.notNull(dart.as(this.varField, core.num)) + 2);
|
|
while (dart.notNull(dart.as(dart.dsend(this.varField, '<', 10), core.bool))) {
|
|
this.varField = dart.dsend(this.varField, '+', 1);
|
|
}
|
|
while (dart.notNull(dart.as(dart.dsend(this.varField, '<', 10), core.bool)))
|
|
this.varField = dart.dsend(this.varField, '+', 1);
|
|
core.print(1 + dart.notNull(this.intField) + 2);
|
|
while (dart.notNull(this.intField) < 10) {
|
|
this.intField = dart.notNull(this.intField) + 1;
|
|
}
|
|
while (dart.notNull(this.intField) < 10)
|
|
this.intField = dart.notNull(this.intField) + 1;
|
|
core.print(1 + dart.notNull(o.intField) + 2);
|
|
while (dart.notNull(o.intField) < 10) {
|
|
o.intField = dart.notNull(o.intField) + 1;
|
|
}
|
|
while (dart.notNull(o.intField) < 10)
|
|
o.intField = dart.notNull(o.intField) + 1;
|
|
}
|
|
}
|
|
dart.setSignature(Foo, {
|
|
methods: () => ({f: [dart.dynamic, [Foo]]})
|
|
});
|
|
function _foo() {
|
|
return 1;
|
|
}
|
|
dart.fn(_foo, core.int, []);
|
|
function calls() {
|
|
let a = 1;
|
|
let b = 1;
|
|
b = dart.as(dart.dcall(dart.fn(x => x), a), core.int);
|
|
core.print(dart.notNull(b) + 1);
|
|
let c = _foo();
|
|
core.print(dart.notNull(c) + 1);
|
|
}
|
|
dart.fn(calls);
|
|
function localEscapes() {
|
|
let a = 1;
|
|
let f = dart.fn(x => a = dart.as(x, core.int));
|
|
let b = 1;
|
|
function g(x) {
|
|
return b = dart.as(x, core.int);
|
|
}
|
|
dart.fn(g);
|
|
dart.dcall(f, 1);
|
|
g(1);
|
|
core.print(dart.notNull(a) + dart.notNull(b));
|
|
}
|
|
dart.fn(localEscapes);
|
|
function controlFlow() {
|
|
for (let i = null, j = null;;) {
|
|
i = j = 1;
|
|
core.print(dart.notNull(i) + dart.notNull(j) + 1);
|
|
break;
|
|
}
|
|
try {
|
|
dart.throw(1);
|
|
} catch (e) {
|
|
core.print(dart.dsend(e, '+', 1));
|
|
}
|
|
|
|
try {
|
|
dart.dsend(null, 'foo');
|
|
} catch (e) {
|
|
let trace = dart.stackTrace(e);
|
|
core.print(`${typeof e == 'string' ? e : dart.toString(e)} at ${trace}`);
|
|
}
|
|
|
|
}
|
|
dart.fn(controlFlow);
|
|
function cascadesOnNull() {
|
|
let x = null;
|
|
core.print(dart.hashCode(((() => {
|
|
dart.toString(x);
|
|
dart.runtimeType(x);
|
|
return x;
|
|
})())));
|
|
let y = null;
|
|
core.print(dart.hashCode(((() => {
|
|
dart.toString(y);
|
|
dart.runtimeType(y);
|
|
return y;
|
|
})())));
|
|
}
|
|
dart.fn(cascadesOnNull);
|
|
function main() {
|
|
intAssignments();
|
|
doubleAssignments();
|
|
boolAssignments();
|
|
nullableLocals(1);
|
|
optParams(1, 2);
|
|
namedParams({x: 1, y: 2});
|
|
forLoops(dart.fn(() => 10, core.int, []));
|
|
increments();
|
|
conditionals(true);
|
|
calls();
|
|
localEscapes();
|
|
controlFlow();
|
|
cascadesOnNull();
|
|
nullableCycle();
|
|
nonNullableCycle();
|
|
}
|
|
dart.fn(main);
|
|
// Exports:
|
|
exports.intAssignments = intAssignments;
|
|
exports.doubleAssignments = doubleAssignments;
|
|
exports.boolAssignments = boolAssignments;
|
|
exports.increments = increments;
|
|
exports.conditionals = conditionals;
|
|
exports.nullAwareOps = nullAwareOps;
|
|
exports.nullableLocals = nullableLocals;
|
|
exports.optParams = optParams;
|
|
exports.namedParams = namedParams;
|
|
exports.forLoops = forLoops;
|
|
exports.nullableCycle = nullableCycle;
|
|
exports.nonNullableCycle = nonNullableCycle;
|
|
exports.Foo = Foo;
|
|
exports.calls = calls;
|
|
exports.localEscapes = localEscapes;
|
|
exports.controlFlow = controlFlow;
|
|
exports.cascadesOnNull = cascadesOnNull;
|
|
exports.main = main;
|
|
});
|