// Copyright (c) 2020, 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. /*library: nnbd=true*/ library expressions; import 'dart:math' deferred as prefix; class Class { Class(); Class.named(); var field; get getter => 0; set setter(/*dynamic*/ _) {} method1() {} method2(/*dynamic*/ a) {} method3([/*dynamic*/ a]) {} method4(/*dynamic*/ a, [/*dynamic*/ b]) {} method5({/*dynamic*/ a}) {} method6(/*dynamic*/ a, {/*dynamic*/ b}) {} method7({/*dynamic*/ a, /*dynamic*/ b}) {} genericMethod1() {} genericMethod2() {} _privateMethod() {} static var staticField; static get staticGetter => 42; static set staticSetter(/*dynamic*/ _) {} static staticMethod() {} } class SubClass extends Class { /*member: SubClass.exprThis:this*/ exprThis() => this; /*normal|limited.member: SubClass.exprSuperFieldGet:super.{Class.field}*/ /*verbose.member: SubClass.exprSuperFieldGet:super.{expressions::Class.field}*/ exprSuperFieldGet() => super.field; /*normal|limited.member: SubClass.exprSuperGetterGet:super.{Class.getter}*/ /*verbose.member: SubClass.exprSuperGetterGet:super.{expressions::Class.getter}*/ exprSuperGetterGet() => super.getter; /*normal|limited.member: SubClass.exprSuperMethodTearOff:super.{Class.method1}*/ /*verbose.member: SubClass.exprSuperMethodTearOff:super.{expressions::Class.method1}*/ exprSuperMethodTearOff() => super.method1; /*normal|limited.member: SubClass.exprSuperFieldSet:super.{Class.field} = 42*/ /*verbose.member: SubClass.exprSuperFieldSet:super.{expressions::Class.field} = 42*/ exprSuperFieldSet() => super.field = 42; /*normal|limited.member: SubClass.exprSuperSetterSet:super.{Class.setter} = 42*/ /*verbose.member: SubClass.exprSuperSetterSet:super.{expressions::Class.setter} = 42*/ exprSuperSetterSet() => super.setter = 42; /*normal|limited.member: SubClass.exprSuperMethodInvocation:super.{Class.method1}()*/ /*verbose.member: SubClass.exprSuperMethodInvocation:super.{expressions::Class.method1}()*/ exprSuperMethodInvocation() => super.method1(); } class GenericClass { GenericClass(); GenericClass.named(); } var topLevelField; get topLevelGetter => 42; set topLevelSetter(/*dynamic*/ _) {} topLevelMethod() {} T genericTopLevelMethod1(T /*T%*/ t) => t; T genericTopLevelMethod2(T /*T%*/ t, S /*S%*/ s) => t; /*member: exprNullLiteral:null*/ exprNullLiteral() => null; /*member: exprBoolLiteralTrue:true*/ exprBoolLiteralTrue() => true; /*member: exprBoolLiteralFalse:false*/ exprBoolLiteralFalse() => false; /*member: exprIntLiteral:42*/ exprIntLiteral() => 42; /*member: exprDoubleLiteral:3.14*/ exprDoubleLiteral() => 3.14; /*member: exprStringLiteralEmpty:""*/ exprStringLiteralEmpty() => ""; /*member: exprStringLiteralNonEmpty:"foo"*/ exprStringLiteralNonEmpty() => "foo"; /*member: exprStringLiteralSingleQuote:"foo'bar'baz"*/ exprStringLiteralSingleQuote() => "foo'bar'baz"; /*member: exprStringLiteralDoubleQuote:"foo\"bar\"baz"*/ exprStringLiteralDoubleQuote() => 'foo"bar"baz'; /*member: exprStringLiteralSingleDoubleQuote:"foo\"bar'baz"*/ exprStringLiteralSingleDoubleQuote() => "foo\"bar\'baz"; /*member: exprStringLiteralEscapes:"\r\n\t\u0008\f\u0000"*/ exprStringLiteralEscapes() => "\r\n\t\b\f\u0000"; /*member: exprSymbolLiteral:#foo*/ exprSymbolLiteral() => #foo; /*normal|limited.member: exprPrivateSymbolLiteral:#_bar*/ /*verbose.member: exprPrivateSymbolLiteral:#expressions::_bar*/ exprPrivateSymbolLiteral() => #_bar; /*normal|limited.member: exprTypeLiteral:Object*/ /*verbose.member: exprTypeLiteral:dart.core::Object*/ exprTypeLiteral() => Object; /*member: exprVariableGet:variable*/ exprVariableGet(variable) => variable; /*member: exprVariableSet:variable = 42*/ exprVariableSet(variable) => variable = 42; /*normal|limited.member: exprInstanceFieldGet:variable.{Class.field}*/ /*verbose.member: exprInstanceFieldGet:variable.{expressions::Class.field}*/ exprInstanceFieldGet(Class variable) => variable.field; /*normal|limited.member: exprInstanceGetterGet:variable.{Class.getter}*/ /*verbose.member: exprInstanceGetterGet:variable.{expressions::Class.getter}*/ exprInstanceGetterGet(Class variable) => variable.getter; /*normal|limited.member: exprInstanceMethodTearOff:variable.{Class.method1}*/ /*verbose.member: exprInstanceMethodTearOff:variable.{expressions::Class.method1}*/ exprInstanceMethodTearOff(Class variable) => variable.method1; /*member: exprDynamicGet:variable.field*/ exprDynamicGet(variable) => variable.field; /*normal|limited.member: exprObjectGet:variable.{Object.runtimeType}*/ /*verbose.member: exprObjectGet:variable.{dart.core::Object.runtimeType}*/ exprObjectGet(variable) => variable.runtimeType; /*normal|limited.member: exprInstanceFieldSet:variable.{Class.field} = 42*/ /*verbose.member: exprInstanceFieldSet:variable.{expressions::Class.field} = 42*/ exprInstanceFieldSet(Class variable) => variable.field = 42; /*normal|limited.member: exprInstanceSetterSet:variable.{Class.setter} = 42*/ /*verbose.member: exprInstanceSetterSet:variable.{expressions::Class.setter} = 42*/ exprInstanceSetterSet(Class variable) => variable.setter = 42; /*member: exprDynamicSet:variable.field = 42*/ exprDynamicSet(variable) => variable.field = 42; /*normal|limited.member: exprInstanceInvocation1:variable.{Class.method1}()*/ /*verbose.member: exprInstanceInvocation1:variable.{expressions::Class.method1}()*/ exprInstanceInvocation1(Class variable) => variable.method1(); /*normal|limited.member: exprInstanceInvocation2:variable.{Class.method2}(42)*/ /*verbose.member: exprInstanceInvocation2:variable.{expressions::Class.method2}(42)*/ exprInstanceInvocation2(Class variable) => variable.method2(42); /*normal|limited.member: exprInstanceInvocation3a:variable.{Class.method3}()*/ /*verbose.member: exprInstanceInvocation3a:variable.{expressions::Class.method3}()*/ exprInstanceInvocation3a(Class variable) => variable.method3(); /*normal|limited.member: exprInstanceInvocation3b:variable.{Class.method3}(42)*/ /*verbose.member: exprInstanceInvocation3b:variable.{expressions::Class.method3}(42)*/ exprInstanceInvocation3b(Class variable) => variable.method3(42); /*normal|limited.member: exprInstanceInvocation4a:variable.{Class.method4}(42)*/ /*verbose.member: exprInstanceInvocation4a:variable.{expressions::Class.method4}(42)*/ exprInstanceInvocation4a(Class variable) => variable.method4(42); /*normal|limited.member: exprInstanceInvocation4b:variable.{Class.method4}(42, 87)*/ /*verbose.member: exprInstanceInvocation4b:variable.{expressions::Class.method4}(42, 87)*/ exprInstanceInvocation4b(Class variable) => variable.method4(42, 87); /*normal|limited.member: exprInstanceInvocation5a:variable.{Class.method5}()*/ /*verbose.member: exprInstanceInvocation5a:variable.{expressions::Class.method5}()*/ exprInstanceInvocation5a(Class variable) => variable.method5(); /*normal|limited.member: exprInstanceInvocation5b:variable.{Class.method5}(a: 42)*/ /*verbose.member: exprInstanceInvocation5b:variable.{expressions::Class.method5}(a: 42)*/ exprInstanceInvocation5b(Class variable) => variable.method5(a: 42); /*normal|limited.member: exprInstanceInvocation6a:variable.{Class.method6}(42)*/ /*verbose.member: exprInstanceInvocation6a:variable.{expressions::Class.method6}(42)*/ exprInstanceInvocation6a(Class variable) => variable.method6(42); /*normal|limited.member: exprInstanceInvocation6b:variable.{Class.method6}(42, b: 87)*/ /*verbose.member: exprInstanceInvocation6b:variable.{expressions::Class.method6}(42, b: 87)*/ exprInstanceInvocation6b(Class variable) => variable.method6(42, b: 87); /*normal|limited.member: exprInstanceInvocation7a:variable.{Class.method7}()*/ /*verbose.member: exprInstanceInvocation7a:variable.{expressions::Class.method7}()*/ exprInstanceInvocation7a(Class variable) => variable.method7(); /*normal|limited.member: exprInstanceInvocation7b:variable.{Class.method7}(a: 42)*/ /*verbose.member: exprInstanceInvocation7b:variable.{expressions::Class.method7}(a: 42)*/ exprInstanceInvocation7b(Class variable) => variable.method7(a: 42); /*normal|limited.member: exprInstanceInvocation7c:variable.{Class.method7}(b: 87)*/ /*verbose.member: exprInstanceInvocation7c:variable.{expressions::Class.method7}(b: 87)*/ exprInstanceInvocation7c(Class variable) => variable.method7(b: 87); /*normal|limited.member: exprInstanceInvocation7d:variable.{Class.method7}(a: 42, b: 87)*/ /*verbose.member: exprInstanceInvocation7d:variable.{expressions::Class.method7}(a: 42, b: 87)*/ exprInstanceInvocation7d(Class variable) => variable.method7(a: 42, b: 87); /*normal|limited.member: exprInstanceInvocation7e:variable.{Class.method7}(b: 87, a: 42)*/ /*verbose.member: exprInstanceInvocation7e:variable.{expressions::Class.method7}(b: 87, a: 42)*/ exprInstanceInvocation7e(Class variable) => variable.method7(b: 87, a: 42); /*normal|limited.member: exprGenericInvocation1a:variable.{Class.genericMethod1}()*/ /*verbose.member: exprGenericInvocation1a:variable.{expressions::Class.genericMethod1}()*/ exprGenericInvocation1a(Class variable) => variable.genericMethod1(); /*normal|limited.member: exprGenericInvocation1b:variable.{Class.genericMethod1}()*/ /*verbose.member: exprGenericInvocation1b:variable.{expressions::Class.genericMethod1}()*/ exprGenericInvocation1b(Class variable) => variable.genericMethod1(); /*normal|limited.member: exprGenericInvocation2a:variable.{Class.genericMethod2}()*/ /*verbose.member: exprGenericInvocation2a:variable.{expressions::Class.genericMethod2}()*/ exprGenericInvocation2a(Class variable) => variable.genericMethod2(); /*normal|limited.member: exprGenericInvocation2b:variable.{Class.genericMethod2}()*/ /*verbose.member: exprGenericInvocation2b:variable.{expressions::Class.genericMethod2}()*/ exprGenericInvocation2b(Class variable) => variable.genericMethod2(); /*member: exprDynamicInvocation:variable.method1()*/ exprDynamicInvocation(variable) => variable.method1(); /*normal|limited.member: exprObjectInvocation:variable.{Object.toString}()*/ /*verbose.member: exprObjectInvocation:variable.{dart.core::Object.toString}()*/ exprObjectInvocation(variable) => variable.toString(); /*normal|limited.member: exprPrivateInstanceInvocation:variable.{Class._privateMethod}()*/ /*verbose.member: exprPrivateInstanceInvocation:variable.{expressions::Class._privateMethod}()*/ exprPrivateInstanceInvocation(Class variable) => variable._privateMethod(); /*normal|limited.member: exprPrivateDynamicInvocation:variable._privateMethod()*/ /*verbose.member: exprPrivateDynamicInvocation:variable.expressions::_privateMethod()*/ exprPrivateDynamicInvocation(variable) => variable._privateMethod(); /*normal|limited.member: exprTopLevelFieldGet:topLevelField*/ /*verbose.member: exprTopLevelFieldGet:expressions::topLevelField*/ exprTopLevelFieldGet() => topLevelField; /*normal|limited.member: exprTopLevelGetterGet:topLevelGetter*/ /*verbose.member: exprTopLevelGetterGet:expressions::topLevelGetter*/ exprTopLevelGetterGet() => topLevelGetter; /*normal|limited.member: exprTopLevelMethodTearOff:topLevelMethod*/ /*verbose.member: exprTopLevelMethodTearOff:expressions::topLevelMethod*/ exprTopLevelMethodTearOff() => topLevelMethod; /*normal|limited.member: exprTopLevelFieldSet:topLevelField = 42*/ /*verbose.member: exprTopLevelFieldSet:expressions::topLevelField = 42*/ exprTopLevelFieldSet() => topLevelField = 42; /*normal|limited.member: exprTopLevelSetterSet:topLevelSetter = 42*/ /*verbose.member: exprTopLevelSetterSet:expressions::topLevelSetter = 42*/ exprTopLevelSetterSet() => topLevelSetter = 42; /*normal|limited.member: exprTopLevelMethodInvocation:topLevelMethod()*/ /*verbose.member: exprTopLevelMethodInvocation:expressions::topLevelMethod()*/ exprTopLevelMethodInvocation() => topLevelMethod(); /*normal|limited.member: exprStaticFieldGet:Class.staticField*/ /*verbose.member: exprStaticFieldGet:expressions::Class.staticField*/ exprStaticFieldGet() => Class.staticField; /*normal|limited.member: exprStaticGetterGet:Class.staticGetter*/ /*verbose.member: exprStaticGetterGet:expressions::Class.staticGetter*/ exprStaticGetterGet() => Class.staticGetter; /*normal|limited.member: exprStaticMethodTearOff:Class.staticMethod*/ /*verbose.member: exprStaticMethodTearOff:expressions::Class.staticMethod*/ exprStaticMethodTearOff() => Class.staticMethod; /*normal|limited.member: exprStaticFieldSet:Class.staticField = 42*/ /*verbose.member: exprStaticFieldSet:expressions::Class.staticField = 42*/ exprStaticFieldSet() => Class.staticField = 42; /*normal|limited.member: exprStaticSetterSet:Class.staticSetter = 42*/ /*verbose.member: exprStaticSetterSet:expressions::Class.staticSetter = 42*/ exprStaticSetterSet() => Class.staticSetter = 42; /*normal|limited.member: exprStaticMethodInvocation:Class.staticMethod()*/ /*verbose.member: exprStaticMethodInvocation:expressions::Class.staticMethod()*/ exprStaticMethodInvocation() => Class.staticMethod(); /*normal|limited.member: exprInstantiation1:genericTopLevelMethod1*/ /*verbose.member: exprInstantiation1:expressions::genericTopLevelMethod1*/ int Function(int) exprInstantiation1 = genericTopLevelMethod1; /*normal|limited.member: exprInstantiation2:genericTopLevelMethod2*/ /*verbose.member: exprInstantiation2:expressions::genericTopLevelMethod2*/ bool Function(bool, String) exprInstantiation2 = genericTopLevelMethod2; /*member: exprNot:!b*/ exprNot(bool b) => !b; /*member: exprAnd:a && b*/ exprAnd(bool a, bool b) => a && b; /*member: exprOr:a || b*/ exprOr(bool a, bool b) => a || b; /*normal|limited.member: exprConditional1:c ?{int} 0 : 1*/ /*verbose.member: exprConditional1:c ?{dart.core::int} 0 : 1*/ exprConditional1(bool c) => c ? 0 : 1; /*normal|limited.member: exprConditional2:c ?{List} [] : []*/ /*verbose.member: exprConditional2:c ?{dart.core::List} [] : []*/ exprConditional2(bool c) => c ? [] : []; /*member: exprStringConcatenation:"foo${a}bar${b}"*/ exprStringConcatenation(int a, int b) => 'foo${a}bar$b'; /*normal|limited.member: exprNew:new Class()*/ /*verbose.member: exprNew:new expressions::Class()*/ exprNew() => new Class(); /*normal|limited.member: exprNewNamed:new Class.named()*/ /*verbose.member: exprNewNamed:new expressions::Class.named()*/ exprNewNamed() => new Class.named(); /*normal|limited.member: exprNewGeneric:new GenericClass()*/ /*verbose.member: exprNewGeneric:new expressions::GenericClass()*/ exprNewGeneric() => new GenericClass(); /*normal|limited.member: exprNewGenericNamed:new GenericClass.named()*/ /*verbose.member: exprNewGenericNamed:new expressions::GenericClass.named()*/ exprNewGenericNamed() => new GenericClass.named(); /*normal|limited.member: exprIs:o is List*/ /*verbose.member: exprIs:o is{ForNonNullableByDefault} dart.core::List*/ exprIs(o) => o is List; /*normal|limited.member: exprAs:o as List*/ /*verbose.member: exprAs:o as{ForNonNullableByDefault} dart.core::List*/ exprAs(o) => o as List; /*member: exprNullCheck:o!*/ exprNullCheck(o) => o!; /*member: exprThrow:throw "foo"*/ exprThrow() => throw "foo"; /*member: exprEmptyList:[]*/ exprEmptyList() => []; /*normal|limited.member: exprEmptyTypedList:[]*/ /*verbose.member: exprEmptyTypedList:[]*/ exprEmptyTypedList() => []; /*normal|limited.member: exprList:[0, 1]*/ /*verbose.member: exprList:[0, 1]*/ exprList() => [0, 1]; /*normal|limited.member: exprEmptySet:{}*/ /*verbose.member: exprEmptySet:{}*/ exprEmptySet() => {}; /*normal|limited.member: exprSet:{0, 1}*/ /*verbose.member: exprSet:{0, 1}*/ exprSet() => {0, 1}; /*member: exprEmptyMap:{}*/ exprEmptyMap() => {}; /*normal|limited.member: exprEmptyTypedMap:{}*/ /*verbose.member: exprEmptyTypedMap:{}*/ exprEmptyTypedMap() => {}; /*normal|limited.member: exprMap:{0: "foo", 1: "bar"}*/ /*verbose.member: exprMap:{0: "foo", 1: "bar"}*/ exprMap() => {0: "foo", 1: "bar"}; /*member: exprAwait:await o*/ exprAwait(o) async => await o; /*member: exprLoadLibrary:prefix.loadLibrary()*/ exprLoadLibrary() => prefix.loadLibrary(); /*normal|limited.member: exprCheckLibraryIsLoaded:let final dynamic #0 = prefix.checkLibraryIsLoaded() in max(0, 1)*/ /*verbose.member: exprCheckLibraryIsLoaded:let final dynamic #0 = prefix.checkLibraryIsLoaded() in dart.math::max(0, 1)*/ exprCheckLibraryIsLoaded() => prefix.max(0, 1); /*normal|limited.member: exprFunctionExpression:int (int i) => i*/ /*verbose.member: exprFunctionExpression:dart.core::int (dart.core::int i) => i*/ exprFunctionExpression() => (int i) => i; /*normal.member: exprFunctionExpressionBlock:int (int i) { return i; }*/ /*verbose.member: exprFunctionExpressionBlock:dart.core::int (dart.core::int i) { return i; }*/ /*limited.member: exprFunctionExpressionBlock:int (int i) { return i; }*/ exprFunctionExpressionBlock() => (int i) { return i; }; /*normal|limited.member: exprGenericFunctionExpression:T% (T% t) => t*/ /*verbose.member: exprGenericFunctionExpression:T% (T% t) => t*/ exprGenericFunctionExpression() => (T t) => t; /*normal.member: exprGenericFunctionExpressionBlock:T% (T% t) { return t; }*/ /*verbose.member: exprGenericFunctionExpressionBlock:T% (T% t) { return t; }*/ /*limited.member: exprGenericFunctionExpressionBlock:T% (T% t) { return t; }*/ exprGenericFunctionExpressionBlock() => (T t) { return t; }; /*normal|limited.member: exprNullAware:let final Class? #0 = variable in #0 == null ?{dynamic} null : #0{Class}.{Class.field}*/ /*verbose.member: exprNullAware:let final expressions::Class? #0 = variable in #0 == null ?{dynamic} null : #0{expressions::Class}.{expressions::Class.field}*/ exprNullAware(Class? variable) => variable?.field; /*normal|limited.member: exprIfNull:let final int? #0 = i in #0 == null ?{int} 42 : #0{int}*/ /*verbose.member: exprIfNull:let final dart.core::int? #0 = i in #0 == null ?{dart.core::int} 42 : #0{dart.core::int}*/ exprIfNull(int? i) => i ?? 42; /*normal|limited.member: exprNestedDeep:[1, [2, [3, [4]]]]*/ /*verbose.member: exprNestedDeep:[1, [2, [3, [4]]]]*/ exprNestedDeep() => [ 1, [ 2, [ 3, [4] ] ] ]; /*normal.member: exprNestedTooDeep:[1, [2, [3, [4, [5]]]]]*/ /*verbose.member: exprNestedTooDeep:[1, [2, [3, [4, [5]]]]]*/ /*limited.member: exprNestedTooDeep:[1, [2, [3, [4, [...]]]]]*/ exprNestedTooDeep() => [ 1, [ 2, [ 3, [ 4, [5] ] ] ] ]; /*normal|limited.member: exprManySiblings:[1, 2, 3, 4]*/ /*verbose.member: exprManySiblings:[1, 2, 3, 4]*/ exprManySiblings() => [1, 2, 3, 4]; /*normal.member: exprTooManySiblings:[1, 2, 3, 4, 5]*/ /*verbose.member: exprTooManySiblings:[1, 2, 3, 4, 5]*/ /*limited.member: exprTooManySiblings:[...]*/ exprTooManySiblings() => [1, 2, 3, 4, 5]; /*normal|limited.member: exprPrecedence1:1.{int.unary-}().{num.*}(2).{num.+}(3.{num./}(4)).{double.-}(5)*/ /*verbose.member: exprPrecedence1:1.{dart.core::int.unary-}().{dart.core::num.*}(2).{dart.core::num.+}(3.{dart.core::num./}(4)).{dart.core::double.-}(5)*/ exprPrecedence1() => -1 * 2 + 3 / 4 - 5; /*normal|limited.member: exprPrecedence2:1.{num.*}(2.{num.+}(3)).{num./}(4.{num.-}(5)).{double.unary-}()*/ /*verbose.member: exprPrecedence2:1.{dart.core::num.*}(2.{dart.core::num.+}(3)).{dart.core::num./}(4.{dart.core::num.-}(5)).{dart.core::double.unary-}()*/ exprPrecedence2() => -(1 * (2 + 3) / (4 - 5)); /*normal|limited.member: exprPrecedence3:b ?{int} 0 : 1.{num.+}(2)*/ /*verbose.member: exprPrecedence3:b ?{dart.core::int} 0 : 1.{dart.core::num.+}(2)*/ exprPrecedence3(bool b) => b ? 0 : 1 + 2; /*normal|limited.member: exprPrecedence4:(b ?{int} 0 : 1).{num.+}(2)*/ /*verbose.member: exprPrecedence4:(b ?{dart.core::int} 0 : 1).{dart.core::num.+}(2)*/ exprPrecedence4(bool b) => (b ? 0 : 1) + 2; /*member: exprAssignmentEqualsNull1:(a = b) == null*/ exprAssignmentEqualsNull1(String a, String b) => (a = b) == null; /*member: exprAssignmentEqualsNull2:a = b == null*/ exprAssignmentEqualsNull2(bool a, String b) => a = b == null; /*member: exprAssignmentEqualsNull3:a = b == null*/ exprAssignmentEqualsNull3(bool a, String b) => a = (b == null); /*member: exprAssignmentEquals1:(a = b) == c*/ exprAssignmentEquals1(String a, String b, String c) => (a = b) == c; /*member: exprAssignmentEquals2:a = b == c*/ exprAssignmentEquals2(bool a, String b, String c) => a = b == c; /*member: exprAssignmentEquals3:a = b == c*/ exprAssignmentEquals3(bool a, String b, String c) => a = (b == c);