[CFE] Handle unevaluated constants differently in constant evaluator

This for instance avoids an exponential blowup that would previously
have occurred in certain cases.

Change-Id: I258d8153e75f7059bca346826b5dec62cc1bac84
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249000
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Joshua Litt <joshualitt@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
This commit is contained in:
Jens Johansen
2022-06-22 08:51:04 +00:00
committed by Commit Bot
parent ac586ff2a6
commit 3c8a679b46
40 changed files with 1757 additions and 908 deletions
@@ -534,6 +534,47 @@ class Subclass<T extends A> extends Class<T> {
ConstantData(
'const Subclass<B>(B())', 'ConstructedConstant(Subclass<B*>())'),
]),
TestData('Nested Unevaluated', '''
//@dart = 2.12
class Foo {
const Foo(
int Function(String)? a1,
int Function(String)? a2,
int Function(String)? a3,
int Function(String)? a4,
) : _foo = a1 ??
a2 ??
a3 ??
a4 ??
bar;
final int Function(String) _foo;
}
int bar(String o) => int.parse(o);
''', [
ConstantData(
'''Foo(
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
)''',
<Map<String, String>, String>{
{}: 'ConstructedConstant(Foo(_foo=FunctionConstant(bar)))',
{'baz': 'true'}:
'ConstructedConstant(Foo(_foo=FunctionConstant(int.parse)))'
},
),
ConstantData(
'''String.fromEnvironment(String.fromEnvironment(String.fromEnvironment("foo")))''',
<Map<String, String>, String>{
{}: 'StringConstant("")',
{'foo': 'bar', 'bar': 'baz'}: 'StringConstant("")',
{'foo': 'bar', 'bar': 'baz', 'baz': 'hello'}: 'StringConstant("hello")',
{'foo': 'bar', 'bar': 'baz', 'baz': 'world'}: 'StringConstant("world")',
},
),
]),
];
main(List<String> args) {
@@ -26,7 +26,7 @@ abstract class _ListOrSetConstantBuilder<L extends Expression> {
if (constant is AbortConstant) return constant;
if (evaluator.shouldBeUnevaluated) {
parts.add(evaluator.unevaluated(
element, makeLiteral([evaluator.extract(constant)])));
element, makeLiteral([evaluator._wrap(constant)])));
return null;
} else {
return addConstant(constant, element);
@@ -134,7 +134,7 @@ class ListConstantBuilder extends _ListOrSetConstantBuilder<ListLiteral> {
if (part.isEmpty) continue;
lists.add(new ConstantExpression(new ListConstant(elementType, part)));
} else if (part is Constant) {
lists.add(evaluator.extract(part));
lists.add(evaluator._wrap(part));
} else {
throw 'Non-constant in constant list';
}
@@ -208,7 +208,7 @@ class SetConstantBuilder extends _ListOrSetConstantBuilder<SetLiteral> {
if (part.isEmpty) continue;
sets.add(new ConstantExpression(new SetConstant(elementType, part)));
} else if (part is Constant) {
sets.add(evaluator.extract(part));
sets.add(evaluator._wrap(part));
} else {
throw 'Non-constant in constant set';
}
@@ -247,8 +247,7 @@ class MapConstantBuilder {
parts.add(evaluator.unevaluated(
element.key,
new MapLiteral([
new MapLiteralEntry(
evaluator.extract(key), evaluator.extract(value))
new MapLiteralEntry(evaluator._wrap(key), evaluator._wrap(value))
], isConst: true)));
return null;
} else {
@@ -347,7 +346,7 @@ class MapConstantBuilder {
maps.add(
new ConstantExpression(new MapConstant(keyType, valueType, part)));
} else if (part is Constant) {
maps.add(evaluator.extract(part));
maps.add(evaluator._wrap(part));
} else {
throw 'Non-constant in constant map';
}
@@ -22,7 +22,6 @@ import 'dart:io' as io;
import 'package:kernel/ast.dart';
import 'package:kernel/class_hierarchy.dart';
import 'package:kernel/clone.dart';
import 'package:kernel/core_types.dart';
import 'package:kernel/src/const_canonical_type.dart';
import 'package:kernel/src/legacy_erasure.dart';
@@ -835,7 +834,7 @@ class ConstantsTransformer extends RemovingTransformer {
TreeNode visitConstantExpression(
ConstantExpression node, TreeNode? removalSentinel) {
Constant constant = node.constant;
if (constant is UnevaluatedConstant) {
if (constant is UnevaluatedConstant && constantEvaluator.hasEnvironment) {
Expression expression = constant.expression;
return evaluateAndTransformWithContext(expression, expression);
} else {
@@ -898,7 +897,6 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Map<Constant, Constant> canonicalizationCache;
final Map<Node, Constant?> nodeCache;
final CloneVisitorNotMembers cloner = new CloneVisitorNotMembers();
late Map<Class, bool> primitiveEqualCache;
@@ -910,7 +908,6 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
InstanceBuilder? instanceBuilder;
EvaluationEnvironment env;
Set<Expression> replacementNodes = new Set<Expression>.identity();
Map<Constant, Constant> lowered = new Map<Constant, Constant>.identity();
bool seenUnevaluatedChild = false; // Any children that were left unevaluated?
@@ -1209,17 +1206,11 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return node.accept(new RedundantFileUriExpressionRemover()) as Expression;
}
/// Extract an expression from a (possibly unevaluated) constant to become
/// part of the expression tree of another unevaluated constant.
/// Makes sure a particular expression occurs only once in the tree by
/// cloning further instances.
Expression extract(Constant constant) {
Expression expression = constant.asExpression();
if (!replacementNodes.add(expression)) {
expression = cloner.clone(expression);
replacementNodes.add(expression);
}
return expression;
/// Wrap a constant in a ConstantExpression.
///
/// For use with unevaluated constants.
ConstantExpression _wrap(Constant constant) {
return new ConstantExpression(constant);
}
/// Enter a region of lazy evaluation. All leaf nodes are evaluated normally
@@ -1754,7 +1745,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return error;
}
if (constant is UnevaluatedConstant) {
instanceBuilder!.unusedArguments.add(extract(constant));
instanceBuilder!.unusedArguments.add(_wrap(constant));
}
}
if (error != null) return error;
@@ -2040,7 +2031,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
}
for (UnevaluatedConstant constant in env.unevaluatedUnreadConstants) {
instanceBuilder!.unusedArguments.add(extract(constant));
instanceBuilder!.unusedArguments.add(_wrap(constant));
}
// ignore: unnecessary_null_comparison
@@ -2065,10 +2056,10 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
enterLazy();
Constant constant = _evaluateSubexpression(statement.message!);
if (constant is AbortConstant) return constant;
message = extract(constant);
message = _wrap(constant);
leaveLazy();
}
instanceBuilder!.asserts.add(new AssertStatement(extract(condition),
instanceBuilder!.asserts.add(new AssertStatement(_wrap(condition),
message: message,
conditionStartOffset: statement.conditionStartOffset,
conditionEndOffset: statement.conditionEndOffset));
@@ -2081,8 +2072,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final Constant message = _evaluateSubexpression(statement.message!);
if (message is AbortConstant) return message;
if (shouldBeUnevaluated) {
instanceBuilder!.asserts.add(new AssertStatement(extract(condition),
message: extract(message),
instanceBuilder!.asserts.add(new AssertStatement(_wrap(condition),
message: _wrap(message),
conditionStartOffset: statement.conditionStartOffset,
conditionEndOffset: statement.conditionEndOffset));
} else if (message is StringConstant) {
@@ -2150,7 +2141,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
node,
new DynamicInvocation(
node.kind,
extract(receiver),
_wrap(receiver),
node.name,
unevaluatedArguments(
positionalArguments, {}, node.arguments.types))
@@ -2195,7 +2186,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
node,
new InstanceInvocation(
node.kind,
extract(receiver),
_wrap(receiver),
node.name,
unevaluatedArguments(
positionalArguments, {}, node.arguments.types),
@@ -2296,7 +2287,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (shouldBeUnevaluated) {
return unevaluated(
node,
new EqualsCall(extract(left), extract(right),
new EqualsCall(_wrap(left), _wrap(right),
functionType: node.functionType,
interfaceTarget: node.interfaceTarget)
..fileOffset = node.fileOffset);
@@ -2312,7 +2303,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (shouldBeUnevaluated) {
return unevaluated(node,
new EqualsNull(extract(expression))..fileOffset = node.fileOffset);
new EqualsNull(_wrap(expression))..fileOffset = node.fileOffset);
}
return _handleEquals(node, expression, nullConstant);
@@ -2603,10 +2594,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
Constant right = _evaluateSubexpression(node.right);
if (right is AbortConstant) return right;
leaveLazy();
return unevaluated(
node,
new LogicalExpression(
extract(left), node.operatorEnum, extract(right)));
return unevaluated(node,
new LogicalExpression(_wrap(left), node.operatorEnum, _wrap(right)));
}
switch (node.operatorEnum) {
case LogicalExpressionOperator.OR:
@@ -2687,8 +2676,8 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
leaveLazy();
return unevaluated(
node,
new ConditionalExpression(extract(condition), extract(then),
extract(otherwise), env.substituteType(node.staticType)));
new ConditionalExpression(_wrap(condition), _wrap(then),
_wrap(otherwise), env.substituteType(node.staticType)));
} else {
return createEvaluationErrorConstant(
node.condition,
@@ -2736,7 +2725,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
} else if (shouldBeUnevaluated) {
return unevaluated(
node,
new InstanceGet(node.kind, extract(receiver), node.name,
new InstanceGet(node.kind, _wrap(receiver), node.name,
resultType: node.resultType,
interfaceTarget: node.interfaceTarget));
} else if (receiver is NullConstant) {
@@ -2796,7 +2785,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return canonicalize(intFolder.makeIntConstant(receiver.value.length));
} else if (shouldBeUnevaluated) {
return unevaluated(
node, new DynamicGet(node.kind, extract(receiver), node.name));
node, new DynamicGet(node.kind, _wrap(receiver), node.name));
} else if (receiver is NullConstant) {
return createEvaluationErrorConstant(node, messageConstEvalNullValue);
}
@@ -2978,7 +2967,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
} else {
// The value is either unevaluated constant or a non-primitive
// constant in an unevaluated expression.
return extract(value as Constant);
return _wrap(value as Constant);
}
}, growable: false);
return unevaluated(node, new StringConcatenation(expressions));
@@ -3253,7 +3242,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (shouldBeUnevaluated) {
return unevaluated(
node,
new AsExpression(extract(constant), env.substituteType(node.type))
new AsExpression(_wrap(constant), env.substituteType(node.type))
..isForNonNullableByDefault =
_staticTypeContext!.isNonNullableByDefault);
}
@@ -3276,7 +3265,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (shouldBeUnevaluated) {
return unevaluated(
node,
new IsExpression(extract(constant), env.substituteType(node.type))
new IsExpression(_wrap(constant), env.substituteType(node.type))
..fileOffset = node.fileOffset
..flags = node.flags);
}
@@ -3348,7 +3337,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return makeBoolConstant(constant != trueConstant);
}
if (shouldBeUnevaluated) {
return unevaluated(node, new Not(extract(constant)));
return unevaluated(node, new Not(_wrap(constant)));
}
return createEvaluationErrorConstant(
node,
@@ -3367,7 +3356,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
return createEvaluationErrorConstant(node, messageConstEvalNonNull);
}
if (shouldBeUnevaluated) {
return unevaluated(node, new NullCheck(extract(constant)));
return unevaluated(node, new NullCheck(_wrap(constant)));
}
return constant;
}
@@ -3396,7 +3385,7 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
if (shouldBeUnevaluated) {
return unevaluated(
node,
new Instantiation(extract(constant),
new Instantiation(_wrap(constant),
node.typeArguments.map((t) => env.substituteType(t)).toList()));
}
List<TypeParameter>? typeParameters;
@@ -3690,11 +3679,11 @@ class ConstantEvaluator implements ExpressionVisitor<Constant> {
final List<NamedExpression> named = new List<NamedExpression>.filled(
namedArgs.length, dummyNamedExpression);
for (int i = 0; i < positionalArgs.length; ++i) {
positional[i] = extract(positionalArgs[i]);
positional[i] = _wrap(positionalArgs[i]);
}
int i = 0;
namedArgs.forEach((String name, Constant value) {
named[i++] = new NamedExpression(name, extract(value));
named[i++] = new NamedExpression(name, _wrap(value));
});
return new Arguments(positional, named: named, types: types);
}
@@ -4145,7 +4134,7 @@ class InstanceBuilder {
InstanceCreation buildUnevaluatedInstance() {
final Map<Reference, Expression> fieldValues = <Reference, Expression>{};
fields.forEach((Field field, Constant value) {
fieldValues[field.fieldReference] = evaluator.extract(value);
fieldValues[field.fieldReference] = evaluator._wrap(value);
});
return new InstanceCreation(
klass.reference, typeArguments, fieldValues, asserts, unusedArguments);
@@ -4325,11 +4314,6 @@ class FunctionValue implements Constant {
throw new UnimplementedError();
}
@override
Expression asExpression() {
throw new UnimplementedError();
}
@override
DartType getType(StaticTypeContext context) {
throw new UnimplementedError();
@@ -4397,11 +4381,6 @@ class _AbortDueToErrorConstant extends AbortConstant {
throw new UnimplementedError();
}
@override
Expression asExpression() {
throw new UnimplementedError();
}
@override
DartType getType(StaticTypeContext context) {
throw new UnimplementedError();
@@ -4463,11 +4442,6 @@ class _AbortDueToInvalidExpressionConstant extends AbortConstant {
throw new UnimplementedError();
}
@override
Expression asExpression() {
throw new UnimplementedError();
}
@override
DartType getType(StaticTypeContext context) {
throw new UnimplementedError();
@@ -4530,11 +4504,6 @@ class _AbortDueToThrowConstant extends AbortConstant {
throw new UnimplementedError();
}
@override
Expression asExpression() {
throw new UnimplementedError();
}
@override
DartType getType(StaticTypeContext context) {
throw new UnimplementedError();
@@ -95,9 +95,9 @@ class Bar extends core::Object /*hasConstConstructor*/ {
: self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
;
}
static const field self::Foo foo1 = #C9;
static const field self::Foo foo1 = #C12;
static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
static const field self::Foo foo3 = #C12;
static const field self::Foo foo3 = #C16;
static const field self::Foo foo4 = invalid-expression "This assertion failed with a non-String message.";
static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
const Foo.withInvalidCondition(this.x) : assert(x);
@@ -107,7 +107,7 @@ static const field self::Bar bar2 = invalid-expression "This assertion failed wi
static const field self::Bar bar3 = invalid-expression "This assertion failed.";
static const field self::Bar bar4 = invalid-expression "This assertion failed.";
static method main() → dynamic {
core::print(#C9);
core::print(#C12);
}
constants {
@@ -118,11 +118,15 @@ constants {
#C5 = eval const core::bool::fromEnvironment(#C1)
#C6 = 1
#C7 = false
#C8 = "foo was "
#C9 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7, "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7)}
#C10 = 42
#C11 = "btw foo was "
#C12 = eval self::Foo{x:#C10, assert(#C7, "${#C11}${const core::bool::fromEnvironment(#C1)}")}
#C8 = eval #C2 =={core::Object::==}{(core::Object) → core::bool} #C7
#C9 = "foo was "
#C10 = eval "${#C9}${#C3}"
#C11 = eval #C4 =={core::Object::==}{(core::Object) → core::bool} #C7
#C12 = eval self::Foo{x:#C6, assert(#C8, #C10), assert(#C11)}
#C13 = 42
#C14 = "btw foo was "
#C15 = eval "${#C14}${#C5}"
#C16 = eval self::Foo{x:#C13, assert(#C7, #C15)}
}
@@ -95,9 +95,9 @@ class Bar extends core::Object /*hasConstConstructor*/ {
: self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
;
}
static const field self::Foo foo1 = #C9;
static const field self::Foo foo1 = #C12;
static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
static const field self::Foo foo3 = #C12;
static const field self::Foo foo3 = #C16;
static const field self::Foo foo4 = invalid-expression "This assertion failed with a non-String message.";
static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
const Foo.withInvalidCondition(this.x) : assert(x);
@@ -107,7 +107,7 @@ static const field self::Bar bar2 = invalid-expression "This assertion failed wi
static const field self::Bar bar3 = invalid-expression "This assertion failed.";
static const field self::Bar bar4 = invalid-expression "This assertion failed.";
static method main() → dynamic {
core::print(#C9);
core::print(#C12);
}
constants {
@@ -118,11 +118,15 @@ constants {
#C5 = eval const core::bool::fromEnvironment(#C1)
#C6 = 1
#C7 = false
#C8 = "foo was "
#C9 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7, "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7)}
#C10 = 42
#C11 = "btw foo was "
#C12 = eval self::Foo{x:#C10, assert(#C7, "${#C11}${const core::bool::fromEnvironment(#C1)}")}
#C8 = eval #C2 =={core::Object::==}{(core::Object) → core::bool} #C7
#C9 = "foo was "
#C10 = eval "${#C9}${#C3}"
#C11 = eval #C4 =={core::Object::==}{(core::Object) → core::bool} #C7
#C12 = eval self::Foo{x:#C6, assert(#C8, #C10), assert(#C11)}
#C13 = 42
#C14 = "btw foo was "
#C15 = eval "${#C14}${#C5}"
#C16 = eval self::Foo{x:#C13, assert(#C7, #C15)}
}
@@ -95,9 +95,9 @@ class Bar extends core::Object /*hasConstConstructor*/ {
: self::Bar::x = x, assert(x.{core::num::<}(0){(core::num) → core::bool}), super core::Object::•()
;
}
static const field self::Foo foo1 = #C9;
static const field self::Foo foo1 = #C12;
static const field self::Foo foo2 = invalid-expression "This assertion failed with message: x is not positive";
static const field self::Foo foo3 = #C12;
static const field self::Foo foo3 = #C16;
static const field self::Foo foo4 = invalid-expression "This assertion failed with a non-String message.";
static const field self::Foo foo5 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/const_asserts.dart:16:51: Error: A value of type 'int' can't be assigned to a variable of type 'bool'.
const Foo.withInvalidCondition(this.x) : assert(x);
@@ -107,7 +107,7 @@ static const field self::Bar bar2 = invalid-expression "This assertion failed wi
static const field self::Bar bar3 = invalid-expression "This assertion failed.";
static const field self::Bar bar4 = invalid-expression "This assertion failed.";
static method main() → dynamic {
core::print(#C13);
core::print(#C12);
}
constants {
@@ -118,12 +118,15 @@ constants {
#C5 = eval const core::bool::fromEnvironment(#C1)
#C6 = 1
#C7 = false
#C8 = "foo was "
#C9 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7, "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7)}
#C10 = 42
#C11 = "btw foo was "
#C12 = eval self::Foo{x:#C10, assert(#C7, "${#C11}${const core::bool::fromEnvironment(#C1)}")}
#C13 = eval self::Foo{x:#C6, assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7, "${#C8}${const core::bool::fromEnvironment(#C1)}"), assert(const core::bool::fromEnvironment(#C1) =={core::Object::==}{(core::Object) → core::bool} #C7)}
#C8 = eval #C2 =={core::Object::==}{(core::Object) → core::bool} #C7
#C9 = "foo was "
#C10 = eval "${#C9}${#C3}"
#C11 = eval #C4 =={core::Object::==}{(core::Object) → core::bool} #C7
#C12 = eval self::Foo{x:#C6, assert(#C8, #C10), assert(#C11)}
#C13 = 42
#C14 = "btw foo was "
#C15 = eval "${#C14}${#C5}"
#C16 = eval self::Foo{x:#C13, assert(#C7, #C15)}
}
Extra constant evaluation status:
@@ -135,7 +138,7 @@ Evaluated with empty environment: EqualsCall @ org-dartlang-testcase:///const_as
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:12:22 -> BoolConstant(false)
Evaluated with empty environment: StringConcatenation @ org-dartlang-testcase:///const_asserts.dart:14:73 -> StringConstant("btw foo was false")
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:14:44 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:25:24 -> InstanceConstant(const Foo{Foo.x: 1})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:36:9 -> InstanceConstant(const Foo{Foo.x: 1})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_asserts.dart:25:24 -> InstanceConstant(const Foo{Foo.x: 1})
Extra constant evaluation: evaluated: 31, effectively constant: 10
@@ -9,44 +9,55 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::bool> listWithUnevaluated = #C5;
static const field core::List<core::bool> listWithUnevaluatedSpread = #C8;
static const field core::Set<core::bool> setWithUnevaluated = #C10;
static const field core::Set<core::bool> setWithUnevaluatedSpread = #C12;
static const field core::List<core::int> a = #C13;
static const field core::List<core::int?> b = #C14;
static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C15;
static const field invalid-type MapWithUnevaluated = #C16;
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C19;
static const field core::List<core::bool> listWithUnevaluated = #C9;
static const field core::List<core::bool> listWithUnevaluatedSpread = #C12;
static const field core::Set<core::bool> setWithUnevaluated = #C18;
static const field core::Set<core::bool> setWithUnevaluatedSpread = #C20;
static const field core::List<core::int> a = #C21;
static const field core::List<core::int?> b = #C22;
static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C23;
static const field invalid-type MapWithUnevaluated = #C27;
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C30;
static method main() → dynamic {
core::print(#C5);
core::print(#C8);
core::print(#C10);
core::print(#C9);
core::print(#C12);
core::print(#C18);
core::print(#C20);
core::print(<core::String>{"hello"});
core::print(#C21);
core::print(#C32);
}
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = true
#C4 = <core::bool*>[#C3]
#C5 = eval const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4
#C6 = false
#C7 = <core::bool*>[#C6]
#C8 = eval #C4 + const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4 + #C7
#C9 = <core::bool*>{#C3}
#C10 = eval const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9
#C11 = <core::bool*>{#C6}
#C12 = eval #C9 + const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9 + #C11
#C13 = <core::int*>[]
#C14 = <core::int?>[]
#C15 = <core::List<core::int?>*>{#C13, #C14}
#C16 = eval const <dynamic, dynamic>{const core::bool::fromEnvironment(#C1): const core::bool::fromEnvironment(#C2)}
#C17 = 0
#C18 = 1
#C19 = <core::List<core::int?>*, core::int*>{#C13:#C17, #C14:#C18)
#C20 = "hello"
#C21 = <core::String*>{#C20}
#C2 = eval const core::bool::fromEnvironment(#C1)
#C3 = eval const <dynamic>[#C2]
#C4 = "bar"
#C5 = eval const core::bool::fromEnvironment(#C4)
#C6 = eval const <dynamic>[#C5]
#C7 = true
#C8 = <core::bool*>[#C7]
#C9 = eval #C3 + #C6 + #C8
#C10 = false
#C11 = <core::bool*>[#C10]
#C12 = eval #C8 + #C9 + #C11
#C13 = eval const core::bool::fromEnvironment(#C1)
#C14 = eval const <dynamic>{#C13}
#C15 = eval const core::bool::fromEnvironment(#C4)
#C16 = eval const <dynamic>{#C15}
#C17 = <core::bool*>{#C7}
#C18 = eval #C14 + #C16 + #C17
#C19 = <core::bool*>{#C10}
#C20 = eval #C17 + #C18 + #C19
#C21 = <core::int*>[]
#C22 = <core::int?>[]
#C23 = <core::List<core::int?>*>{#C21, #C22}
#C24 = eval const core::bool::fromEnvironment(#C1)
#C25 = eval const core::bool::fromEnvironment(#C4)
#C26 = eval const <dynamic, dynamic>{#C24: #C25}
#C27 = eval #C26
#C28 = 0
#C29 = 1
#C30 = <core::List<core::int?>*, core::int*>{#C21:#C28, #C22:#C29)
#C31 = "hello"
#C32 = <core::String*>{#C31}
}
@@ -9,44 +9,55 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::bool> listWithUnevaluated = #C5;
static const field core::List<core::bool> listWithUnevaluatedSpread = #C8;
static const field core::Set<core::bool> setWithUnevaluated = #C10;
static const field core::Set<core::bool> setWithUnevaluatedSpread = #C12;
static const field core::List<core::int> a = #C13;
static const field core::List<core::int?> b = #C14;
static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C15;
static const field invalid-type MapWithUnevaluated = #C16;
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C19;
static const field core::List<core::bool> listWithUnevaluated = #C9;
static const field core::List<core::bool> listWithUnevaluatedSpread = #C12;
static const field core::Set<core::bool> setWithUnevaluated = #C18;
static const field core::Set<core::bool> setWithUnevaluatedSpread = #C20;
static const field core::List<core::int> a = #C21;
static const field core::List<core::int?> b = #C22;
static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C23;
static const field invalid-type MapWithUnevaluated = #C27;
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C30;
static method main() → dynamic {
core::print(#C5);
core::print(#C8);
core::print(#C10);
core::print(#C9);
core::print(#C12);
core::print(#C18);
core::print(#C20);
core::print(<core::String>{"hello"});
core::print(#C21);
core::print(#C32);
}
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = true
#C4 = <core::bool*>[#C3]
#C5 = eval const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4
#C6 = false
#C7 = <core::bool*>[#C6]
#C8 = eval #C4 + const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4 + #C7
#C9 = <core::bool*>{#C3}
#C10 = eval const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9
#C11 = <core::bool*>{#C6}
#C12 = eval #C9 + const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9 + #C11
#C13 = <core::int*>[]
#C14 = <core::int?>[]
#C15 = <core::List<core::int?>*>{#C13, #C14}
#C16 = eval const <dynamic, dynamic>{const core::bool::fromEnvironment(#C1): const core::bool::fromEnvironment(#C2)}
#C17 = 0
#C18 = 1
#C19 = <core::List<core::int?>*, core::int*>{#C13:#C17, #C14:#C18)
#C20 = "hello"
#C21 = <core::String*>{#C20}
#C2 = eval const core::bool::fromEnvironment(#C1)
#C3 = eval const <dynamic>[#C2]
#C4 = "bar"
#C5 = eval const core::bool::fromEnvironment(#C4)
#C6 = eval const <dynamic>[#C5]
#C7 = true
#C8 = <core::bool*>[#C7]
#C9 = eval #C3 + #C6 + #C8
#C10 = false
#C11 = <core::bool*>[#C10]
#C12 = eval #C8 + #C9 + #C11
#C13 = eval const core::bool::fromEnvironment(#C1)
#C14 = eval const <dynamic>{#C13}
#C15 = eval const core::bool::fromEnvironment(#C4)
#C16 = eval const <dynamic>{#C15}
#C17 = <core::bool*>{#C7}
#C18 = eval #C14 + #C16 + #C17
#C19 = <core::bool*>{#C10}
#C20 = eval #C17 + #C18 + #C19
#C21 = <core::int*>[]
#C22 = <core::int?>[]
#C23 = <core::List<core::int?>*>{#C21, #C22}
#C24 = eval const core::bool::fromEnvironment(#C1)
#C25 = eval const core::bool::fromEnvironment(#C4)
#C26 = eval const <dynamic, dynamic>{#C24: #C25}
#C27 = eval #C26
#C28 = 0
#C29 = 1
#C30 = <core::List<core::int?>*, core::int*>{#C21:#C28, #C22:#C29)
#C31 = "hello"
#C32 = <core::String*>{#C31}
}
@@ -9,55 +9,62 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::bool> listWithUnevaluated = #C5;
static const field core::List<core::bool> listWithUnevaluatedSpread = #C8;
static const field core::Set<core::bool> setWithUnevaluated = #C10;
static const field core::Set<core::bool> setWithUnevaluatedSpread = #C12;
static const field core::List<core::int> a = #C13;
static const field core::List<core::int?> b = #C14;
static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C15;
static const field invalid-type MapWithUnevaluated = #C16;
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C19;
static const field core::List<core::bool> listWithUnevaluated = #C9;
static const field core::List<core::bool> listWithUnevaluatedSpread = #C12;
static const field core::Set<core::bool> setWithUnevaluated = #C18;
static const field core::Set<core::bool> setWithUnevaluatedSpread = #C20;
static const field core::List<core::int> a = #C21;
static const field core::List<core::int?> b = #C22;
static const field core::Set<core::List<core::int?>> setNotAgnosticOK = #C23;
static const field invalid-type MapWithUnevaluated = #C27;
static const field core::Map<core::List<core::int?>, core::int> mapNotAgnosticOK = #C30;
static method main() → dynamic {
core::print(#C9);
core::print(#C12);
core::print(#C18);
core::print(#C20);
core::print(#C21);
core::print(#C22);
core::print(#C23);
core::print(<core::String>{"hello"});
core::print(#C25);
core::print(#C32);
}
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = true
#C4 = <core::bool*>[#C3]
#C5 = eval const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4
#C6 = false
#C7 = <core::bool*>[#C6]
#C8 = eval #C4 + const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4 + #C7
#C9 = <core::bool*>{#C3}
#C10 = eval const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9
#C11 = <core::bool*>{#C6}
#C12 = eval #C9 + const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9 + #C11
#C13 = <core::int*>[]
#C14 = <core::int?>[]
#C15 = <core::List<core::int?>*>{#C13, #C14}
#C16 = eval const <dynamic, dynamic>{const core::bool::fromEnvironment(#C1): const core::bool::fromEnvironment(#C2)}
#C17 = 0
#C18 = 1
#C19 = <core::List<core::int?>*, core::int*>{#C13:#C17, #C14:#C18)
#C20 = eval const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4
#C21 = eval #C4 + const <dynamic>[const core::bool::fromEnvironment(#C1)] + const <dynamic>[const core::bool::fromEnvironment(#C2)] + #C4 + #C7
#C22 = eval const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9
#C23 = eval #C9 + const <dynamic>{const core::bool::fromEnvironment(#C1)} + const <dynamic>{const core::bool::fromEnvironment(#C2)} + #C9 + #C11
#C24 = "hello"
#C25 = <core::String*>{#C24}
#C2 = eval const core::bool::fromEnvironment(#C1)
#C3 = eval const <dynamic>[#C2]
#C4 = "bar"
#C5 = eval const core::bool::fromEnvironment(#C4)
#C6 = eval const <dynamic>[#C5]
#C7 = true
#C8 = <core::bool*>[#C7]
#C9 = eval #C3 + #C6 + #C8
#C10 = false
#C11 = <core::bool*>[#C10]
#C12 = eval #C8 + #C9 + #C11
#C13 = eval const core::bool::fromEnvironment(#C1)
#C14 = eval const <dynamic>{#C13}
#C15 = eval const core::bool::fromEnvironment(#C4)
#C16 = eval const <dynamic>{#C15}
#C17 = <core::bool*>{#C7}
#C18 = eval #C14 + #C16 + #C17
#C19 = <core::bool*>{#C10}
#C20 = eval #C17 + #C18 + #C19
#C21 = <core::int*>[]
#C22 = <core::int?>[]
#C23 = <core::List<core::int?>*>{#C21, #C22}
#C24 = eval const core::bool::fromEnvironment(#C1)
#C25 = eval const core::bool::fromEnvironment(#C4)
#C26 = eval const <dynamic, dynamic>{#C24: #C25}
#C27 = eval #C26
#C28 = 0
#C29 = 1
#C30 = <core::List<core::int?>*, core::int*>{#C21:#C28, #C22:#C29)
#C31 = "hello"
#C32 = <core::String*>{#C31}
}
Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:5:40 -> ListConstant(const <bool*>[false, false, true])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:10:46 -> ListConstant(const <bool*>[true, false, false, true, false])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:34:9 -> ListConstant(const <bool*>[false, false, true])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:35:9 -> ListConstant(const <bool*>[true, false, false, true, false])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:5:40 -> ListConstant(const <bool*>[false, false, true])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:10:46 -> ListConstant(const <bool*>[true, false, false, true, false])
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///const_collections.dart:27:38 -> MapConstant(const <bool*, bool*>{false: false})
@@ -2,37 +2,53 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedFirst = #C6;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedMiddle = #C14;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedFirst = #C16;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedMiddle = #C19;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedFirst = #C22;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedMiddle = #C25;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedFirst = #C10;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedMiddle = #C22;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedFirst = #C26;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedMiddle = #C31;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedFirst = #C36;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedMiddle = #C41;
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = "hello"
#C4 = "world"
#C5 = <core::String*>[#C3, #C4]
#C6 = eval const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C5
#C7 = "A"
#C8 = "few"
#C9 = "strings"
#C10 = <core::String*>[#C7, #C8, #C9]
#C11 = "and"
#C12 = "more"
#C13 = <core::String*>[#C3, #C4, #C11, #C12]
#C14 = eval #C10 + const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C13
#C15 = <core::String*>{#C3, #C4}
#C16 = eval const <dynamic>{const core::String::fromEnvironment(#C1)} + #C15
#C17 = <core::String*>{#C7, #C8, #C9}
#C18 = <core::String*>{#C3, #C4, #C11, #C12}
#C19 = eval #C17 + const <dynamic>{const core::String::fromEnvironment(#C1)} + #C18
#C20 = 42
#C21 = <core::String*, core::int*>{#C3:#C20, #C4:#C20)
#C22 = eval const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C21
#C23 = <core::String*, core::int*>{#C7:#C20, #C8:#C20, #C9:#C20)
#C24 = <core::String*, core::int*>{#C3:#C20, #C4:#C20, #C11:#C20, #C12:#C20)
#C25 = eval #C23 + const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C24
#C2 = eval const core::String::fromEnvironment(#C1)
#C3 = eval const <dynamic>[#C2]
#C4 = "bar"
#C5 = eval const core::String::fromEnvironment(#C4)
#C6 = eval const <dynamic>[#C5]
#C7 = "hello"
#C8 = "world"
#C9 = <core::String*>[#C7, #C8]
#C10 = eval #C3 + #C6 + #C9
#C11 = "A"
#C12 = "few"
#C13 = "strings"
#C14 = <core::String*>[#C11, #C12, #C13]
#C15 = eval const core::String::fromEnvironment(#C1)
#C16 = eval const <dynamic>[#C15]
#C17 = eval const core::String::fromEnvironment(#C4)
#C18 = eval const <dynamic>[#C17]
#C19 = "and"
#C20 = "more"
#C21 = <core::String*>[#C7, #C8, #C19, #C20]
#C22 = eval #C14 + #C16 + #C18 + #C21
#C23 = eval const core::String::fromEnvironment(#C1)
#C24 = eval const <dynamic>{#C23}
#C25 = <core::String*>{#C7, #C8}
#C26 = eval #C24 + #C25
#C27 = <core::String*>{#C11, #C12, #C13}
#C28 = eval const core::String::fromEnvironment(#C1)
#C29 = eval const <dynamic>{#C28}
#C30 = <core::String*>{#C7, #C8, #C19, #C20}
#C31 = eval #C27 + #C29 + #C30
#C32 = eval const core::String::fromEnvironment(#C1)
#C33 = 42
#C34 = eval const <dynamic, dynamic>{#C32: #C33}
#C35 = <core::String*, core::int*>{#C7:#C33, #C8:#C33)
#C36 = eval #C34 + #C35
#C37 = <core::String*, core::int*>{#C11:#C33, #C12:#C33, #C13:#C33)
#C38 = eval const core::String::fromEnvironment(#C1)
#C39 = eval const <dynamic, dynamic>{#C38: #C33}
#C40 = <core::String*, core::int*>{#C7:#C33, #C8:#C33, #C19:#C33, #C20:#C33)
#C41 = eval #C37 + #C39 + #C40
}
@@ -2,37 +2,53 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedFirst = #C6;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedMiddle = #C14;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedFirst = #C16;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedMiddle = #C19;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedFirst = #C22;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedMiddle = #C25;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedFirst = #C10;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedMiddle = #C22;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedFirst = #C26;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedMiddle = #C31;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedFirst = #C36;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedMiddle = #C41;
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = "hello"
#C4 = "world"
#C5 = <core::String*>[#C3, #C4]
#C6 = eval const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C5
#C7 = "A"
#C8 = "few"
#C9 = "strings"
#C10 = <core::String*>[#C7, #C8, #C9]
#C11 = "and"
#C12 = "more"
#C13 = <core::String*>[#C3, #C4, #C11, #C12]
#C14 = eval #C10 + const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C13
#C15 = <core::String*>{#C3, #C4}
#C16 = eval const <dynamic>{const core::String::fromEnvironment(#C1)} + #C15
#C17 = <core::String*>{#C7, #C8, #C9}
#C18 = <core::String*>{#C3, #C4, #C11, #C12}
#C19 = eval #C17 + const <dynamic>{const core::String::fromEnvironment(#C1)} + #C18
#C20 = 42
#C21 = <core::String*, core::int*>{#C3:#C20, #C4:#C20)
#C22 = eval const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C21
#C23 = <core::String*, core::int*>{#C7:#C20, #C8:#C20, #C9:#C20)
#C24 = <core::String*, core::int*>{#C3:#C20, #C4:#C20, #C11:#C20, #C12:#C20)
#C25 = eval #C23 + const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C24
#C2 = eval const core::String::fromEnvironment(#C1)
#C3 = eval const <dynamic>[#C2]
#C4 = "bar"
#C5 = eval const core::String::fromEnvironment(#C4)
#C6 = eval const <dynamic>[#C5]
#C7 = "hello"
#C8 = "world"
#C9 = <core::String*>[#C7, #C8]
#C10 = eval #C3 + #C6 + #C9
#C11 = "A"
#C12 = "few"
#C13 = "strings"
#C14 = <core::String*>[#C11, #C12, #C13]
#C15 = eval const core::String::fromEnvironment(#C1)
#C16 = eval const <dynamic>[#C15]
#C17 = eval const core::String::fromEnvironment(#C4)
#C18 = eval const <dynamic>[#C17]
#C19 = "and"
#C20 = "more"
#C21 = <core::String*>[#C7, #C8, #C19, #C20]
#C22 = eval #C14 + #C16 + #C18 + #C21
#C23 = eval const core::String::fromEnvironment(#C1)
#C24 = eval const <dynamic>{#C23}
#C25 = <core::String*>{#C7, #C8}
#C26 = eval #C24 + #C25
#C27 = <core::String*>{#C11, #C12, #C13}
#C28 = eval const core::String::fromEnvironment(#C1)
#C29 = eval const <dynamic>{#C28}
#C30 = <core::String*>{#C7, #C8, #C19, #C20}
#C31 = eval #C27 + #C29 + #C30
#C32 = eval const core::String::fromEnvironment(#C1)
#C33 = 42
#C34 = eval const <dynamic, dynamic>{#C32: #C33}
#C35 = <core::String*, core::int*>{#C7:#C33, #C8:#C33)
#C36 = eval #C34 + #C35
#C37 = <core::String*, core::int*>{#C11:#C33, #C12:#C33, #C13:#C33)
#C38 = eval const core::String::fromEnvironment(#C1)
#C39 = eval const <dynamic, dynamic>{#C38: #C33}
#C40 = <core::String*, core::int*>{#C7:#C33, #C8:#C33, #C19:#C33, #C20:#C33)
#C41 = eval #C37 + #C39 + #C40
}
@@ -2,39 +2,55 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedFirst = #C6;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedMiddle = #C14;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedFirst = #C16;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedMiddle = #C19;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedFirst = #C22;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedMiddle = #C25;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedFirst = #C10;
static const field core::List<core::String> listWithUnevaluatedUnevaluatedMiddle = #C22;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedFirst = #C26;
static const field core::Set<core::String> setWithUnevaluatedUnevaluatedMiddle = #C31;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedFirst = #C36;
static const field core::Map<core::String, core::int> mapWithUnevaluatedUnevaluatedMiddle = #C41;
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = "hello"
#C4 = "world"
#C5 = <core::String*>[#C3, #C4]
#C6 = eval const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C5
#C7 = "A"
#C8 = "few"
#C9 = "strings"
#C10 = <core::String*>[#C7, #C8, #C9]
#C11 = "and"
#C12 = "more"
#C13 = <core::String*>[#C3, #C4, #C11, #C12]
#C14 = eval #C10 + const <dynamic>[const core::String::fromEnvironment(#C1)] + const <dynamic>[const core::String::fromEnvironment(#C2)] + #C13
#C15 = <core::String*>{#C3, #C4}
#C16 = eval const <dynamic>{const core::String::fromEnvironment(#C1)} + #C15
#C17 = <core::String*>{#C7, #C8, #C9}
#C18 = <core::String*>{#C3, #C4, #C11, #C12}
#C19 = eval #C17 + const <dynamic>{const core::String::fromEnvironment(#C1)} + #C18
#C20 = 42
#C21 = <core::String*, core::int*>{#C3:#C20, #C4:#C20)
#C22 = eval const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C21
#C23 = <core::String*, core::int*>{#C7:#C20, #C8:#C20, #C9:#C20)
#C24 = <core::String*, core::int*>{#C3:#C20, #C4:#C20, #C11:#C20, #C12:#C20)
#C25 = eval #C23 + const <dynamic, dynamic>{const core::String::fromEnvironment(#C1): #C20} + #C24
#C2 = eval const core::String::fromEnvironment(#C1)
#C3 = eval const <dynamic>[#C2]
#C4 = "bar"
#C5 = eval const core::String::fromEnvironment(#C4)
#C6 = eval const <dynamic>[#C5]
#C7 = "hello"
#C8 = "world"
#C9 = <core::String*>[#C7, #C8]
#C10 = eval #C3 + #C6 + #C9
#C11 = "A"
#C12 = "few"
#C13 = "strings"
#C14 = <core::String*>[#C11, #C12, #C13]
#C15 = eval const core::String::fromEnvironment(#C1)
#C16 = eval const <dynamic>[#C15]
#C17 = eval const core::String::fromEnvironment(#C4)
#C18 = eval const <dynamic>[#C17]
#C19 = "and"
#C20 = "more"
#C21 = <core::String*>[#C7, #C8, #C19, #C20]
#C22 = eval #C14 + #C16 + #C18 + #C21
#C23 = eval const core::String::fromEnvironment(#C1)
#C24 = eval const <dynamic>{#C23}
#C25 = <core::String*>{#C7, #C8}
#C26 = eval #C24 + #C25
#C27 = <core::String*>{#C11, #C12, #C13}
#C28 = eval const core::String::fromEnvironment(#C1)
#C29 = eval const <dynamic>{#C28}
#C30 = <core::String*>{#C7, #C8, #C19, #C20}
#C31 = eval #C27 + #C29 + #C30
#C32 = eval const core::String::fromEnvironment(#C1)
#C33 = 42
#C34 = eval const <dynamic, dynamic>{#C32: #C33}
#C35 = <core::String*, core::int*>{#C7:#C33, #C8:#C33)
#C36 = eval #C34 + #C35
#C37 = <core::String*, core::int*>{#C11:#C33, #C12:#C33, #C13:#C33)
#C38 = eval const core::String::fromEnvironment(#C1)
#C39 = eval const <dynamic, dynamic>{#C38: #C33}
#C40 = <core::String*, core::int*>{#C7:#C33, #C8:#C33, #C19:#C33, #C20:#C33)
#C41 = eval #C37 + #C39 + #C40
}
Extra constant evaluation status:
@@ -11,15 +11,20 @@ class Foo<T extends core::Object? = dynamic> extends core::Object /*hasConstCons
static method bar<T extends core::Object? = dynamic>(core::String o) → self::bar::T%
return o as{ForNonNullableByDefault} self::bar::T%;
static method main() → void {
const self::Foo<core::int> myValue = #C5;
const self::Foo<core::int> myValue = #C10;
}
constants {
#C1 = static-tearoff self::bar
#C2 = "baz"
#C3 = static-tearoff core::int::parse
#C4 = null
#C5 = eval self::Foo<core::int*>{_foo:(const core::bool::fromEnvironment(#C2) ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C3 : #C4) == null ?{(core::String) → core::int*} #C1<core::int*> : const core::bool::fromEnvironment(#C2) ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C3 : #C4}
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = static-tearoff core::int::parse
#C5 = null
#C6 = eval #C3 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C7 = eval #C6 == null
#C8 = eval #C1<core::int*>
#C9 = eval #C7 ?{(core::String) → core::int*} #C8 : #C6
#C10 = eval self::Foo<core::int*>{_foo:#C9}
}
@@ -11,15 +11,20 @@ class Foo<T extends core::Object? = dynamic> extends core::Object /*hasConstCons
static method bar<T extends core::Object? = dynamic>(core::String o) → self::bar::T%
return o as{ForNonNullableByDefault} self::bar::T%;
static method main() → void {
const self::Foo<core::int> myValue = #C5;
const self::Foo<core::int> myValue = #C10;
}
constants {
#C1 = static-tearoff self::bar
#C2 = "baz"
#C3 = static-tearoff core::int::parse
#C4 = null
#C5 = eval self::Foo<core::int*>{_foo:(const core::bool::fromEnvironment(#C2) ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C3 : #C4) == null ?{(core::String) → core::int*} #C1<core::int*> : const core::bool::fromEnvironment(#C2) ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C3 : #C4}
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = static-tearoff core::int::parse
#C5 = null
#C6 = eval #C3 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C7 = eval #C6 == null
#C8 = eval #C1<core::int*>
#C9 = eval #C7 ?{(core::String) → core::int*} #C8 : #C6
#C10 = eval self::Foo<core::int*>{_foo:#C9}
}
@@ -11,15 +11,20 @@ class Foo<T extends core::Object? = dynamic> extends core::Object /*hasConstCons
static method bar<T extends core::Object? = dynamic>(core::String o) → self::bar::T%
return o as{ForNonNullableByDefault} self::bar::T%;
static method main() → void {
const self::Foo<core::int> myValue = #C5;
const self::Foo<core::int> myValue = #C10;
}
constants {
#C1 = static-tearoff self::bar
#C2 = "baz"
#C3 = static-tearoff core::int::parse
#C4 = null
#C5 = eval self::Foo<core::int*>{_foo:(const core::bool::fromEnvironment(#C2) ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C3 : #C4) == null ?{(core::String) → core::int*} #C1<core::int*> : const core::bool::fromEnvironment(#C2) ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C3 : #C4}
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = static-tearoff core::int::parse
#C5 = null
#C6 = eval #C3 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C7 = eval #C6 == null
#C8 = eval #C1<core::int*>
#C9 = eval #C7 ?{(core::String) → core::int*} #C8 : #C6
#C10 = eval self::Foo<core::int*>{_foo:#C9}
}
Extra constant evaluation status:
@@ -9,9 +9,9 @@ class Foo<T extends core::Object? = dynamic> extends core::Object /*hasConstCons
;
}
static method main() → dynamic {
const self::Foo<core::int> foo = #C6;
core::print(#C6);
core::print(#C6);
const self::Foo<core::int> foo = #C14;
core::print(#C14);
core::print(#C14);
}
constants {
@@ -20,7 +20,15 @@ constants {
#C3 = 2
#C4 = <core::int*>[#C3]
#C5 = "foo"
#C6 = eval self::Foo<core::int*>{foo:(const core::bool::fromEnvironment(#C5) ?{core::List<dynamic>} const <dynamic>[#C1] : const <dynamic>[#C3]) is{ForNonNullableByDefault} core::List<core::int*> ?{core::List<core::int>} #C2 : #C4}
#C6 = eval const core::bool::fromEnvironment(#C5)
#C7 = eval const <dynamic>[#C1]
#C8 = eval #C7
#C9 = eval const <dynamic>[#C3]
#C10 = eval #C9
#C11 = eval #C6 ?{core::List<dynamic>} #C8 : #C10
#C12 = eval #C11 is{ForNonNullableByDefault} core::List<core::int*>
#C13 = eval #C12 ?{core::List<core::int>} #C2 : #C4
#C14 = eval self::Foo<core::int*>{foo:#C13}
}
@@ -9,9 +9,9 @@ class Foo<T extends core::Object? = dynamic> extends core::Object /*hasConstCons
;
}
static method main() → dynamic {
const self::Foo<core::int> foo = #C6;
core::print(#C6);
core::print(#C6);
const self::Foo<core::int> foo = #C14;
core::print(#C14);
core::print(#C14);
}
constants {
@@ -20,7 +20,15 @@ constants {
#C3 = 2
#C4 = <core::int*>[#C3]
#C5 = "foo"
#C6 = eval self::Foo<core::int*>{foo:(const core::bool::fromEnvironment(#C5) ?{core::List<dynamic>} const <dynamic>[#C1] : const <dynamic>[#C3]) is{ForNonNullableByDefault} core::List<core::int*> ?{core::List<core::int>} #C2 : #C4}
#C6 = eval const core::bool::fromEnvironment(#C5)
#C7 = eval const <dynamic>[#C1]
#C8 = eval #C7
#C9 = eval const <dynamic>[#C3]
#C10 = eval #C9
#C11 = eval #C6 ?{core::List<dynamic>} #C8 : #C10
#C12 = eval #C11 is{ForNonNullableByDefault} core::List<core::int*>
#C13 = eval #C12 ?{core::List<core::int>} #C2 : #C4
#C14 = eval self::Foo<core::int*>{foo:#C13}
}
@@ -9,9 +9,9 @@ class Foo<T extends core::Object? = dynamic> extends core::Object /*hasConstCons
;
}
static method main() → dynamic {
const self::Foo<core::int> foo = #C6;
core::print(#C7);
core::print(#C8);
const self::Foo<core::int> foo = #C14;
core::print(#C14);
core::print(#C14);
}
constants {
@@ -20,15 +20,21 @@ constants {
#C3 = 2
#C4 = <core::int*>[#C3]
#C5 = "foo"
#C6 = eval self::Foo<core::int*>{foo:(const core::bool::fromEnvironment(#C5) ?{core::List<dynamic>} const <dynamic>[#C1] : const <dynamic>[#C3]) is{ForNonNullableByDefault} core::List<core::int*> ?{core::List<core::int>} #C2 : #C4}
#C7 = eval self::Foo<core::int*>{foo:(const core::bool::fromEnvironment(#C5) ?{core::List<dynamic>} const <dynamic>[#C1] : const <dynamic>[#C3]) is{ForNonNullableByDefault} core::List<core::int*> ?{core::List<core::int>} #C2 : #C4}
#C8 = eval self::Foo<core::int*>{foo:(const core::bool::fromEnvironment(#C5) ?{core::List<dynamic>} const <dynamic>[#C1] : const <dynamic>[#C3]) is{ForNonNullableByDefault} core::List<core::int*> ?{core::List<core::int>} #C2 : #C4}
#C6 = eval const core::bool::fromEnvironment(#C5)
#C7 = eval const <dynamic>[#C1]
#C8 = eval #C7
#C9 = eval const <dynamic>[#C3]
#C10 = eval #C9
#C11 = eval #C6 ?{core::List<dynamic>} #C8 : #C10
#C12 = eval #C11 is{ForNonNullableByDefault} core::List<core::int*>
#C13 = eval #C12 ?{core::List<core::int>} #C2 : #C4
#C14 = eval self::Foo<core::int*>{foo:#C13}
}
Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_is.dart:11:30 -> InstanceConstant(const Foo<int*>{Foo.foo: const <int*>[2]})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_is.dart:11:30 -> InstanceConstant(const Foo<int*>{Foo.foo: const <int*>[2]})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_is.dart:11:30 -> InstanceConstant(const Foo<int*>{Foo.foo: const <int*>[2]})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_is.dart:12:9 -> InstanceConstant(const Foo<int*>{Foo.foo: const <int*>[2]})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_is.dart:13:9 -> InstanceConstant(const Foo<int*>{Foo.foo: const <int*>[2]})
Extra constant evaluation: evaluated: 8, effectively constant: 3
@@ -0,0 +1,93 @@
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
class Foo {
const Foo(
int Function(String)? a1,
int Function(String)? a2,
int Function(String)? a3,
int Function(String)? a4,
int Function(String)? a5,
int Function(String)? a6,
int Function(String)? a7,
int Function(String)? a8,
int Function(String)? a9,
int Function(String)? a10,
int Function(String)? a11,
int Function(String)? a12,
int Function(String)? a13,
int Function(String)? a14,
int Function(String)? a15,
int Function(String)? a16,
int Function(String)? a17,
int Function(String)? a18,
int Function(String)? a19,
int Function(String)? a20,
int Function(String)? a21,
int Function(String)? a22,
int Function(String)? a23,
int Function(String)? a24,
) : _foo = a1 ??
a2 ??
a3 ??
a4 ??
a5 ??
a6 ??
a7 ??
a8 ??
a9 ??
a10 ??
a11 ??
a12 ??
a13 ??
a14 ??
a15 ??
a16 ??
a17 ??
a18 ??
a19 ??
a20 ??
a21 ??
a22 ??
a23 ??
a24 ??
bar;
final int Function(String) _foo;
}
int bar(String o) => int.parse(o);
void main() {
const Foo myValue = Foo(
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
bool.fromEnvironment("baz") ? int.parse : null,
);
print(myValue);
print(myValue);
print(myValue);
print(myValue);
}
@@ -0,0 +1,56 @@
class Foo {
const Foo(
int Function(String)? a1,
int Function(String)? a2,
int Function(String)? a3,
int Function(String)? a4,
int Function(String)? a5,
int Function(String)? a6,
int Function(String)? a7,
int Function(String)? a8,
int Function(String)? a9,
int Function(String)? a10,
int Function(String)? a11,
int Function(String)? a12,
int Function(String)? a13,
int Function(String)? a14,
int Function(String)? a15,
int Function(String)? a16,
int Function(String)? a17,
int Function(String)? a18,
int Function(String)? a19,
int Function(String)? a20,
int Function(String)? a21,
int Function(String)? a22,
int Function(String)? a23,
int Function(String)? a24,
) : _foo = a1 ??
a2 ??
a3 ??
a4 ??
a5 ??
a6 ??
a7 ??
a8 ??
a9 ??
a10 ??
a11 ??
a12 ??
a13 ??
a14 ??
a15 ??
a16 ??
a17 ??
a18 ??
a19 ??
a20 ??
a21 ??
a22 ??
a23 ??
a24 ??
bar;
final int Function(String) _foo;
}
int bar(String o) => int.parse(o);
void main() {}
@@ -0,0 +1,56 @@
class Foo {
const Foo(
int Function(String)? a1,
int Function(String)? a2,
int Function(String)? a3,
int Function(String)? a4,
int Function(String)? a5,
int Function(String)? a6,
int Function(String)? a7,
int Function(String)? a8,
int Function(String)? a9,
int Function(String)? a10,
int Function(String)? a11,
int Function(String)? a12,
int Function(String)? a13,
int Function(String)? a14,
int Function(String)? a15,
int Function(String)? a16,
int Function(String)? a17,
int Function(String)? a18,
int Function(String)? a19,
int Function(String)? a20,
int Function(String)? a21,
int Function(String)? a22,
int Function(String)? a23,
int Function(String)? a24,
) : _foo = a1 ??
a2 ??
a3 ??
a4 ??
a5 ??
a6 ??
a7 ??
a8 ??
a9 ??
a10 ??
a11 ??
a12 ??
a13 ??
a14 ??
a15 ??
a16 ??
a17 ??
a18 ??
a19 ??
a20 ??
a21 ??
a22 ??
a23 ??
a24 ??
bar;
final int Function(String) _foo;
}
int bar(String o) => int.parse(o);
void main() {}
@@ -0,0 +1,129 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class Foo extends core::Object /*hasConstConstructor*/ {
final field (core::String) → core::int _foo;
const constructor •((core::String) →? core::int a1, (core::String) →? core::int a2, (core::String) →? core::int a3, (core::String) →? core::int a4, (core::String) →? core::int a5, (core::String) →? core::int a6, (core::String) →? core::int a7, (core::String) →? core::int a8, (core::String) →? core::int a9, (core::String) →? core::int a10, (core::String) →? core::int a11, (core::String) →? core::int a12, (core::String) →? core::int a13, (core::String) →? core::int a14, (core::String) →? core::int a15, (core::String) →? core::int a16, (core::String) →? core::int a17, (core::String) →? core::int a18, (core::String) →? core::int a19, (core::String) →? core::int a20, (core::String) →? core::int a21, (core::String) →? core::int a22, (core::String) →? core::int a23, (core::String) →? core::int a24) → self::Foo
: self::Foo::_foo = let final (core::String) →? core::int #t1 = let final (core::String) →? core::int #t2 = let final (core::String) →? core::int #t3 = let final (core::String) →? core::int #t4 = let final (core::String) →? core::int #t5 = let final (core::String) →? core::int #t6 = let final (core::String) →? core::int #t7 = let final (core::String) →? core::int #t8 = let final (core::String) →? core::int #t9 = let final (core::String) →? core::int #t10 = let final (core::String) →? core::int #t11 = let final (core::String) →? core::int #t12 = let final (core::String) →? core::int #t13 = let final (core::String) →? core::int #t14 = let final (core::String) →? core::int #t15 = let final (core::String) →? core::int #t16 = let final (core::String) →? core::int #t17 = let final (core::String) →? core::int #t18 = let final (core::String) →? core::int #t19 = let final (core::String) →? core::int #t20 = let final (core::String) →? core::int #t21 = let final (core::String) →? core::int #t22 = let final (core::String) →? core::int #t23 = let final (core::String) →? core::int #t24 = a1 in #t24 == null ?{(core::String) →? core::int} a2 : #t24{(core::String) → core::int} in #t23 == null ?{(core::String) →? core::int} a3 : #t23{(core::String) → core::int} in #t22 == null ?{(core::String) →? core::int} a4 : #t22{(core::String) → core::int} in #t21 == null ?{(core::String) →? core::int} a5 : #t21{(core::String) → core::int} in #t20 == null ?{(core::String) →? core::int} a6 : #t20{(core::String) → core::int} in #t19 == null ?{(core::String) →? core::int} a7 : #t19{(core::String) → core::int} in #t18 == null ?{(core::String) →? core::int} a8 : #t18{(core::String) → core::int} in #t17 == null ?{(core::String) →? core::int} a9 : #t17{(core::String) → core::int} in #t16 == null ?{(core::String) →? core::int} a10 : #t16{(core::String) → core::int} in #t15 == null ?{(core::String) →? core::int} a11 : #t15{(core::String) → core::int} in #t14 == null ?{(core::String) →? core::int} a12 : #t14{(core::String) → core::int} in #t13 == null ?{(core::String) →? core::int} a13 : #t13{(core::String) → core::int} in #t12 == null ?{(core::String) →? core::int} a14 : #t12{(core::String) → core::int} in #t11 == null ?{(core::String) →? core::int} a15 : #t11{(core::String) → core::int} in #t10 == null ?{(core::String) →? core::int} a16 : #t10{(core::String) → core::int} in #t9 == null ?{(core::String) →? core::int} a17 : #t9{(core::String) → core::int} in #t8 == null ?{(core::String) →? core::int} a18 : #t8{(core::String) → core::int} in #t7 == null ?{(core::String) →? core::int} a19 : #t7{(core::String) → core::int} in #t6 == null ?{(core::String) →? core::int} a20 : #t6{(core::String) → core::int} in #t5 == null ?{(core::String) →? core::int} a21 : #t5{(core::String) → core::int} in #t4 == null ?{(core::String) →? core::int} a22 : #t4{(core::String) → core::int} in #t3 == null ?{(core::String) →? core::int} a23 : #t3{(core::String) → core::int} in #t2 == null ?{(core::String) →? core::int} a24 : #t2{(core::String) → core::int} in #t1 == null ?{(core::String) → core::int} #C1 : #t1{(core::String) → core::int}, super core::Object::•()
;
}
static method bar(core::String o) → core::int
return core::int::parse(o);
static method main() → void {
const self::Foo myValue = #C101;
core::print(#C101);
core::print(#C101);
core::print(#C101);
core::print(#C101);
}
constants {
#C1 = static-tearoff self::bar
#C2 = "baz"
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = static-tearoff core::int::parse
#C5 = null
#C6 = eval #C3 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C7 = eval #C6 == null
#C8 = eval const core::bool::fromEnvironment(#C2)
#C9 = eval #C8 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C10 = eval #C7 ?{(core::String) →? core::int} #C9 : #C6
#C11 = eval #C10 == null
#C12 = eval const core::bool::fromEnvironment(#C2)
#C13 = eval #C12 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C14 = eval #C11 ?{(core::String) →? core::int} #C13 : #C10
#C15 = eval #C14 == null
#C16 = eval const core::bool::fromEnvironment(#C2)
#C17 = eval #C16 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C18 = eval #C15 ?{(core::String) →? core::int} #C17 : #C14
#C19 = eval #C18 == null
#C20 = eval const core::bool::fromEnvironment(#C2)
#C21 = eval #C20 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C22 = eval #C19 ?{(core::String) →? core::int} #C21 : #C18
#C23 = eval #C22 == null
#C24 = eval const core::bool::fromEnvironment(#C2)
#C25 = eval #C24 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C26 = eval #C23 ?{(core::String) →? core::int} #C25 : #C22
#C27 = eval #C26 == null
#C28 = eval const core::bool::fromEnvironment(#C2)
#C29 = eval #C28 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C30 = eval #C27 ?{(core::String) →? core::int} #C29 : #C26
#C31 = eval #C30 == null
#C32 = eval const core::bool::fromEnvironment(#C2)
#C33 = eval #C32 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C34 = eval #C31 ?{(core::String) →? core::int} #C33 : #C30
#C35 = eval #C34 == null
#C36 = eval const core::bool::fromEnvironment(#C2)
#C37 = eval #C36 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C38 = eval #C35 ?{(core::String) →? core::int} #C37 : #C34
#C39 = eval #C38 == null
#C40 = eval const core::bool::fromEnvironment(#C2)
#C41 = eval #C40 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C42 = eval #C39 ?{(core::String) →? core::int} #C41 : #C38
#C43 = eval #C42 == null
#C44 = eval const core::bool::fromEnvironment(#C2)
#C45 = eval #C44 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C46 = eval #C43 ?{(core::String) →? core::int} #C45 : #C42
#C47 = eval #C46 == null
#C48 = eval const core::bool::fromEnvironment(#C2)
#C49 = eval #C48 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C50 = eval #C47 ?{(core::String) →? core::int} #C49 : #C46
#C51 = eval #C50 == null
#C52 = eval const core::bool::fromEnvironment(#C2)
#C53 = eval #C52 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C54 = eval #C51 ?{(core::String) →? core::int} #C53 : #C50
#C55 = eval #C54 == null
#C56 = eval const core::bool::fromEnvironment(#C2)
#C57 = eval #C56 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C58 = eval #C55 ?{(core::String) →? core::int} #C57 : #C54
#C59 = eval #C58 == null
#C60 = eval const core::bool::fromEnvironment(#C2)
#C61 = eval #C60 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C62 = eval #C59 ?{(core::String) →? core::int} #C61 : #C58
#C63 = eval #C62 == null
#C64 = eval const core::bool::fromEnvironment(#C2)
#C65 = eval #C64 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C66 = eval #C63 ?{(core::String) →? core::int} #C65 : #C62
#C67 = eval #C66 == null
#C68 = eval const core::bool::fromEnvironment(#C2)
#C69 = eval #C68 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C70 = eval #C67 ?{(core::String) →? core::int} #C69 : #C66
#C71 = eval #C70 == null
#C72 = eval const core::bool::fromEnvironment(#C2)
#C73 = eval #C72 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C74 = eval #C71 ?{(core::String) →? core::int} #C73 : #C70
#C75 = eval #C74 == null
#C76 = eval const core::bool::fromEnvironment(#C2)
#C77 = eval #C76 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C78 = eval #C75 ?{(core::String) →? core::int} #C77 : #C74
#C79 = eval #C78 == null
#C80 = eval const core::bool::fromEnvironment(#C2)
#C81 = eval #C80 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C82 = eval #C79 ?{(core::String) →? core::int} #C81 : #C78
#C83 = eval #C82 == null
#C84 = eval const core::bool::fromEnvironment(#C2)
#C85 = eval #C84 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C86 = eval #C83 ?{(core::String) →? core::int} #C85 : #C82
#C87 = eval #C86 == null
#C88 = eval const core::bool::fromEnvironment(#C2)
#C89 = eval #C88 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C90 = eval #C87 ?{(core::String) →? core::int} #C89 : #C86
#C91 = eval #C90 == null
#C92 = eval const core::bool::fromEnvironment(#C2)
#C93 = eval #C92 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C94 = eval #C91 ?{(core::String) →? core::int} #C93 : #C90
#C95 = eval #C94 == null
#C96 = eval const core::bool::fromEnvironment(#C2)
#C97 = eval #C96 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C98 = eval #C95 ?{(core::String) →? core::int} #C97 : #C94
#C99 = eval #C98 == null
#C100 = eval #C99 ?{(core::String) → core::int} #C1 : #C98
#C101 = eval self::Foo{_foo:#C100}
}
Constructor coverage from constants:
org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:
- Foo. (from org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:6:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
@@ -0,0 +1,129 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class Foo extends core::Object /*hasConstConstructor*/ {
final field (core::String) → core::int _foo;
const constructor •((core::String) →? core::int a1, (core::String) →? core::int a2, (core::String) →? core::int a3, (core::String) →? core::int a4, (core::String) →? core::int a5, (core::String) →? core::int a6, (core::String) →? core::int a7, (core::String) →? core::int a8, (core::String) →? core::int a9, (core::String) →? core::int a10, (core::String) →? core::int a11, (core::String) →? core::int a12, (core::String) →? core::int a13, (core::String) →? core::int a14, (core::String) →? core::int a15, (core::String) →? core::int a16, (core::String) →? core::int a17, (core::String) →? core::int a18, (core::String) →? core::int a19, (core::String) →? core::int a20, (core::String) →? core::int a21, (core::String) →? core::int a22, (core::String) →? core::int a23, (core::String) →? core::int a24) → self::Foo
: self::Foo::_foo = let final (core::String) →? core::int #t1 = let final (core::String) →? core::int #t2 = let final (core::String) →? core::int #t3 = let final (core::String) →? core::int #t4 = let final (core::String) →? core::int #t5 = let final (core::String) →? core::int #t6 = let final (core::String) →? core::int #t7 = let final (core::String) →? core::int #t8 = let final (core::String) →? core::int #t9 = let final (core::String) →? core::int #t10 = let final (core::String) →? core::int #t11 = let final (core::String) →? core::int #t12 = let final (core::String) →? core::int #t13 = let final (core::String) →? core::int #t14 = let final (core::String) →? core::int #t15 = let final (core::String) →? core::int #t16 = let final (core::String) →? core::int #t17 = let final (core::String) →? core::int #t18 = let final (core::String) →? core::int #t19 = let final (core::String) →? core::int #t20 = let final (core::String) →? core::int #t21 = let final (core::String) →? core::int #t22 = let final (core::String) →? core::int #t23 = let final (core::String) →? core::int #t24 = a1 in #t24 == null ?{(core::String) →? core::int} a2 : #t24{(core::String) → core::int} in #t23 == null ?{(core::String) →? core::int} a3 : #t23{(core::String) → core::int} in #t22 == null ?{(core::String) →? core::int} a4 : #t22{(core::String) → core::int} in #t21 == null ?{(core::String) →? core::int} a5 : #t21{(core::String) → core::int} in #t20 == null ?{(core::String) →? core::int} a6 : #t20{(core::String) → core::int} in #t19 == null ?{(core::String) →? core::int} a7 : #t19{(core::String) → core::int} in #t18 == null ?{(core::String) →? core::int} a8 : #t18{(core::String) → core::int} in #t17 == null ?{(core::String) →? core::int} a9 : #t17{(core::String) → core::int} in #t16 == null ?{(core::String) →? core::int} a10 : #t16{(core::String) → core::int} in #t15 == null ?{(core::String) →? core::int} a11 : #t15{(core::String) → core::int} in #t14 == null ?{(core::String) →? core::int} a12 : #t14{(core::String) → core::int} in #t13 == null ?{(core::String) →? core::int} a13 : #t13{(core::String) → core::int} in #t12 == null ?{(core::String) →? core::int} a14 : #t12{(core::String) → core::int} in #t11 == null ?{(core::String) →? core::int} a15 : #t11{(core::String) → core::int} in #t10 == null ?{(core::String) →? core::int} a16 : #t10{(core::String) → core::int} in #t9 == null ?{(core::String) →? core::int} a17 : #t9{(core::String) → core::int} in #t8 == null ?{(core::String) →? core::int} a18 : #t8{(core::String) → core::int} in #t7 == null ?{(core::String) →? core::int} a19 : #t7{(core::String) → core::int} in #t6 == null ?{(core::String) →? core::int} a20 : #t6{(core::String) → core::int} in #t5 == null ?{(core::String) →? core::int} a21 : #t5{(core::String) → core::int} in #t4 == null ?{(core::String) →? core::int} a22 : #t4{(core::String) → core::int} in #t3 == null ?{(core::String) →? core::int} a23 : #t3{(core::String) → core::int} in #t2 == null ?{(core::String) →? core::int} a24 : #t2{(core::String) → core::int} in #t1 == null ?{(core::String) → core::int} #C1 : #t1{(core::String) → core::int}, super core::Object::•()
;
}
static method bar(core::String o) → core::int
return core::int::parse(o);
static method main() → void {
const self::Foo myValue = #C101;
core::print(#C101);
core::print(#C101);
core::print(#C101);
core::print(#C101);
}
constants {
#C1 = static-tearoff self::bar
#C2 = "baz"
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = static-tearoff core::int::parse
#C5 = null
#C6 = eval #C3 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C7 = eval #C6 == null
#C8 = eval const core::bool::fromEnvironment(#C2)
#C9 = eval #C8 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C10 = eval #C7 ?{(core::String) →? core::int} #C9 : #C6
#C11 = eval #C10 == null
#C12 = eval const core::bool::fromEnvironment(#C2)
#C13 = eval #C12 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C14 = eval #C11 ?{(core::String) →? core::int} #C13 : #C10
#C15 = eval #C14 == null
#C16 = eval const core::bool::fromEnvironment(#C2)
#C17 = eval #C16 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C18 = eval #C15 ?{(core::String) →? core::int} #C17 : #C14
#C19 = eval #C18 == null
#C20 = eval const core::bool::fromEnvironment(#C2)
#C21 = eval #C20 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C22 = eval #C19 ?{(core::String) →? core::int} #C21 : #C18
#C23 = eval #C22 == null
#C24 = eval const core::bool::fromEnvironment(#C2)
#C25 = eval #C24 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C26 = eval #C23 ?{(core::String) →? core::int} #C25 : #C22
#C27 = eval #C26 == null
#C28 = eval const core::bool::fromEnvironment(#C2)
#C29 = eval #C28 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C30 = eval #C27 ?{(core::String) →? core::int} #C29 : #C26
#C31 = eval #C30 == null
#C32 = eval const core::bool::fromEnvironment(#C2)
#C33 = eval #C32 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C34 = eval #C31 ?{(core::String) →? core::int} #C33 : #C30
#C35 = eval #C34 == null
#C36 = eval const core::bool::fromEnvironment(#C2)
#C37 = eval #C36 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C38 = eval #C35 ?{(core::String) →? core::int} #C37 : #C34
#C39 = eval #C38 == null
#C40 = eval const core::bool::fromEnvironment(#C2)
#C41 = eval #C40 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C42 = eval #C39 ?{(core::String) →? core::int} #C41 : #C38
#C43 = eval #C42 == null
#C44 = eval const core::bool::fromEnvironment(#C2)
#C45 = eval #C44 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C46 = eval #C43 ?{(core::String) →? core::int} #C45 : #C42
#C47 = eval #C46 == null
#C48 = eval const core::bool::fromEnvironment(#C2)
#C49 = eval #C48 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C50 = eval #C47 ?{(core::String) →? core::int} #C49 : #C46
#C51 = eval #C50 == null
#C52 = eval const core::bool::fromEnvironment(#C2)
#C53 = eval #C52 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C54 = eval #C51 ?{(core::String) →? core::int} #C53 : #C50
#C55 = eval #C54 == null
#C56 = eval const core::bool::fromEnvironment(#C2)
#C57 = eval #C56 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C58 = eval #C55 ?{(core::String) →? core::int} #C57 : #C54
#C59 = eval #C58 == null
#C60 = eval const core::bool::fromEnvironment(#C2)
#C61 = eval #C60 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C62 = eval #C59 ?{(core::String) →? core::int} #C61 : #C58
#C63 = eval #C62 == null
#C64 = eval const core::bool::fromEnvironment(#C2)
#C65 = eval #C64 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C66 = eval #C63 ?{(core::String) →? core::int} #C65 : #C62
#C67 = eval #C66 == null
#C68 = eval const core::bool::fromEnvironment(#C2)
#C69 = eval #C68 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C70 = eval #C67 ?{(core::String) →? core::int} #C69 : #C66
#C71 = eval #C70 == null
#C72 = eval const core::bool::fromEnvironment(#C2)
#C73 = eval #C72 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C74 = eval #C71 ?{(core::String) →? core::int} #C73 : #C70
#C75 = eval #C74 == null
#C76 = eval const core::bool::fromEnvironment(#C2)
#C77 = eval #C76 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C78 = eval #C75 ?{(core::String) →? core::int} #C77 : #C74
#C79 = eval #C78 == null
#C80 = eval const core::bool::fromEnvironment(#C2)
#C81 = eval #C80 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C82 = eval #C79 ?{(core::String) →? core::int} #C81 : #C78
#C83 = eval #C82 == null
#C84 = eval const core::bool::fromEnvironment(#C2)
#C85 = eval #C84 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C86 = eval #C83 ?{(core::String) →? core::int} #C85 : #C82
#C87 = eval #C86 == null
#C88 = eval const core::bool::fromEnvironment(#C2)
#C89 = eval #C88 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C90 = eval #C87 ?{(core::String) →? core::int} #C89 : #C86
#C91 = eval #C90 == null
#C92 = eval const core::bool::fromEnvironment(#C2)
#C93 = eval #C92 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C94 = eval #C91 ?{(core::String) →? core::int} #C93 : #C90
#C95 = eval #C94 == null
#C96 = eval const core::bool::fromEnvironment(#C2)
#C97 = eval #C96 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C98 = eval #C95 ?{(core::String) →? core::int} #C97 : #C94
#C99 = eval #C98 == null
#C100 = eval #C99 ?{(core::String) → core::int} #C1 : #C98
#C101 = eval self::Foo{_foo:#C100}
}
Constructor coverage from constants:
org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:
- Foo. (from org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:6:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
@@ -0,0 +1,19 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class Foo extends core::Object /*hasConstConstructor*/ {
final field (core::String) → core::int _foo;
const constructor •((core::String) →? core::int a1, (core::String) →? core::int a2, (core::String) →? core::int a3, (core::String) →? core::int a4, (core::String) →? core::int a5, (core::String) →? core::int a6, (core::String) →? core::int a7, (core::String) →? core::int a8, (core::String) →? core::int a9, (core::String) →? core::int a10, (core::String) →? core::int a11, (core::String) →? core::int a12, (core::String) →? core::int a13, (core::String) →? core::int a14, (core::String) →? core::int a15, (core::String) →? core::int a16, (core::String) →? core::int a17, (core::String) →? core::int a18, (core::String) →? core::int a19, (core::String) →? core::int a20, (core::String) →? core::int a21, (core::String) →? core::int a22, (core::String) →? core::int a23, (core::String) →? core::int a24) → self::Foo
: self::Foo::_foo = let final (core::String) →? core::int #t1 = let final (core::String) →? core::int #t2 = let final (core::String) →? core::int #t3 = let final (core::String) →? core::int #t4 = let final (core::String) →? core::int #t5 = let final (core::String) →? core::int #t6 = let final (core::String) →? core::int #t7 = let final (core::String) →? core::int #t8 = let final (core::String) →? core::int #t9 = let final (core::String) →? core::int #t10 = let final (core::String) →? core::int #t11 = let final (core::String) →? core::int #t12 = let final (core::String) →? core::int #t13 = let final (core::String) →? core::int #t14 = let final (core::String) →? core::int #t15 = let final (core::String) →? core::int #t16 = let final (core::String) →? core::int #t17 = let final (core::String) →? core::int #t18 = let final (core::String) →? core::int #t19 = let final (core::String) →? core::int #t20 = let final (core::String) →? core::int #t21 = let final (core::String) →? core::int #t22 = let final (core::String) →? core::int #t23 = let final (core::String) →? core::int #t24 = a1 in #t24 == null ?{(core::String) →? core::int} a2 : #t24{(core::String) → core::int} in #t23 == null ?{(core::String) →? core::int} a3 : #t23{(core::String) → core::int} in #t22 == null ?{(core::String) →? core::int} a4 : #t22{(core::String) → core::int} in #t21 == null ?{(core::String) →? core::int} a5 : #t21{(core::String) → core::int} in #t20 == null ?{(core::String) →? core::int} a6 : #t20{(core::String) → core::int} in #t19 == null ?{(core::String) →? core::int} a7 : #t19{(core::String) → core::int} in #t18 == null ?{(core::String) →? core::int} a8 : #t18{(core::String) → core::int} in #t17 == null ?{(core::String) →? core::int} a9 : #t17{(core::String) → core::int} in #t16 == null ?{(core::String) →? core::int} a10 : #t16{(core::String) → core::int} in #t15 == null ?{(core::String) →? core::int} a11 : #t15{(core::String) → core::int} in #t14 == null ?{(core::String) →? core::int} a12 : #t14{(core::String) → core::int} in #t13 == null ?{(core::String) →? core::int} a13 : #t13{(core::String) → core::int} in #t12 == null ?{(core::String) →? core::int} a14 : #t12{(core::String) → core::int} in #t11 == null ?{(core::String) →? core::int} a15 : #t11{(core::String) → core::int} in #t10 == null ?{(core::String) →? core::int} a16 : #t10{(core::String) → core::int} in #t9 == null ?{(core::String) →? core::int} a17 : #t9{(core::String) → core::int} in #t8 == null ?{(core::String) →? core::int} a18 : #t8{(core::String) → core::int} in #t7 == null ?{(core::String) →? core::int} a19 : #t7{(core::String) → core::int} in #t6 == null ?{(core::String) →? core::int} a20 : #t6{(core::String) → core::int} in #t5 == null ?{(core::String) →? core::int} a21 : #t5{(core::String) → core::int} in #t4 == null ?{(core::String) →? core::int} a22 : #t4{(core::String) → core::int} in #t3 == null ?{(core::String) →? core::int} a23 : #t3{(core::String) → core::int} in #t2 == null ?{(core::String) →? core::int} a24 : #t2{(core::String) → core::int} in #t1 == null ?{(core::String) → core::int} self::bar : #t1{(core::String) → core::int}, super core::Object::•()
;
}
static method bar(core::String o) → core::int
;
static method main() → void
;
Extra constant evaluation status:
Evaluated: StaticTearOff @ org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:55:13 -> StaticTearOffConstant(bar)
Extra constant evaluation: evaluated: 145, effectively constant: 1
@@ -0,0 +1,137 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
class Foo extends core::Object /*hasConstConstructor*/ {
final field (core::String) → core::int _foo;
const constructor •((core::String) →? core::int a1, (core::String) →? core::int a2, (core::String) →? core::int a3, (core::String) →? core::int a4, (core::String) →? core::int a5, (core::String) →? core::int a6, (core::String) →? core::int a7, (core::String) →? core::int a8, (core::String) →? core::int a9, (core::String) →? core::int a10, (core::String) →? core::int a11, (core::String) →? core::int a12, (core::String) →? core::int a13, (core::String) →? core::int a14, (core::String) →? core::int a15, (core::String) →? core::int a16, (core::String) →? core::int a17, (core::String) →? core::int a18, (core::String) →? core::int a19, (core::String) →? core::int a20, (core::String) →? core::int a21, (core::String) →? core::int a22, (core::String) →? core::int a23, (core::String) →? core::int a24) → self::Foo
: self::Foo::_foo = let final (core::String) →? core::int #t1 = let final (core::String) →? core::int #t2 = let final (core::String) →? core::int #t3 = let final (core::String) →? core::int #t4 = let final (core::String) →? core::int #t5 = let final (core::String) →? core::int #t6 = let final (core::String) →? core::int #t7 = let final (core::String) →? core::int #t8 = let final (core::String) →? core::int #t9 = let final (core::String) →? core::int #t10 = let final (core::String) →? core::int #t11 = let final (core::String) →? core::int #t12 = let final (core::String) →? core::int #t13 = let final (core::String) →? core::int #t14 = let final (core::String) →? core::int #t15 = let final (core::String) →? core::int #t16 = let final (core::String) →? core::int #t17 = let final (core::String) →? core::int #t18 = let final (core::String) →? core::int #t19 = let final (core::String) →? core::int #t20 = let final (core::String) →? core::int #t21 = let final (core::String) →? core::int #t22 = let final (core::String) →? core::int #t23 = let final (core::String) →? core::int #t24 = a1 in #t24 == null ?{(core::String) →? core::int} a2 : #t24{(core::String) → core::int} in #t23 == null ?{(core::String) →? core::int} a3 : #t23{(core::String) → core::int} in #t22 == null ?{(core::String) →? core::int} a4 : #t22{(core::String) → core::int} in #t21 == null ?{(core::String) →? core::int} a5 : #t21{(core::String) → core::int} in #t20 == null ?{(core::String) →? core::int} a6 : #t20{(core::String) → core::int} in #t19 == null ?{(core::String) →? core::int} a7 : #t19{(core::String) → core::int} in #t18 == null ?{(core::String) →? core::int} a8 : #t18{(core::String) → core::int} in #t17 == null ?{(core::String) →? core::int} a9 : #t17{(core::String) → core::int} in #t16 == null ?{(core::String) →? core::int} a10 : #t16{(core::String) → core::int} in #t15 == null ?{(core::String) →? core::int} a11 : #t15{(core::String) → core::int} in #t14 == null ?{(core::String) →? core::int} a12 : #t14{(core::String) → core::int} in #t13 == null ?{(core::String) →? core::int} a13 : #t13{(core::String) → core::int} in #t12 == null ?{(core::String) →? core::int} a14 : #t12{(core::String) → core::int} in #t11 == null ?{(core::String) →? core::int} a15 : #t11{(core::String) → core::int} in #t10 == null ?{(core::String) →? core::int} a16 : #t10{(core::String) → core::int} in #t9 == null ?{(core::String) →? core::int} a17 : #t9{(core::String) → core::int} in #t8 == null ?{(core::String) →? core::int} a18 : #t8{(core::String) → core::int} in #t7 == null ?{(core::String) →? core::int} a19 : #t7{(core::String) → core::int} in #t6 == null ?{(core::String) →? core::int} a20 : #t6{(core::String) → core::int} in #t5 == null ?{(core::String) →? core::int} a21 : #t5{(core::String) → core::int} in #t4 == null ?{(core::String) →? core::int} a22 : #t4{(core::String) → core::int} in #t3 == null ?{(core::String) →? core::int} a23 : #t3{(core::String) → core::int} in #t2 == null ?{(core::String) →? core::int} a24 : #t2{(core::String) → core::int} in #t1 == null ?{(core::String) → core::int} #C1 : #t1{(core::String) → core::int}, super core::Object::•()
;
}
static method bar(core::String o) → core::int
return core::int::parse(o);
static method main() → void {
const self::Foo myValue = #C101;
core::print(#C101);
core::print(#C101);
core::print(#C101);
core::print(#C101);
}
constants {
#C1 = static-tearoff self::bar
#C2 = "baz"
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = static-tearoff core::int::parse
#C5 = null
#C6 = eval #C3 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C7 = eval #C6 == null
#C8 = eval const core::bool::fromEnvironment(#C2)
#C9 = eval #C8 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C10 = eval #C7 ?{(core::String) →? core::int} #C9 : #C6
#C11 = eval #C10 == null
#C12 = eval const core::bool::fromEnvironment(#C2)
#C13 = eval #C12 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C14 = eval #C11 ?{(core::String) →? core::int} #C13 : #C10
#C15 = eval #C14 == null
#C16 = eval const core::bool::fromEnvironment(#C2)
#C17 = eval #C16 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C18 = eval #C15 ?{(core::String) →? core::int} #C17 : #C14
#C19 = eval #C18 == null
#C20 = eval const core::bool::fromEnvironment(#C2)
#C21 = eval #C20 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C22 = eval #C19 ?{(core::String) →? core::int} #C21 : #C18
#C23 = eval #C22 == null
#C24 = eval const core::bool::fromEnvironment(#C2)
#C25 = eval #C24 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C26 = eval #C23 ?{(core::String) →? core::int} #C25 : #C22
#C27 = eval #C26 == null
#C28 = eval const core::bool::fromEnvironment(#C2)
#C29 = eval #C28 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C30 = eval #C27 ?{(core::String) →? core::int} #C29 : #C26
#C31 = eval #C30 == null
#C32 = eval const core::bool::fromEnvironment(#C2)
#C33 = eval #C32 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C34 = eval #C31 ?{(core::String) →? core::int} #C33 : #C30
#C35 = eval #C34 == null
#C36 = eval const core::bool::fromEnvironment(#C2)
#C37 = eval #C36 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C38 = eval #C35 ?{(core::String) →? core::int} #C37 : #C34
#C39 = eval #C38 == null
#C40 = eval const core::bool::fromEnvironment(#C2)
#C41 = eval #C40 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C42 = eval #C39 ?{(core::String) →? core::int} #C41 : #C38
#C43 = eval #C42 == null
#C44 = eval const core::bool::fromEnvironment(#C2)
#C45 = eval #C44 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C46 = eval #C43 ?{(core::String) →? core::int} #C45 : #C42
#C47 = eval #C46 == null
#C48 = eval const core::bool::fromEnvironment(#C2)
#C49 = eval #C48 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C50 = eval #C47 ?{(core::String) →? core::int} #C49 : #C46
#C51 = eval #C50 == null
#C52 = eval const core::bool::fromEnvironment(#C2)
#C53 = eval #C52 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C54 = eval #C51 ?{(core::String) →? core::int} #C53 : #C50
#C55 = eval #C54 == null
#C56 = eval const core::bool::fromEnvironment(#C2)
#C57 = eval #C56 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C58 = eval #C55 ?{(core::String) →? core::int} #C57 : #C54
#C59 = eval #C58 == null
#C60 = eval const core::bool::fromEnvironment(#C2)
#C61 = eval #C60 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C62 = eval #C59 ?{(core::String) →? core::int} #C61 : #C58
#C63 = eval #C62 == null
#C64 = eval const core::bool::fromEnvironment(#C2)
#C65 = eval #C64 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C66 = eval #C63 ?{(core::String) →? core::int} #C65 : #C62
#C67 = eval #C66 == null
#C68 = eval const core::bool::fromEnvironment(#C2)
#C69 = eval #C68 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C70 = eval #C67 ?{(core::String) →? core::int} #C69 : #C66
#C71 = eval #C70 == null
#C72 = eval const core::bool::fromEnvironment(#C2)
#C73 = eval #C72 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C74 = eval #C71 ?{(core::String) →? core::int} #C73 : #C70
#C75 = eval #C74 == null
#C76 = eval const core::bool::fromEnvironment(#C2)
#C77 = eval #C76 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C78 = eval #C75 ?{(core::String) →? core::int} #C77 : #C74
#C79 = eval #C78 == null
#C80 = eval const core::bool::fromEnvironment(#C2)
#C81 = eval #C80 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C82 = eval #C79 ?{(core::String) →? core::int} #C81 : #C78
#C83 = eval #C82 == null
#C84 = eval const core::bool::fromEnvironment(#C2)
#C85 = eval #C84 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C86 = eval #C83 ?{(core::String) →? core::int} #C85 : #C82
#C87 = eval #C86 == null
#C88 = eval const core::bool::fromEnvironment(#C2)
#C89 = eval #C88 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C90 = eval #C87 ?{(core::String) →? core::int} #C89 : #C86
#C91 = eval #C90 == null
#C92 = eval const core::bool::fromEnvironment(#C2)
#C93 = eval #C92 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C94 = eval #C91 ?{(core::String) →? core::int} #C93 : #C90
#C95 = eval #C94 == null
#C96 = eval const core::bool::fromEnvironment(#C2)
#C97 = eval #C96 ?{(core::String, {onError: (core::String) →? core::int, radix: core::int?}) →? core::int} #C4 : #C5
#C98 = eval #C95 ?{(core::String) →? core::int} #C97 : #C94
#C99 = eval #C98 == null
#C100 = eval #C99 ?{(core::String) → core::int} #C1 : #C98
#C101 = eval self::Foo{_foo:#C100}
}
Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:62:23 -> InstanceConstant(const Foo{Foo._foo: bar})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:89:9 -> InstanceConstant(const Foo{Foo._foo: bar})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:90:9 -> InstanceConstant(const Foo{Foo._foo: bar})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:91:9 -> InstanceConstant(const Foo{Foo._foo: bar})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:92:9 -> InstanceConstant(const Foo{Foo._foo: bar})
Extra constant evaluation: evaluated: 155, effectively constant: 5
Constructor coverage from constants:
org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:
- Foo. (from org-dartlang-testcase:///issue_49245_variation_potential_exponential_blowup.dart:6:9)
- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
@@ -2,57 +2,57 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::String> original = #C11;
static const field core::List<core::String> copy1 = #C11;
static const field core::List<core::String> copy2 = #C11;
static const field core::List<core::String> copy3 = #C11;
static const field core::List<core::String> copy4 = #C11;
static const field core::List<core::String> copy5 = #C11;
static const field core::List<core::String> copy6 = #C11;
static const field core::List<core::String> copy7 = #C11;
static const field core::List<core::String> copy8 = #C11;
static const field core::List<core::String> copy9 = #C11;
static const field core::List<core::String> copy10 = #C11;
static const field core::List<core::String> copy11 = #C11;
static const field core::List<core::String> copy12 = #C11;
static const field core::List<core::String> copy13 = #C11;
static const field core::List<core::String> copy14 = #C11;
static const field core::List<core::String> copy15 = #C11;
static const field core::List<core::String> copy16 = #C11;
static const field core::List<core::String> copy17 = #C11;
static const field core::List<core::String> copy18 = #C11;
static const field core::List<core::String> copy19 = #C11;
static const field core::List<core::String> copy20 = #C11;
static const field core::List<core::String> copy21 = #C11;
static const field core::List<core::String> copy22 = #C11;
static const field core::List<core::String> copy23 = #C11;
static const field core::List<core::String> copy24 = #C11;
static const field core::List<core::String> copy25 = #C11;
static const field core::List<core::String> copy26 = #C11;
static const field core::List<core::String> copy27 = #C11;
static const field core::List<core::String> copy28 = #C11;
static const field core::List<core::String> copy29 = #C11;
static const field core::List<core::String> copy30 = #C11;
static const field core::List<core::String> copy31 = #C11;
static const field core::List<core::String> copy32 = #C11;
static const field core::List<core::String> copy33 = #C11;
static const field core::List<core::String> copy34 = #C11;
static const field core::List<core::String> copy35 = #C11;
static const field core::List<core::String> copy36 = #C11;
static const field core::List<core::String> copy37 = #C11;
static const field core::List<core::String> copy38 = #C11;
static const field core::List<core::String> copy39 = #C11;
static const field core::List<core::String> copy40 = #C11;
static const field core::List<core::String> copy41 = #C11;
static const field core::List<core::String> copy42 = #C11;
static const field core::List<core::String> copy43 = #C11;
static const field core::List<core::String> copy44 = #C11;
static const field core::List<core::String> copy45 = #C11;
static const field core::List<core::String> copy46 = #C11;
static const field core::List<core::String> copy47 = #C11;
static const field core::List<core::String> copy48 = #C11;
static const field core::List<core::String> copy49 = #C11;
static const field core::List<core::String> copy50 = #C11;
static const field core::List<core::String> original = #C13;
static const field core::List<core::String> copy1 = #C13;
static const field core::List<core::String> copy2 = #C13;
static const field core::List<core::String> copy3 = #C13;
static const field core::List<core::String> copy4 = #C13;
static const field core::List<core::String> copy5 = #C13;
static const field core::List<core::String> copy6 = #C13;
static const field core::List<core::String> copy7 = #C13;
static const field core::List<core::String> copy8 = #C13;
static const field core::List<core::String> copy9 = #C13;
static const field core::List<core::String> copy10 = #C13;
static const field core::List<core::String> copy11 = #C13;
static const field core::List<core::String> copy12 = #C13;
static const field core::List<core::String> copy13 = #C13;
static const field core::List<core::String> copy14 = #C13;
static const field core::List<core::String> copy15 = #C13;
static const field core::List<core::String> copy16 = #C13;
static const field core::List<core::String> copy17 = #C13;
static const field core::List<core::String> copy18 = #C13;
static const field core::List<core::String> copy19 = #C13;
static const field core::List<core::String> copy20 = #C13;
static const field core::List<core::String> copy21 = #C13;
static const field core::List<core::String> copy22 = #C13;
static const field core::List<core::String> copy23 = #C13;
static const field core::List<core::String> copy24 = #C13;
static const field core::List<core::String> copy25 = #C13;
static const field core::List<core::String> copy26 = #C13;
static const field core::List<core::String> copy27 = #C13;
static const field core::List<core::String> copy28 = #C13;
static const field core::List<core::String> copy29 = #C13;
static const field core::List<core::String> copy30 = #C13;
static const field core::List<core::String> copy31 = #C13;
static const field core::List<core::String> copy32 = #C13;
static const field core::List<core::String> copy33 = #C13;
static const field core::List<core::String> copy34 = #C13;
static const field core::List<core::String> copy35 = #C13;
static const field core::List<core::String> copy36 = #C13;
static const field core::List<core::String> copy37 = #C13;
static const field core::List<core::String> copy38 = #C13;
static const field core::List<core::String> copy39 = #C13;
static const field core::List<core::String> copy40 = #C13;
static const field core::List<core::String> copy41 = #C13;
static const field core::List<core::String> copy42 = #C13;
static const field core::List<core::String> copy43 = #C13;
static const field core::List<core::String> copy44 = #C13;
static const field core::List<core::String> copy45 = #C13;
static const field core::List<core::String> copy46 = #C13;
static const field core::List<core::String> copy47 = #C13;
static const field core::List<core::String> copy48 = #C13;
static const field core::List<core::String> copy49 = #C13;
static const field core::List<core::String> copy50 = #C13;
constants {
#C1 = "lots"
@@ -60,10 +60,12 @@ constants {
#C3 = "strings"
#C4 = <core::String*>[#C1, #C2, #C3]
#C5 = "original"
#C6 = "that"
#C7 = "are"
#C8 = "already"
#C9 = "constants"
#C10 = <core::String*>[#C6, #C7, #C8, #C9]
#C11 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + #C10
#C6 = eval const core::String::fromEnvironment(#C5)
#C7 = eval const <dynamic>[#C6]
#C8 = "that"
#C9 = "are"
#C10 = "already"
#C11 = "constants"
#C12 = <core::String*>[#C8, #C9, #C10, #C11]
#C13 = eval #C4 + #C7 + #C12
}
@@ -2,57 +2,57 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::String> original = #C11;
static const field core::List<core::String> copy1 = #C11;
static const field core::List<core::String> copy2 = #C11;
static const field core::List<core::String> copy3 = #C11;
static const field core::List<core::String> copy4 = #C11;
static const field core::List<core::String> copy5 = #C11;
static const field core::List<core::String> copy6 = #C11;
static const field core::List<core::String> copy7 = #C11;
static const field core::List<core::String> copy8 = #C11;
static const field core::List<core::String> copy9 = #C11;
static const field core::List<core::String> copy10 = #C11;
static const field core::List<core::String> copy11 = #C11;
static const field core::List<core::String> copy12 = #C11;
static const field core::List<core::String> copy13 = #C11;
static const field core::List<core::String> copy14 = #C11;
static const field core::List<core::String> copy15 = #C11;
static const field core::List<core::String> copy16 = #C11;
static const field core::List<core::String> copy17 = #C11;
static const field core::List<core::String> copy18 = #C11;
static const field core::List<core::String> copy19 = #C11;
static const field core::List<core::String> copy20 = #C11;
static const field core::List<core::String> copy21 = #C11;
static const field core::List<core::String> copy22 = #C11;
static const field core::List<core::String> copy23 = #C11;
static const field core::List<core::String> copy24 = #C11;
static const field core::List<core::String> copy25 = #C11;
static const field core::List<core::String> copy26 = #C11;
static const field core::List<core::String> copy27 = #C11;
static const field core::List<core::String> copy28 = #C11;
static const field core::List<core::String> copy29 = #C11;
static const field core::List<core::String> copy30 = #C11;
static const field core::List<core::String> copy31 = #C11;
static const field core::List<core::String> copy32 = #C11;
static const field core::List<core::String> copy33 = #C11;
static const field core::List<core::String> copy34 = #C11;
static const field core::List<core::String> copy35 = #C11;
static const field core::List<core::String> copy36 = #C11;
static const field core::List<core::String> copy37 = #C11;
static const field core::List<core::String> copy38 = #C11;
static const field core::List<core::String> copy39 = #C11;
static const field core::List<core::String> copy40 = #C11;
static const field core::List<core::String> copy41 = #C11;
static const field core::List<core::String> copy42 = #C11;
static const field core::List<core::String> copy43 = #C11;
static const field core::List<core::String> copy44 = #C11;
static const field core::List<core::String> copy45 = #C11;
static const field core::List<core::String> copy46 = #C11;
static const field core::List<core::String> copy47 = #C11;
static const field core::List<core::String> copy48 = #C11;
static const field core::List<core::String> copy49 = #C11;
static const field core::List<core::String> copy50 = #C11;
static const field core::List<core::String> original = #C13;
static const field core::List<core::String> copy1 = #C13;
static const field core::List<core::String> copy2 = #C13;
static const field core::List<core::String> copy3 = #C13;
static const field core::List<core::String> copy4 = #C13;
static const field core::List<core::String> copy5 = #C13;
static const field core::List<core::String> copy6 = #C13;
static const field core::List<core::String> copy7 = #C13;
static const field core::List<core::String> copy8 = #C13;
static const field core::List<core::String> copy9 = #C13;
static const field core::List<core::String> copy10 = #C13;
static const field core::List<core::String> copy11 = #C13;
static const field core::List<core::String> copy12 = #C13;
static const field core::List<core::String> copy13 = #C13;
static const field core::List<core::String> copy14 = #C13;
static const field core::List<core::String> copy15 = #C13;
static const field core::List<core::String> copy16 = #C13;
static const field core::List<core::String> copy17 = #C13;
static const field core::List<core::String> copy18 = #C13;
static const field core::List<core::String> copy19 = #C13;
static const field core::List<core::String> copy20 = #C13;
static const field core::List<core::String> copy21 = #C13;
static const field core::List<core::String> copy22 = #C13;
static const field core::List<core::String> copy23 = #C13;
static const field core::List<core::String> copy24 = #C13;
static const field core::List<core::String> copy25 = #C13;
static const field core::List<core::String> copy26 = #C13;
static const field core::List<core::String> copy27 = #C13;
static const field core::List<core::String> copy28 = #C13;
static const field core::List<core::String> copy29 = #C13;
static const field core::List<core::String> copy30 = #C13;
static const field core::List<core::String> copy31 = #C13;
static const field core::List<core::String> copy32 = #C13;
static const field core::List<core::String> copy33 = #C13;
static const field core::List<core::String> copy34 = #C13;
static const field core::List<core::String> copy35 = #C13;
static const field core::List<core::String> copy36 = #C13;
static const field core::List<core::String> copy37 = #C13;
static const field core::List<core::String> copy38 = #C13;
static const field core::List<core::String> copy39 = #C13;
static const field core::List<core::String> copy40 = #C13;
static const field core::List<core::String> copy41 = #C13;
static const field core::List<core::String> copy42 = #C13;
static const field core::List<core::String> copy43 = #C13;
static const field core::List<core::String> copy44 = #C13;
static const field core::List<core::String> copy45 = #C13;
static const field core::List<core::String> copy46 = #C13;
static const field core::List<core::String> copy47 = #C13;
static const field core::List<core::String> copy48 = #C13;
static const field core::List<core::String> copy49 = #C13;
static const field core::List<core::String> copy50 = #C13;
constants {
#C1 = "lots"
@@ -60,10 +60,12 @@ constants {
#C3 = "strings"
#C4 = <core::String*>[#C1, #C2, #C3]
#C5 = "original"
#C6 = "that"
#C7 = "are"
#C8 = "already"
#C9 = "constants"
#C10 = <core::String*>[#C6, #C7, #C8, #C9]
#C11 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + #C10
#C6 = eval const core::String::fromEnvironment(#C5)
#C7 = eval const <dynamic>[#C6]
#C8 = "that"
#C9 = "are"
#C10 = "already"
#C11 = "constants"
#C12 = <core::String*>[#C8, #C9, #C10, #C11]
#C13 = eval #C4 + #C7 + #C12
}
@@ -2,57 +2,57 @@ library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
static const field core::List<core::String> original = #C11;
static const field core::List<core::String> copy1 = #C11;
static const field core::List<core::String> copy2 = #C11;
static const field core::List<core::String> copy3 = #C11;
static const field core::List<core::String> copy4 = #C11;
static const field core::List<core::String> copy5 = #C11;
static const field core::List<core::String> copy6 = #C11;
static const field core::List<core::String> copy7 = #C11;
static const field core::List<core::String> copy8 = #C11;
static const field core::List<core::String> copy9 = #C11;
static const field core::List<core::String> copy10 = #C11;
static const field core::List<core::String> copy11 = #C11;
static const field core::List<core::String> copy12 = #C11;
static const field core::List<core::String> copy13 = #C11;
static const field core::List<core::String> copy14 = #C11;
static const field core::List<core::String> copy15 = #C11;
static const field core::List<core::String> copy16 = #C11;
static const field core::List<core::String> copy17 = #C11;
static const field core::List<core::String> copy18 = #C11;
static const field core::List<core::String> copy19 = #C11;
static const field core::List<core::String> copy20 = #C11;
static const field core::List<core::String> copy21 = #C11;
static const field core::List<core::String> copy22 = #C11;
static const field core::List<core::String> copy23 = #C11;
static const field core::List<core::String> copy24 = #C11;
static const field core::List<core::String> copy25 = #C11;
static const field core::List<core::String> copy26 = #C11;
static const field core::List<core::String> copy27 = #C11;
static const field core::List<core::String> copy28 = #C11;
static const field core::List<core::String> copy29 = #C11;
static const field core::List<core::String> copy30 = #C11;
static const field core::List<core::String> copy31 = #C11;
static const field core::List<core::String> copy32 = #C11;
static const field core::List<core::String> copy33 = #C11;
static const field core::List<core::String> copy34 = #C11;
static const field core::List<core::String> copy35 = #C11;
static const field core::List<core::String> copy36 = #C11;
static const field core::List<core::String> copy37 = #C11;
static const field core::List<core::String> copy38 = #C11;
static const field core::List<core::String> copy39 = #C11;
static const field core::List<core::String> copy40 = #C11;
static const field core::List<core::String> copy41 = #C11;
static const field core::List<core::String> copy42 = #C11;
static const field core::List<core::String> copy43 = #C11;
static const field core::List<core::String> copy44 = #C11;
static const field core::List<core::String> copy45 = #C11;
static const field core::List<core::String> copy46 = #C11;
static const field core::List<core::String> copy47 = #C11;
static const field core::List<core::String> copy48 = #C11;
static const field core::List<core::String> copy49 = #C11;
static const field core::List<core::String> copy50 = #C11;
static const field core::List<core::String> original = #C13;
static const field core::List<core::String> copy1 = #C13;
static const field core::List<core::String> copy2 = #C13;
static const field core::List<core::String> copy3 = #C13;
static const field core::List<core::String> copy4 = #C13;
static const field core::List<core::String> copy5 = #C13;
static const field core::List<core::String> copy6 = #C13;
static const field core::List<core::String> copy7 = #C13;
static const field core::List<core::String> copy8 = #C13;
static const field core::List<core::String> copy9 = #C13;
static const field core::List<core::String> copy10 = #C13;
static const field core::List<core::String> copy11 = #C13;
static const field core::List<core::String> copy12 = #C13;
static const field core::List<core::String> copy13 = #C13;
static const field core::List<core::String> copy14 = #C13;
static const field core::List<core::String> copy15 = #C13;
static const field core::List<core::String> copy16 = #C13;
static const field core::List<core::String> copy17 = #C13;
static const field core::List<core::String> copy18 = #C13;
static const field core::List<core::String> copy19 = #C13;
static const field core::List<core::String> copy20 = #C13;
static const field core::List<core::String> copy21 = #C13;
static const field core::List<core::String> copy22 = #C13;
static const field core::List<core::String> copy23 = #C13;
static const field core::List<core::String> copy24 = #C13;
static const field core::List<core::String> copy25 = #C13;
static const field core::List<core::String> copy26 = #C13;
static const field core::List<core::String> copy27 = #C13;
static const field core::List<core::String> copy28 = #C13;
static const field core::List<core::String> copy29 = #C13;
static const field core::List<core::String> copy30 = #C13;
static const field core::List<core::String> copy31 = #C13;
static const field core::List<core::String> copy32 = #C13;
static const field core::List<core::String> copy33 = #C13;
static const field core::List<core::String> copy34 = #C13;
static const field core::List<core::String> copy35 = #C13;
static const field core::List<core::String> copy36 = #C13;
static const field core::List<core::String> copy37 = #C13;
static const field core::List<core::String> copy38 = #C13;
static const field core::List<core::String> copy39 = #C13;
static const field core::List<core::String> copy40 = #C13;
static const field core::List<core::String> copy41 = #C13;
static const field core::List<core::String> copy42 = #C13;
static const field core::List<core::String> copy43 = #C13;
static const field core::List<core::String> copy44 = #C13;
static const field core::List<core::String> copy45 = #C13;
static const field core::List<core::String> copy46 = #C13;
static const field core::List<core::String> copy47 = #C13;
static const field core::List<core::String> copy48 = #C13;
static const field core::List<core::String> copy49 = #C13;
static const field core::List<core::String> copy50 = #C13;
constants {
#C1 = "lots"
@@ -60,12 +60,14 @@ constants {
#C3 = "strings"
#C4 = <core::String*>[#C1, #C2, #C3]
#C5 = "original"
#C6 = "that"
#C7 = "are"
#C8 = "already"
#C9 = "constants"
#C10 = <core::String*>[#C6, #C7, #C8, #C9]
#C11 = eval #C4 + const <dynamic>[const core::String::fromEnvironment(#C5)] + #C10
#C6 = eval const core::String::fromEnvironment(#C5)
#C7 = eval const <dynamic>[#C6]
#C8 = "that"
#C9 = "are"
#C10 = "already"
#C11 = "constants"
#C12 = <core::String*>[#C8, #C9, #C10, #C11]
#C13 = eval #C4 + #C7 + #C12
}
Extra constant evaluation status:
@@ -3,17 +3,17 @@ import self as self;
import "dart:core" as core;
static const field core::int foo = #C1;
static const field core::String bar = #C6;
static const field core::bool baz = #C7;
static const field core::Symbol blaSymbol = #C8;
static const field core::String bar = #C7;
static const field core::bool baz = #C8;
static const field core::Symbol blaSymbol = #C9;
static method main() → dynamic {
self::_x();
#C10;
core::print(#C6);
#C11;
core::print(#C7);
}
static method _x() → void {
core::print(#C1);
core::print(#C6);
core::print(#C7);
}
constants {
@@ -21,10 +21,11 @@ constants {
#C2 = "hello "
#C3 = "baz"
#C4 = "world"
#C5 = "!"
#C6 = eval "${#C2}${const core::String::fromEnvironment(#C3, defaultValue: #C4)}${#C5}"
#C7 = true
#C8 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
#C9 = "foo"
#C10 = eval const core::bool::fromEnvironment(#C9)
#C5 = eval const core::String::fromEnvironment(#C3, defaultValue: #C4)
#C6 = "!"
#C7 = eval "${#C2}${#C5}${#C6}"
#C8 = true
#C9 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
#C10 = "foo"
#C11 = eval const core::bool::fromEnvironment(#C10)
}
@@ -3,17 +3,17 @@ import self as self;
import "dart:core" as core;
static const field core::int foo = #C1;
static const field core::String bar = #C6;
static const field core::bool baz = #C7;
static const field core::Symbol blaSymbol = #C8;
static const field core::String bar = #C7;
static const field core::bool baz = #C8;
static const field core::Symbol blaSymbol = #C9;
static method main() → dynamic {
self::_x();
#C10;
core::print(#C6);
#C11;
core::print(#C7);
}
static method _x() → void {
core::print(#C1);
core::print(#C6);
core::print(#C7);
}
constants {
@@ -21,10 +21,11 @@ constants {
#C2 = "hello "
#C3 = "baz"
#C4 = "world"
#C5 = "!"
#C6 = eval "${#C2}${const core::String::fromEnvironment(#C3, defaultValue: #C4)}${#C5}"
#C7 = true
#C8 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
#C9 = "foo"
#C10 = eval const core::bool::fromEnvironment(#C9)
#C5 = eval const core::String::fromEnvironment(#C3, defaultValue: #C4)
#C6 = "!"
#C7 = eval "${#C2}${#C5}${#C6}"
#C8 = true
#C9 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
#C10 = "foo"
#C11 = eval const core::bool::fromEnvironment(#C10)
}
@@ -3,17 +3,17 @@ import self as self;
import "dart:core" as core;
static const field core::int foo = #C1;
static const field core::String bar = #C6;
static const field core::bool baz = #C7;
static const field core::Symbol blaSymbol = #C8;
static const field core::String bar = #C7;
static const field core::bool baz = #C8;
static const field core::Symbol blaSymbol = #C9;
static method main() → dynamic {
self::_x();
#C10;
core::print(#C11);
#C11;
core::print(#C7);
}
static method _x() → void {
core::print(#C1);
core::print(#C11);
core::print(#C7);
}
constants {
@@ -21,18 +21,18 @@ constants {
#C2 = "hello "
#C3 = "baz"
#C4 = "world"
#C5 = "!"
#C6 = eval "${#C2}${const core::String::fromEnvironment(#C3, defaultValue: #C4)}${#C5}"
#C7 = true
#C8 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
#C9 = "foo"
#C10 = eval const core::bool::fromEnvironment(#C9)
#C11 = eval "${#C2}${const core::String::fromEnvironment(#C3, defaultValue: #C4)}${#C5}"
#C5 = eval const core::String::fromEnvironment(#C3, defaultValue: #C4)
#C6 = "!"
#C7 = eval "${#C2}${#C5}${#C6}"
#C8 = true
#C9 = #org-dartlang-testcase:///rudimentary_test_01.dart::_x
#C10 = "foo"
#C11 = eval const core::bool::fromEnvironment(#C10)
}
Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:13:9 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:6:18 -> StringConstant("hello world!")
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:6:18 -> StringConstant("hello world!")
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:14:9 -> StringConstant("hello world!")
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:19:9 -> StringConstant("hello world!")
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///rudimentary_test_01.dart:6:18 -> StringConstant("hello world!")
Extra constant evaluation: evaluated: 8, effectively constant: 4
@@ -56,9 +56,9 @@ typedef F = (core::int, {named: core::int}) → core::int;
class Foo<E extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
final field core::bool saved;
final field core::bool saved2;
field core::bool initialized = #C3;
field core::bool initialized = #C4;
final field self::Foo::E% value;
const constructor •(self::Foo::E% value, {core::bool saved2 = #C4, core::bool x = #C5}) → self::Foo<self::Foo::E%>
const constructor •(self::Foo::E% value, {core::bool saved2 = #C5, core::bool x = #C6}) → self::Foo<self::Foo::E%>
: self::Foo::value = value, self::Foo::saved2 = saved2, self::Foo::saved = x, super core::Object::•()
;
}
@@ -108,136 +108,166 @@ class ConstClassWithF extends core::Object /*hasConstConstructor*/ {
: self::ConstClassWithF::foo = foo, super core::Object::•()
;
}
static const field core::bool barFromEnv = #C6;
static const field core::bool barFromEnv = #C3;
static const field core::bool hasBarEnv = #C7;
static const field core::bool? barFromEnvOrNull0 = #C10;
static const field core::bool barFromEnvOrNull = #C11;
static const field core::bool notBarFromEnvOrNull = #C12;
static const field core::bool conditionalOnNull = #C14;
static const field core::bool nullAwareOnNull = #C15;
static const field core::bool andOnNull = #C16;
static const field core::bool andOnNull2 = #C11;
static const field core::bool orOnNull = #C17;
static const field core::bool orOnNull2 = #C18;
static const field core::bool orOnNull3 = #C8;
static const field core::bool orOnNull4 = #C11;
static const field core::bool? barFromEnvOrNull0 = #C11;
static const field core::bool barFromEnvOrNull = #C13;
static const field core::bool notBarFromEnvOrNull = #C14;
static const field core::bool conditionalOnNull = #C16;
static const field core::bool nullAwareOnNull = #C18;
static const field core::bool andOnNull = #C19;
static const field core::bool andOnNull2 = #C13;
static const field core::bool orOnNull = #C20;
static const field core::bool orOnNull2 = #C21;
static const field core::bool orOnNull3 = #C9;
static const field core::bool orOnNull4 = #C13;
static const field core::int fromDeferredLib = invalid-expression "'lib' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.";
static const field self::Foo<core::int> x = #C20;
static const field core::bool? y = #C8;
static const field core::bool z = #C13;
static const field core::Object maybeInt = #C21;
static const field core::bool isItInt = #C22;
static const field core::Object maybeInt2 = #C8;
static const field core::bool isItInt2 = #C13;
static const field core::int? maybeInt3 = #C9;
static const field core::bool isItInt3 = #C13;
static const field dynamic listOfNull = #C23;
static const field core::bool isListOfNull = #C8;
static const field dynamic listOfInt = #C24;
static const field core::bool isListOfInt = #C8;
static const field core::bool isList = #C8;
static const field dynamic setOfInt = #C25;
static const field core::bool isSetOfInt = #C8;
static const field dynamic mapOfInt = #C26;
static const field core::bool isMapOfInt = #C8;
static const field dynamic listOfListOfInt = #C27;
static const field core::bool isListOfListOfInt = #C8;
static const field dynamic setOfSetOfInt = #C28;
static const field core::bool isSetOfSetOfInt = #C8;
static const field dynamic mapOfMapOfInt1 = #C29;
static const field dynamic mapOfMapOfInt2 = #C30;
static const field core::bool isMapOfMapOfInt1 = #C8;
static const field core::bool isMapOfMapOfInt2 = #C8;
static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
static const field core::Symbol symbolWithInvalidName = #C32;
static const field self::Class<self::B>? c0 = #C34;
static const field self::Foo<core::int> x = #C23;
static const field core::bool? y = #C9;
static const field core::bool z = #C15;
static const field core::Object maybeInt = #C25;
static const field core::bool isItInt = #C27;
static const field core::Object maybeInt2 = #C9;
static const field core::bool isItInt2 = #C15;
static const field core::int? maybeInt3 = #C10;
static const field core::bool isItInt3 = #C15;
static const field dynamic listOfNull = #C28;
static const field core::bool isListOfNull = #C9;
static const field dynamic listOfInt = #C29;
static const field core::bool isListOfInt = #C9;
static const field core::bool isList = #C9;
static const field dynamic setOfInt = #C30;
static const field core::bool isSetOfInt = #C9;
static const field dynamic mapOfInt = #C31;
static const field core::bool isMapOfInt = #C9;
static const field dynamic listOfListOfInt = #C32;
static const field core::bool isListOfListOfInt = #C9;
static const field dynamic setOfSetOfInt = #C33;
static const field core::bool isSetOfSetOfInt = #C9;
static const field dynamic mapOfMapOfInt1 = #C34;
static const field dynamic mapOfMapOfInt2 = #C35;
static const field core::bool isMapOfMapOfInt1 = #C9;
static const field core::bool isMapOfMapOfInt2 = #C9;
static const field core::Symbol symbolWithUnevaluatedParameter = #C37;
static const field core::Symbol symbolWithInvalidName = #C38;
static const field self::Class<self::B>? c0 = #C44;
static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^";
static const field self::Subclass<self::B>? c2 = #C35;
static const field self::Class<self::A>? c3 = #C36;
static const field self::Class<self::B>? c4 = #C37;
static const field self::Subclass<self::A>? c5 = #C38;
static const field self::Subclass<self::B>? c6 = #C39;
static const field core::Type f = #C40;
static field self::ConstClassWithF constClassWithF1 = #C42;
static const field self::ConstClassWithF constClassWithF2 = #C42;
static const field core::bool unevaluatedBool = #C43;
static const field core::bool notUnevaluatedBool = #C44;
static const field core::bool? unevaluatedBoolOrNull = #C45;
static const field core::bool unevaluatedBoolNotNull = #C46;
static method procedure(core::int i, {core::int named = #C9}) → core::int
static const field self::Subclass<self::B>? c2 = #C49;
static const field self::Class<self::A>? c3 = #C53;
static const field self::Class<self::B>? c4 = #C58;
static const field self::Subclass<self::A>? c5 = #C63;
static const field self::Subclass<self::B>? c6 = #C68;
static const field core::Type f = #C69;
static field self::ConstClassWithF constClassWithF1 = #C71;
static const field self::ConstClassWithF constClassWithF2 = #C71;
static const field core::bool unevaluatedBool = #C72;
static const field core::bool notUnevaluatedBool = #C73;
static const field core::bool? unevaluatedBoolOrNull = #C75;
static const field core::bool unevaluatedBoolNotNull = #C76;
static method procedure(core::int i, {core::int named = #C10}) → core::int
return i;
static method main() → dynamic {
core::print(#C34);
core::print(#C44);
core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^");
core::print(#C35);
core::print(#C36);
core::print(#C37);
core::print(#C38);
core::print(#C39);
core::print(#C20);
core::print(#C20.{self::Foo::saved}{core::bool});
core::print(#C20.{self::Foo::value}{core::int});
core::print(#C49);
core::print(#C53);
core::print(#C58);
core::print(#C63);
core::print(#C68);
core::print(#C23);
core::print(#C23.{self::Foo::saved}{core::bool});
core::print(#C23.{self::Foo::value}{core::int});
}
library /*isNonNullableByDefault*/;
import self as self2;
import "dart:core" as core;
static const field core::int x = #C19;
static const field core::int x = #C22;
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C4 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C5 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C6 = eval const core::bool::fromEnvironment(#C2)
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C5 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C6 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C7 = eval const core::bool::hasEnvironment(#C2)
#C8 = true
#C9 = null
#C10 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9
#C11 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C12 = eval !const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C13 = false
#C14 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) ?{core::bool} #C8 : #C13
#C15 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) == null ?{core::bool} #C8 : const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C16 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) && #C8
#C17 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C8
#C18 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C13
#C19 = 42
#C20 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
#C21 = eval const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8
#C22 = eval (const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8) is{ForNonNullableByDefault} core::int ?{core::bool} #C8 : #C13
#C23 = <Null>[#C9]
#C24 = <core::int*>[#C19]
#C25 = <core::int*>{#C19}
#C26 = <core::int*, core::int*>{#C19:#C19)
#C27 = <core::List<core::int*>*>[#C24]
#C28 = <core::Set<core::int*>*>{#C25}
#C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
#C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
#C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
#C32 = #42
#C33 = "x"
#C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
#C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
#C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
#C41 = static-tearoff self::procedure
#C42 = self::ConstClassWithF {foo:#C41}
#C43 = eval const core::bool::fromEnvironment(#C1)
#C44 = eval !const core::bool::fromEnvironment(#C1)
#C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
#C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
#C8 = eval const core::bool::fromEnvironment(#C2)
#C9 = true
#C10 = null
#C11 = eval #C8 ?{core::bool?} #C9 : #C10
#C12 = eval #C11!
#C13 = eval const core::bool::fromEnvironment(#C2, defaultValue: #C12)
#C14 = eval !#C13
#C15 = false
#C16 = eval #C13 ?{core::bool} #C9 : #C15
#C17 = eval #C13 == null
#C18 = eval #C17 ?{core::bool} #C9 : #C13
#C19 = eval #C13 && #C9
#C20 = eval #C13 || #C9
#C21 = eval #C13 || #C15
#C22 = 42
#C23 = eval self::Foo<core::int*>{saved:#C6, saved2:#C5, initialized:#C4, value:#C22}
#C24 = eval const core::bool::fromEnvironment(#C1)
#C25 = eval #C24 ?{core::Object} #C22 : #C9
#C26 = eval #C25 is{ForNonNullableByDefault} core::int
#C27 = eval #C26 ?{core::bool} #C9 : #C15
#C28 = <Null>[#C10]
#C29 = <core::int*>[#C22]
#C30 = <core::int*>{#C22}
#C31 = <core::int*, core::int*>{#C22:#C22)
#C32 = <core::List<core::int*>*>[#C29]
#C33 = <core::Set<core::int*>*>{#C30}
#C34 = <core::Map<core::int*, core::int*>*, core::int*>{#C31:#C22)
#C35 = <core::int*, core::Map<core::int*, core::int*>*>{#C22:#C31)
#C36 = eval const core::String::fromEnvironment(#C1)
#C37 = eval const _in::Symbol::•(#C36)
#C38 = #42
#C39 = "x"
#C40 = eval const core::bool::fromEnvironment(#C39)
#C41 = eval self::C{}
#C42 = eval #C41 as{ForNonNullableByDefault} self::B*
#C43 = eval self::Class<self::B*>{#C42}
#C44 = eval #C40 ?{self::Class<self::B>?} #C10 : #C43
#C45 = eval const core::bool::fromEnvironment(#C39)
#C46 = eval self::C{}
#C47 = eval #C46 as{ForNonNullableByDefault} self::B*
#C48 = eval self::Subclass<self::B*>{#C47}
#C49 = eval #C45 ?{self::Subclass<self::B>?} #C10 : #C48
#C50 = eval const core::bool::fromEnvironment(#C39)
#C51 = eval self::A{}
#C52 = eval self::Class<self::A*>{#C51}
#C53 = eval #C50 ?{self::Class<self::A>?} #C10 : #C52
#C54 = eval const core::bool::fromEnvironment(#C39)
#C55 = eval self::B{}
#C56 = eval #C55 as{ForNonNullableByDefault} self::B*
#C57 = eval self::Class<self::B*>{#C56}
#C58 = eval #C54 ?{self::Class<self::B>?} #C10 : #C57
#C59 = eval const core::bool::fromEnvironment(#C39)
#C60 = eval self::A{}
#C61 = eval #C60 as{ForNonNullableByDefault} self::A*
#C62 = eval self::Subclass<self::A*>{#C61}
#C63 = eval #C59 ?{self::Subclass<self::A>?} #C10 : #C62
#C64 = eval const core::bool::fromEnvironment(#C39)
#C65 = eval self::B{}
#C66 = eval #C65 as{ForNonNullableByDefault} self::B*
#C67 = eval self::Subclass<self::B*>{#C66}
#C68 = eval #C64 ?{self::Subclass<self::B>?} #C10 : #C67
#C69 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
#C70 = static-tearoff self::procedure
#C71 = self::ConstClassWithF {foo:#C70}
#C72 = eval const core::bool::fromEnvironment(#C1)
#C73 = eval !#C72
#C74 = eval const core::bool::fromEnvironment(#C2)
#C75 = eval #C74 ?{core::bool?} #C72 : #C10
#C76 = eval #C75!
}
@@ -56,9 +56,9 @@ typedef F = (core::int, {named: core::int}) → core::int;
class Foo<E extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
final field core::bool saved;
final field core::bool saved2;
field core::bool initialized = #C3;
field core::bool initialized = #C4;
final field self::Foo::E% value;
const constructor •(self::Foo::E% value, {core::bool saved2 = #C4, core::bool x = #C5}) → self::Foo<self::Foo::E%>
const constructor •(self::Foo::E% value, {core::bool saved2 = #C5, core::bool x = #C6}) → self::Foo<self::Foo::E%>
: self::Foo::value = value, self::Foo::saved2 = saved2, self::Foo::saved = x, super core::Object::•()
;
}
@@ -108,136 +108,166 @@ class ConstClassWithF extends core::Object /*hasConstConstructor*/ {
: self::ConstClassWithF::foo = foo, super core::Object::•()
;
}
static const field core::bool barFromEnv = #C6;
static const field core::bool barFromEnv = #C3;
static const field core::bool hasBarEnv = #C7;
static const field core::bool? barFromEnvOrNull0 = #C10;
static const field core::bool barFromEnvOrNull = #C11;
static const field core::bool notBarFromEnvOrNull = #C12;
static const field core::bool conditionalOnNull = #C14;
static const field core::bool nullAwareOnNull = #C15;
static const field core::bool andOnNull = #C16;
static const field core::bool andOnNull2 = #C11;
static const field core::bool orOnNull = #C17;
static const field core::bool orOnNull2 = #C18;
static const field core::bool orOnNull3 = #C8;
static const field core::bool orOnNull4 = #C11;
static const field core::bool? barFromEnvOrNull0 = #C11;
static const field core::bool barFromEnvOrNull = #C13;
static const field core::bool notBarFromEnvOrNull = #C14;
static const field core::bool conditionalOnNull = #C16;
static const field core::bool nullAwareOnNull = #C18;
static const field core::bool andOnNull = #C19;
static const field core::bool andOnNull2 = #C13;
static const field core::bool orOnNull = #C20;
static const field core::bool orOnNull2 = #C21;
static const field core::bool orOnNull3 = #C9;
static const field core::bool orOnNull4 = #C13;
static const field core::int fromDeferredLib = invalid-expression "'lib' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.";
static const field self::Foo<core::int> x = #C20;
static const field core::bool? y = #C8;
static const field core::bool z = #C13;
static const field core::Object maybeInt = #C21;
static const field core::bool isItInt = #C22;
static const field core::Object maybeInt2 = #C8;
static const field core::bool isItInt2 = #C13;
static const field core::int? maybeInt3 = #C9;
static const field core::bool isItInt3 = #C13;
static const field dynamic listOfNull = #C23;
static const field core::bool isListOfNull = #C8;
static const field dynamic listOfInt = #C24;
static const field core::bool isListOfInt = #C8;
static const field core::bool isList = #C8;
static const field dynamic setOfInt = #C25;
static const field core::bool isSetOfInt = #C8;
static const field dynamic mapOfInt = #C26;
static const field core::bool isMapOfInt = #C8;
static const field dynamic listOfListOfInt = #C27;
static const field core::bool isListOfListOfInt = #C8;
static const field dynamic setOfSetOfInt = #C28;
static const field core::bool isSetOfSetOfInt = #C8;
static const field dynamic mapOfMapOfInt1 = #C29;
static const field dynamic mapOfMapOfInt2 = #C30;
static const field core::bool isMapOfMapOfInt1 = #C8;
static const field core::bool isMapOfMapOfInt2 = #C8;
static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
static const field core::Symbol symbolWithInvalidName = #C32;
static const field self::Class<self::B>? c0 = #C34;
static const field self::Foo<core::int> x = #C23;
static const field core::bool? y = #C9;
static const field core::bool z = #C15;
static const field core::Object maybeInt = #C25;
static const field core::bool isItInt = #C27;
static const field core::Object maybeInt2 = #C9;
static const field core::bool isItInt2 = #C15;
static const field core::int? maybeInt3 = #C10;
static const field core::bool isItInt3 = #C15;
static const field dynamic listOfNull = #C28;
static const field core::bool isListOfNull = #C9;
static const field dynamic listOfInt = #C29;
static const field core::bool isListOfInt = #C9;
static const field core::bool isList = #C9;
static const field dynamic setOfInt = #C30;
static const field core::bool isSetOfInt = #C9;
static const field dynamic mapOfInt = #C31;
static const field core::bool isMapOfInt = #C9;
static const field dynamic listOfListOfInt = #C32;
static const field core::bool isListOfListOfInt = #C9;
static const field dynamic setOfSetOfInt = #C33;
static const field core::bool isSetOfSetOfInt = #C9;
static const field dynamic mapOfMapOfInt1 = #C34;
static const field dynamic mapOfMapOfInt2 = #C35;
static const field core::bool isMapOfMapOfInt1 = #C9;
static const field core::bool isMapOfMapOfInt2 = #C9;
static const field core::Symbol symbolWithUnevaluatedParameter = #C37;
static const field core::Symbol symbolWithInvalidName = #C38;
static const field self::Class<self::B>? c0 = #C44;
static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^";
static const field self::Subclass<self::B>? c2 = #C35;
static const field self::Class<self::A>? c3 = #C36;
static const field self::Class<self::B>? c4 = #C37;
static const field self::Subclass<self::A>? c5 = #C38;
static const field self::Subclass<self::B>? c6 = #C39;
static const field core::Type f = #C40;
static field self::ConstClassWithF constClassWithF1 = #C42;
static const field self::ConstClassWithF constClassWithF2 = #C42;
static const field core::bool unevaluatedBool = #C43;
static const field core::bool notUnevaluatedBool = #C44;
static const field core::bool? unevaluatedBoolOrNull = #C45;
static const field core::bool unevaluatedBoolNotNull = #C46;
static method procedure(core::int i, {core::int named = #C9}) → core::int
static const field self::Subclass<self::B>? c2 = #C49;
static const field self::Class<self::A>? c3 = #C53;
static const field self::Class<self::B>? c4 = #C58;
static const field self::Subclass<self::A>? c5 = #C63;
static const field self::Subclass<self::B>? c6 = #C68;
static const field core::Type f = #C69;
static field self::ConstClassWithF constClassWithF1 = #C71;
static const field self::ConstClassWithF constClassWithF2 = #C71;
static const field core::bool unevaluatedBool = #C72;
static const field core::bool notUnevaluatedBool = #C73;
static const field core::bool? unevaluatedBoolOrNull = #C75;
static const field core::bool unevaluatedBoolNotNull = #C76;
static method procedure(core::int i, {core::int named = #C10}) → core::int
return i;
static method main() → dynamic {
core::print(#C34);
core::print(#C44);
core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^");
core::print(#C35);
core::print(#C36);
core::print(#C37);
core::print(#C38);
core::print(#C39);
core::print(#C20);
core::print(#C20.{self::Foo::saved}{core::bool});
core::print(#C20.{self::Foo::value}{core::int});
core::print(#C49);
core::print(#C53);
core::print(#C58);
core::print(#C63);
core::print(#C68);
core::print(#C23);
core::print(#C23.{self::Foo::saved}{core::bool});
core::print(#C23.{self::Foo::value}{core::int});
}
library /*isNonNullableByDefault*/;
import self as self2;
import "dart:core" as core;
static const field core::int x = #C19;
static const field core::int x = #C22;
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C4 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C5 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C6 = eval const core::bool::fromEnvironment(#C2)
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C5 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C6 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C7 = eval const core::bool::hasEnvironment(#C2)
#C8 = true
#C9 = null
#C10 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9
#C11 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C12 = eval !const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C13 = false
#C14 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) ?{core::bool} #C8 : #C13
#C15 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) == null ?{core::bool} #C8 : const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C16 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) && #C8
#C17 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C8
#C18 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C13
#C19 = 42
#C20 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
#C21 = eval const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8
#C22 = eval (const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8) is{ForNonNullableByDefault} core::int ?{core::bool} #C8 : #C13
#C23 = <Null>[#C9]
#C24 = <core::int*>[#C19]
#C25 = <core::int*>{#C19}
#C26 = <core::int*, core::int*>{#C19:#C19)
#C27 = <core::List<core::int*>*>[#C24]
#C28 = <core::Set<core::int*>*>{#C25}
#C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
#C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
#C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
#C32 = #42
#C33 = "x"
#C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
#C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
#C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
#C41 = static-tearoff self::procedure
#C42 = self::ConstClassWithF {foo:#C41}
#C43 = eval const core::bool::fromEnvironment(#C1)
#C44 = eval !const core::bool::fromEnvironment(#C1)
#C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
#C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
#C8 = eval const core::bool::fromEnvironment(#C2)
#C9 = true
#C10 = null
#C11 = eval #C8 ?{core::bool?} #C9 : #C10
#C12 = eval #C11!
#C13 = eval const core::bool::fromEnvironment(#C2, defaultValue: #C12)
#C14 = eval !#C13
#C15 = false
#C16 = eval #C13 ?{core::bool} #C9 : #C15
#C17 = eval #C13 == null
#C18 = eval #C17 ?{core::bool} #C9 : #C13
#C19 = eval #C13 && #C9
#C20 = eval #C13 || #C9
#C21 = eval #C13 || #C15
#C22 = 42
#C23 = eval self::Foo<core::int*>{saved:#C6, saved2:#C5, initialized:#C4, value:#C22}
#C24 = eval const core::bool::fromEnvironment(#C1)
#C25 = eval #C24 ?{core::Object} #C22 : #C9
#C26 = eval #C25 is{ForNonNullableByDefault} core::int
#C27 = eval #C26 ?{core::bool} #C9 : #C15
#C28 = <Null>[#C10]
#C29 = <core::int*>[#C22]
#C30 = <core::int*>{#C22}
#C31 = <core::int*, core::int*>{#C22:#C22)
#C32 = <core::List<core::int*>*>[#C29]
#C33 = <core::Set<core::int*>*>{#C30}
#C34 = <core::Map<core::int*, core::int*>*, core::int*>{#C31:#C22)
#C35 = <core::int*, core::Map<core::int*, core::int*>*>{#C22:#C31)
#C36 = eval const core::String::fromEnvironment(#C1)
#C37 = eval const _in::Symbol::•(#C36)
#C38 = #42
#C39 = "x"
#C40 = eval const core::bool::fromEnvironment(#C39)
#C41 = eval self::C{}
#C42 = eval #C41 as{ForNonNullableByDefault} self::B*
#C43 = eval self::Class<self::B*>{#C42}
#C44 = eval #C40 ?{self::Class<self::B>?} #C10 : #C43
#C45 = eval const core::bool::fromEnvironment(#C39)
#C46 = eval self::C{}
#C47 = eval #C46 as{ForNonNullableByDefault} self::B*
#C48 = eval self::Subclass<self::B*>{#C47}
#C49 = eval #C45 ?{self::Subclass<self::B>?} #C10 : #C48
#C50 = eval const core::bool::fromEnvironment(#C39)
#C51 = eval self::A{}
#C52 = eval self::Class<self::A*>{#C51}
#C53 = eval #C50 ?{self::Class<self::A>?} #C10 : #C52
#C54 = eval const core::bool::fromEnvironment(#C39)
#C55 = eval self::B{}
#C56 = eval #C55 as{ForNonNullableByDefault} self::B*
#C57 = eval self::Class<self::B*>{#C56}
#C58 = eval #C54 ?{self::Class<self::B>?} #C10 : #C57
#C59 = eval const core::bool::fromEnvironment(#C39)
#C60 = eval self::A{}
#C61 = eval #C60 as{ForNonNullableByDefault} self::A*
#C62 = eval self::Subclass<self::A*>{#C61}
#C63 = eval #C59 ?{self::Subclass<self::A>?} #C10 : #C62
#C64 = eval const core::bool::fromEnvironment(#C39)
#C65 = eval self::B{}
#C66 = eval #C65 as{ForNonNullableByDefault} self::B*
#C67 = eval self::Subclass<self::B*>{#C66}
#C68 = eval #C64 ?{self::Subclass<self::B>?} #C10 : #C67
#C69 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
#C70 = static-tearoff self::procedure
#C71 = self::ConstClassWithF {foo:#C70}
#C72 = eval const core::bool::fromEnvironment(#C1)
#C73 = eval !#C72
#C74 = eval const core::bool::fromEnvironment(#C2)
#C75 = eval #C74 ?{core::bool?} #C72 : #C10
#C76 = eval #C75!
}
@@ -56,9 +56,9 @@ typedef F = (core::int, {named: core::int}) → core::int;
class Foo<E extends core::Object? = dynamic> extends core::Object /*hasConstConstructor*/ {
final field core::bool saved;
final field core::bool saved2;
field core::bool initialized = #C3;
field core::bool initialized = #C4;
final field self::Foo::E% value;
const constructor •(self::Foo::E% value, {core::bool saved2 = #C4, core::bool x = #C5}) → self::Foo<self::Foo::E%>
const constructor •(self::Foo::E% value, {core::bool saved2 = #C5, core::bool x = #C6}) → self::Foo<self::Foo::E%>
: self::Foo::value = value, self::Foo::saved2 = saved2, self::Foo::saved = x, super core::Object::•()
;
}
@@ -108,156 +108,179 @@ class ConstClassWithF extends core::Object /*hasConstConstructor*/ {
: self::ConstClassWithF::foo = foo, super core::Object::•()
;
}
static const field core::bool barFromEnv = #C6;
static const field core::bool barFromEnv = #C3;
static const field core::bool hasBarEnv = #C7;
static const field core::bool? barFromEnvOrNull0 = #C10;
static const field core::bool barFromEnvOrNull = #C11;
static const field core::bool notBarFromEnvOrNull = #C12;
static const field core::bool conditionalOnNull = #C14;
static const field core::bool nullAwareOnNull = #C15;
static const field core::bool andOnNull = #C16;
static const field core::bool andOnNull2 = #C11;
static const field core::bool orOnNull = #C17;
static const field core::bool orOnNull2 = #C18;
static const field core::bool orOnNull3 = #C8;
static const field core::bool orOnNull4 = #C11;
static const field core::bool? barFromEnvOrNull0 = #C11;
static const field core::bool barFromEnvOrNull = #C13;
static const field core::bool notBarFromEnvOrNull = #C14;
static const field core::bool conditionalOnNull = #C16;
static const field core::bool nullAwareOnNull = #C18;
static const field core::bool andOnNull = #C19;
static const field core::bool andOnNull2 = #C13;
static const field core::bool orOnNull = #C20;
static const field core::bool orOnNull2 = #C21;
static const field core::bool orOnNull3 = #C9;
static const field core::bool orOnNull4 = #C13;
static const field core::int fromDeferredLib = invalid-expression "'lib' can't be used in a constant expression because it's marked as 'deferred' which means it isn't available until loaded.";
static const field self::Foo<core::int> x = #C20;
static const field core::bool? y = #C8;
static const field core::bool z = #C13;
static const field core::Object maybeInt = #C21;
static const field core::bool isItInt = #C22;
static const field core::Object maybeInt2 = #C8;
static const field core::bool isItInt2 = #C13;
static const field core::int? maybeInt3 = #C9;
static const field core::bool isItInt3 = #C13;
static const field dynamic listOfNull = #C23;
static const field core::bool isListOfNull = #C8;
static const field dynamic listOfInt = #C24;
static const field core::bool isListOfInt = #C8;
static const field core::bool isList = #C8;
static const field dynamic setOfInt = #C25;
static const field core::bool isSetOfInt = #C8;
static const field dynamic mapOfInt = #C26;
static const field core::bool isMapOfInt = #C8;
static const field dynamic listOfListOfInt = #C27;
static const field core::bool isListOfListOfInt = #C8;
static const field dynamic setOfSetOfInt = #C28;
static const field core::bool isSetOfSetOfInt = #C8;
static const field dynamic mapOfMapOfInt1 = #C29;
static const field dynamic mapOfMapOfInt2 = #C30;
static const field core::bool isMapOfMapOfInt1 = #C8;
static const field core::bool isMapOfMapOfInt2 = #C8;
static const field core::Symbol symbolWithUnevaluatedParameter = #C31;
static const field core::Symbol symbolWithInvalidName = #C32;
static const field self::Class<self::B>? c0 = #C34;
static const field self::Foo<core::int> x = #C23;
static const field core::bool? y = #C9;
static const field core::bool z = #C15;
static const field core::Object maybeInt = #C25;
static const field core::bool isItInt = #C27;
static const field core::Object maybeInt2 = #C9;
static const field core::bool isItInt2 = #C15;
static const field core::int? maybeInt3 = #C10;
static const field core::bool isItInt3 = #C15;
static const field dynamic listOfNull = #C28;
static const field core::bool isListOfNull = #C9;
static const field dynamic listOfInt = #C29;
static const field core::bool isListOfInt = #C9;
static const field core::bool isList = #C9;
static const field dynamic setOfInt = #C30;
static const field core::bool isSetOfInt = #C9;
static const field dynamic mapOfInt = #C31;
static const field core::bool isMapOfInt = #C9;
static const field dynamic listOfListOfInt = #C32;
static const field core::bool isListOfListOfInt = #C9;
static const field dynamic setOfSetOfInt = #C33;
static const field core::bool isSetOfSetOfInt = #C9;
static const field dynamic mapOfMapOfInt1 = #C34;
static const field dynamic mapOfMapOfInt2 = #C35;
static const field core::bool isMapOfMapOfInt1 = #C9;
static const field core::bool isMapOfMapOfInt2 = #C9;
static const field core::Symbol symbolWithUnevaluatedParameter = #C37;
static const field core::Symbol symbolWithInvalidName = #C38;
static const field self::Class<self::B>? c0 = #C44;
static const field self::Class<self::A>? c1 = invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^";
static const field self::Subclass<self::B>? c2 = #C35;
static const field self::Class<self::A>? c3 = #C36;
static const field self::Class<self::B>? c4 = #C37;
static const field self::Subclass<self::A>? c5 = #C38;
static const field self::Subclass<self::B>? c6 = #C39;
static const field core::Type f = #C40;
static field self::ConstClassWithF constClassWithF1 = #C42;
static const field self::ConstClassWithF constClassWithF2 = #C42;
static const field core::bool unevaluatedBool = #C43;
static const field core::bool notUnevaluatedBool = #C44;
static const field core::bool? unevaluatedBoolOrNull = #C45;
static const field core::bool unevaluatedBoolNotNull = #C46;
static method procedure(core::int i, {core::int named = #C9}) → core::int
static const field self::Subclass<self::B>? c2 = #C49;
static const field self::Class<self::A>? c3 = #C53;
static const field self::Class<self::B>? c4 = #C58;
static const field self::Subclass<self::A>? c5 = #C63;
static const field self::Subclass<self::B>? c6 = #C68;
static const field core::Type f = #C69;
static field self::ConstClassWithF constClassWithF1 = #C71;
static const field self::ConstClassWithF constClassWithF2 = #C71;
static const field core::bool unevaluatedBool = #C72;
static const field core::bool notUnevaluatedBool = #C73;
static const field core::bool? unevaluatedBoolOrNull = #C75;
static const field core::bool unevaluatedBoolNotNull = #C76;
static method procedure(core::int i, {core::int named = #C10}) → core::int
return i;
static method main() → dynamic {
core::print(#C47);
core::print(#C44);
core::print(invalid-expression "pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart:100:34: Error: The argument type 'A' can't be assigned to the parameter type 'T'.
- 'A' is from 'pkg/front_end/testcases/general/constants/with_unevaluated_agnostic/various.dart'.
const Class.method(T t) : this(-t);
^");
core::print(#C48);
core::print(#C49);
core::print(#C50);
core::print(#C51);
core::print(#C52);
core::print(#C53);
core::print(#C53.{self::Foo::saved}{core::bool});
core::print(#C53.{self::Foo::value}{core::int});
core::print(#C58);
core::print(#C63);
core::print(#C68);
core::print(#C23);
core::print(#C23.{self::Foo::saved}{core::bool});
core::print(#C23.{self::Foo::value}{core::int});
}
library /*isNonNullableByDefault*/;
import self as self2;
import "dart:core" as core;
static const field core::int x = #C19;
static const field core::int x = #C22;
constants {
#C1 = "foo"
#C2 = "bar"
#C3 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C4 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C5 = eval const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2))
#C6 = eval const core::bool::fromEnvironment(#C2)
#C3 = eval const core::bool::fromEnvironment(#C2)
#C4 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C5 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C6 = eval const core::bool::fromEnvironment(#C1, defaultValue: #C3)
#C7 = eval const core::bool::hasEnvironment(#C2)
#C8 = true
#C9 = null
#C10 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9
#C11 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C12 = eval !const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C13 = false
#C14 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) ?{core::bool} #C8 : #C13
#C15 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) == null ?{core::bool} #C8 : const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!)
#C16 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) && #C8
#C17 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C8
#C18 = eval const core::bool::fromEnvironment(#C2, defaultValue: (const core::bool::fromEnvironment(#C2) ?{core::bool?} #C8 : #C9)!) || #C13
#C19 = 42
#C20 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
#C21 = eval const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8
#C22 = eval (const core::bool::fromEnvironment(#C1) ?{core::Object} #C19 : #C8) is{ForNonNullableByDefault} core::int ?{core::bool} #C8 : #C13
#C23 = <Null>[#C9]
#C24 = <core::int*>[#C19]
#C25 = <core::int*>{#C19}
#C26 = <core::int*, core::int*>{#C19:#C19)
#C27 = <core::List<core::int*>*>[#C24]
#C28 = <core::Set<core::int*>*>{#C25}
#C29 = <core::Map<core::int*, core::int*>*, core::int*>{#C26:#C19)
#C30 = <core::int*, core::Map<core::int*, core::int*>*>{#C19:#C26)
#C31 = eval const _in::Symbol::•(const core::String::fromEnvironment(#C1))
#C32 = #42
#C33 = "x"
#C34 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C35 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C36 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
#C37 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C38 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
#C39 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C40 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
#C41 = static-tearoff self::procedure
#C42 = self::ConstClassWithF {foo:#C41}
#C43 = eval const core::bool::fromEnvironment(#C1)
#C44 = eval !const core::bool::fromEnvironment(#C1)
#C45 = eval const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9
#C46 = eval (const core::bool::fromEnvironment(#C2) ?{core::bool?} const core::bool::fromEnvironment(#C1) : #C9)!
#C47 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C48 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::C{}) as{ForNonNullableByDefault} self::B*}
#C49 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::A>?} #C9 : self::Class<self::A*>{self::A{}}
#C50 = eval const core::bool::fromEnvironment(#C33) ?{self::Class<self::B>?} #C9 : self::Class<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C51 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::A>?} #C9 : self::Subclass<self::A*>{(self::A{}) as{ForNonNullableByDefault} self::A*}
#C52 = eval const core::bool::fromEnvironment(#C33) ?{self::Subclass<self::B>?} #C9 : self::Subclass<self::B*>{(self::B{}) as{ForNonNullableByDefault} self::B*}
#C53 = eval self::Foo<core::int*>{saved:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), saved2:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), initialized:const core::bool::fromEnvironment(#C1, defaultValue: const core::bool::fromEnvironment(#C2)), value:#C19}
#C8 = eval const core::bool::fromEnvironment(#C2)
#C9 = true
#C10 = null
#C11 = eval #C8 ?{core::bool?} #C9 : #C10
#C12 = eval #C11!
#C13 = eval const core::bool::fromEnvironment(#C2, defaultValue: #C12)
#C14 = eval !#C13
#C15 = false
#C16 = eval #C13 ?{core::bool} #C9 : #C15
#C17 = eval #C13 == null
#C18 = eval #C17 ?{core::bool} #C9 : #C13
#C19 = eval #C13 && #C9
#C20 = eval #C13 || #C9
#C21 = eval #C13 || #C15
#C22 = 42
#C23 = eval self::Foo<core::int*>{saved:#C6, saved2:#C5, initialized:#C4, value:#C22}
#C24 = eval const core::bool::fromEnvironment(#C1)
#C25 = eval #C24 ?{core::Object} #C22 : #C9
#C26 = eval #C25 is{ForNonNullableByDefault} core::int
#C27 = eval #C26 ?{core::bool} #C9 : #C15
#C28 = <Null>[#C10]
#C29 = <core::int*>[#C22]
#C30 = <core::int*>{#C22}
#C31 = <core::int*, core::int*>{#C22:#C22)
#C32 = <core::List<core::int*>*>[#C29]
#C33 = <core::Set<core::int*>*>{#C30}
#C34 = <core::Map<core::int*, core::int*>*, core::int*>{#C31:#C22)
#C35 = <core::int*, core::Map<core::int*, core::int*>*>{#C22:#C31)
#C36 = eval const core::String::fromEnvironment(#C1)
#C37 = eval const _in::Symbol::•(#C36)
#C38 = #42
#C39 = "x"
#C40 = eval const core::bool::fromEnvironment(#C39)
#C41 = eval self::C{}
#C42 = eval #C41 as{ForNonNullableByDefault} self::B*
#C43 = eval self::Class<self::B*>{#C42}
#C44 = eval #C40 ?{self::Class<self::B>?} #C10 : #C43
#C45 = eval const core::bool::fromEnvironment(#C39)
#C46 = eval self::C{}
#C47 = eval #C46 as{ForNonNullableByDefault} self::B*
#C48 = eval self::Subclass<self::B*>{#C47}
#C49 = eval #C45 ?{self::Subclass<self::B>?} #C10 : #C48
#C50 = eval const core::bool::fromEnvironment(#C39)
#C51 = eval self::A{}
#C52 = eval self::Class<self::A*>{#C51}
#C53 = eval #C50 ?{self::Class<self::A>?} #C10 : #C52
#C54 = eval const core::bool::fromEnvironment(#C39)
#C55 = eval self::B{}
#C56 = eval #C55 as{ForNonNullableByDefault} self::B*
#C57 = eval self::Class<self::B*>{#C56}
#C58 = eval #C54 ?{self::Class<self::B>?} #C10 : #C57
#C59 = eval const core::bool::fromEnvironment(#C39)
#C60 = eval self::A{}
#C61 = eval #C60 as{ForNonNullableByDefault} self::A*
#C62 = eval self::Subclass<self::A*>{#C61}
#C63 = eval #C59 ?{self::Subclass<self::A>?} #C10 : #C62
#C64 = eval const core::bool::fromEnvironment(#C39)
#C65 = eval self::B{}
#C66 = eval #C65 as{ForNonNullableByDefault} self::B*
#C67 = eval self::Subclass<self::B*>{#C66}
#C68 = eval #C64 ?{self::Subclass<self::B>?} #C10 : #C67
#C69 = TypeLiteralConstant((core::int*, {named: core::int*}) →* core::int*)
#C70 = static-tearoff self::procedure
#C71 = self::ConstClassWithF {foo:#C70}
#C72 = eval const core::bool::fromEnvironment(#C1)
#C73 = eval !#C72
#C74 = eval const core::bool::fromEnvironment(#C2)
#C75 = eval #C74 ?{core::bool?} #C72 : #C10
#C76 = eval #C75!
}
Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:32:27 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:33:21 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:28:13 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:110:38 -> InstanceConstant(const Class<A*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:111:38 -> InstanceConstant(const Class<B*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:112:38 -> InstanceConstant(const Subclass<A*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:113:38 -> InstanceConstant(const Subclass<B*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:37:17 -> InstanceConstant(const Foo<int*>{Foo.saved: false, Foo.saved2: false, Foo.initialized: false, Foo.value: 42})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:37:17 -> InstanceConstant(const Foo<int*>{Foo.saved: false, Foo.saved2: false, Foo.initialized: false, Foo.value: 42})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:37:17 -> InstanceConstant(const Foo<int*>{Foo.saved: false, Foo.saved2: false, Foo.initialized: false, Foo.value: 42})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:137:9 -> InstanceConstant(const Class<A*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:138:9 -> InstanceConstant(const Class<B*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:139:9 -> InstanceConstant(const Subclass<A*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:140:9 -> InstanceConstant(const Subclass<B*>{})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:141:9 -> InstanceConstant(const Foo<int*>{Foo.saved: false, Foo.saved2: false, Foo.initialized: false, Foo.value: 42})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:142:9 -> InstanceConstant(const Foo<int*>{Foo.saved: false, Foo.saved2: false, Foo.initialized: false, Foo.value: 42})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:143:9 -> InstanceConstant(const Foo<int*>{Foo.saved: false, Foo.saved2: false, Foo.initialized: false, Foo.value: 42})
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:7:31 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:8:30 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various.dart:9:67 -> NullConstant(null)
@@ -23,7 +23,7 @@ static const field core::List<core::int> listConcatenation = #C11;
static const field core::Set<core::int> setConcatenation = #C13;
static const field core::Map<core::int, core::String> mapConcatenation = #C16;
static const field core::bool objectTypeLiteralIdentical = #C19;
static const field core::bool partialInstantiationIdentical = #C21;
static const field core::bool partialInstantiationIdentical = #C25;
static const field core::bool instanceIdentical = #C19;
static const field core::bool instance2Identical = #C19;
static const field core::bool functionTypeLiteralIdentical = #C19;
@@ -39,7 +39,7 @@ static const field core::bool setConcatenationIdentical = #C19;
static const field core::bool mapConcatenationIdentical = #C19;
static method main() → dynamic {
self::test(#C1, #C1);
self::test(#C3, #C22);
self::test(#C3, #C24);
self::test(#C5, #C5);
self::test(#C9, #C9);
self::test(#C10, #C10);
@@ -50,7 +50,7 @@ static method main() → dynamic {
self::test(#C13, #C13);
self::test(#C16, #C16);
self::test(true, #C19);
self::test(true, #C21);
self::test(true, #C25);
self::test(true, #C19);
self::test(true, #C19);
self::test(true, #C19);
@@ -81,8 +81,8 @@ class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstCo
;
}
static const field core::Type objectTypeLiteral = #C1;
static const field (core::Object?, core::Object?) → core::bool c2 = #C23;
static const field (core::int) → core::int partialInstantiation = #C22;
static const field (core::Object?, core::Object?) → core::bool c2 = #C26;
static const field (core::int) → core::int partialInstantiation = #C24;
static const field var::Class<core::int> instance = #C5;
static const field var::Class<dynamic> instance2 = #C8;
static const field core::Type functionTypeLiteral = #C9;
@@ -121,10 +121,13 @@ constants {
#C17 = null
#C18 = <dynamic, dynamic>{#C7:#C15, #C17:#C7)
#C19 = true
#C20 = static-tearoff var::id2
#C21 = eval const core::identical(#C3, const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>)
#C22 = eval const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>
#C23 = static-tearoff core::identical
#C20 = eval const core::bool::fromEnvironment(#C15)
#C21 = eval #C2<core::int>
#C22 = static-tearoff var::id2
#C23 = eval #C22<core::int>
#C24 = eval #C20 ?{(core::int) → core::int} #C21 : #C23
#C25 = eval const core::identical(#C3, #C24)
#C26 = static-tearoff core::identical
}
@@ -23,7 +23,7 @@ static const field core::List<core::int> listConcatenation = #C11;
static const field core::Set<core::int> setConcatenation = #C13;
static const field core::Map<core::int, core::String> mapConcatenation = #C16;
static const field core::bool objectTypeLiteralIdentical = #C19;
static const field core::bool partialInstantiationIdentical = #C21;
static const field core::bool partialInstantiationIdentical = #C25;
static const field core::bool instanceIdentical = #C19;
static const field core::bool instance2Identical = #C19;
static const field core::bool functionTypeLiteralIdentical = #C19;
@@ -39,7 +39,7 @@ static const field core::bool setConcatenationIdentical = #C19;
static const field core::bool mapConcatenationIdentical = #C19;
static method main() → dynamic {
self::test(#C1, #C1);
self::test(#C3, #C22);
self::test(#C3, #C24);
self::test(#C5, #C5);
self::test(#C9, #C9);
self::test(#C10, #C10);
@@ -50,7 +50,7 @@ static method main() → dynamic {
self::test(#C13, #C13);
self::test(#C16, #C16);
self::test(true, #C19);
self::test(true, #C21);
self::test(true, #C25);
self::test(true, #C19);
self::test(true, #C19);
self::test(true, #C19);
@@ -81,8 +81,8 @@ class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstCo
;
}
static const field core::Type objectTypeLiteral = #C1;
static const field (core::Object?, core::Object?) → core::bool c2 = #C23;
static const field (core::int) → core::int partialInstantiation = #C22;
static const field (core::Object?, core::Object?) → core::bool c2 = #C26;
static const field (core::int) → core::int partialInstantiation = #C24;
static const field var::Class<core::int> instance = #C5;
static const field var::Class<dynamic> instance2 = #C8;
static const field core::Type functionTypeLiteral = #C9;
@@ -121,10 +121,13 @@ constants {
#C17 = null
#C18 = <dynamic, dynamic>{#C7:#C15, #C17:#C7)
#C19 = true
#C20 = static-tearoff var::id2
#C21 = eval const core::identical(#C3, const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>)
#C22 = eval const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>
#C23 = static-tearoff core::identical
#C20 = eval const core::bool::fromEnvironment(#C15)
#C21 = eval #C2<core::int>
#C22 = static-tearoff var::id2
#C23 = eval #C22<core::int>
#C24 = eval #C20 ?{(core::int) → core::int} #C21 : #C23
#C25 = eval const core::identical(#C3, #C24)
#C26 = static-tearoff core::identical
}
@@ -23,7 +23,7 @@ static const field core::List<core::int> listConcatenation = #C11;
static const field core::Set<core::int> setConcatenation = #C13;
static const field core::Map<core::int, core::String> mapConcatenation = #C16;
static const field core::bool objectTypeLiteralIdentical = #C19;
static const field core::bool partialInstantiationIdentical = #C21;
static const field core::bool partialInstantiationIdentical = #C25;
static const field core::bool instanceIdentical = #C19;
static const field core::bool instance2Identical = #C19;
static const field core::bool functionTypeLiteralIdentical = #C19;
@@ -39,7 +39,7 @@ static const field core::bool setConcatenationIdentical = #C19;
static const field core::bool mapConcatenationIdentical = #C19;
static method main() → dynamic {
self::test(#C1, #C1);
self::test(#C3, #C22);
self::test(#C3, #C24);
self::test(#C5, #C5);
self::test(#C9, #C9);
self::test(#C10, #C10);
@@ -50,7 +50,7 @@ static method main() → dynamic {
self::test(#C13, #C13);
self::test(#C16, #C16);
self::test(true, #C19);
self::test(true, #C23);
self::test(true, #C25);
self::test(true, #C19);
self::test(true, #C19);
self::test(true, #C19);
@@ -81,8 +81,8 @@ class Class<T extends core::Object? = dynamic> extends core::Object /*hasConstCo
;
}
static const field core::Type objectTypeLiteral = #C1;
static const field (core::Object?, core::Object?) → core::bool c2 = #C24;
static const field (core::int) → core::int partialInstantiation = #C25;
static const field (core::Object?, core::Object?) → core::bool c2 = #C26;
static const field (core::int) → core::int partialInstantiation = #C24;
static const field var::Class<core::int> instance = #C5;
static const field var::Class<dynamic> instance2 = #C8;
static const field core::Type functionTypeLiteral = #C9;
@@ -121,17 +121,18 @@ constants {
#C17 = null
#C18 = <dynamic, dynamic>{#C7:#C15, #C17:#C7)
#C19 = true
#C20 = static-tearoff var::id2
#C21 = eval const core::identical(#C3, const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>)
#C22 = eval const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>
#C23 = eval const core::identical(#C3, const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>)
#C24 = static-tearoff core::identical
#C25 = eval const core::bool::fromEnvironment(#C15) ?{(core::int) → core::int} #C2<core::int> : #C20<core::int>
#C20 = eval const core::bool::fromEnvironment(#C15)
#C21 = eval #C2<core::int>
#C22 = static-tearoff var::id2
#C23 = eval #C22<core::int>
#C24 = eval #C20 ?{(core::int) → core::int} #C21 : #C23
#C25 = eval const core::identical(#C3, #C24)
#C26 = static-tearoff core::identical
}
Extra constant evaluation status:
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:15:28 -> InstantiationConstant(id2<int*>)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:37:5 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:59:34 -> InstantiationConstant(id2<int*>)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:71:14 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2.dart:37:5 -> BoolConstant(false)
Evaluated with empty environment: ConstantExpression @ org-dartlang-testcase:///various_2_lib.dart:20:39 -> InstantiationConstant(id2<int*>)
Extra constant evaluation: evaluated: 41, effectively constant: 4
-7
View File
@@ -12939,10 +12939,6 @@ abstract class Constant extends Node {
/// Gets the type of this constant.
DartType getType(StaticTypeContext context);
Expression asExpression() {
return new ConstantExpression(this);
}
}
abstract class PrimitiveConstant<T> extends Constant {
@@ -13886,9 +13882,6 @@ class UnevaluatedConstant extends Constant {
DartType getType(StaticTypeContext context) =>
expression.getStaticType(context);
@override
Expression asExpression() => expression;
@override
void toTextInternal(AstPrinter printer) {
printer.write('unevaluated{');
-3
View File
@@ -834,9 +834,6 @@ class VerifyingVisitor extends RecursiveResultVisitor<void> {
@override
void visitUnevaluatedConstant(UnevaluatedConstant constant) {
if (inUnevaluatedConstant) {
problem(currentParent, "UnevaluatedConstant in UnevaluatedConstant.");
}
bool savedInUnevaluatedConstant = inUnevaluatedConstant;
inUnevaluatedConstant = true;
TreeNode? oldParent = currentParent;
+9 -1
View File
@@ -25,7 +25,7 @@ import 'log.dart' show Logger, StdoutLogger, splitLines;
import 'multitest.dart' show MultitestTransformer, isError;
import 'expectation.dart' show Expectation, ExpectationSet;
import 'expectation.dart' show Expectation, ExpectationGroup, ExpectationSet;
typedef Future<ChainContext> CreateContext(
Chain suite, Map<String, String> environment);
@@ -148,6 +148,14 @@ abstract class ChainContext {
}
final Set<Expectation> expectedOutcomes = processExpectedOutcomes(
expectations.expectations(description.shortName), description);
bool shouldSkip = false;
for (Expectation expectation in expectedOutcomes) {
if (expectation.group == ExpectationGroup.Skip) {
shouldSkip = true;
break;
}
}
if (shouldSkip) continue;
final StringBuffer sb = new StringBuffer();
final Step? lastStep = steps.isNotEmpty ? steps.last : null;
final Iterator<Step> iterator = steps.iterator;