// Copyright (c) 2017, 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. // @dart = 2.7 /*member: Class.:[exact=Class]*/ class Class { /*member: Class.field:[exact=JSUInt31]*/ var field = 42; /*member: Class.method:[null]*/ method([/*[null|exact=JSUInt31]*/ a, /*[null|exact=JSUInt31]*/ b]) {} } /*member: main:[null]*/ main() { new Class(); statementOrderFieldAccess(null); statementOrderFieldUpdate(null); statementOrderInvocation(null); receiverVsArgument(null); argumentsOrder(null); operatorOrder(null); updateVsRhs(null); logicalOr(null); conditionalCondition(null); conditionalBothBranches(null); conditionalOneBranchOnly(null); } //////////////////////////////////////////////////////////////////////////////// // Accesses in statements. //////////////////////////////////////////////////////////////////////////////// /*member: statementOrderFieldAccess:[null]*/ @pragma('dart2js:assumeDynamic') statementOrderFieldAccess(/*[null|subclass=Object]*/ o) { o.field; o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Updates in statements. //////////////////////////////////////////////////////////////////////////////// /*member: statementOrderFieldUpdate:[null]*/ @pragma('dart2js:assumeDynamic') statementOrderFieldUpdate(/*[null|subclass=Object]*/ o) { o.field = 42; o. /*update: [subclass=Object]*/ field = 42; } //////////////////////////////////////////////////////////////////////////////// // Invocations in statements. //////////////////////////////////////////////////////////////////////////////// /*member: statementOrderInvocation:[null]*/ @pragma('dart2js:assumeDynamic') statementOrderInvocation(/*[null|subclass=Object]*/ o) { o.method(null); o. /*invoke: [subclass=Object]*/ method(null); } //////////////////////////////////////////////////////////////////////////////// // Access in argument before method call. //////////////////////////////////////////////////////////////////////////////// /*member: receiverVsArgument:[null]*/ @pragma('dart2js:assumeDynamic') receiverVsArgument(/*[null|subclass=Object]*/ o) { // TODO(johnniwinther): The arguments should refine the receiver. o.method(o.field); o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Access in multiple arguments. //////////////////////////////////////////////////////////////////////////////// /*member: argumentsOrder:[null]*/ @pragma('dart2js:assumeDynamic') argumentsOrder(/*[null|subclass=Object]*/ o) { // TODO(johnniwinther): The arguments should refine the receiver. o.method(o.field, o. /*[subclass=Object]*/ field); o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Access in both sides of an operator call. //////////////////////////////////////////////////////////////////////////////// /*member: operatorOrder:[null]*/ @pragma('dart2js:assumeDynamic') operatorOrder(/*[null|subclass=Object]*/ o) { o.field /*invoke: [exact=JSUInt31]*/ < o. /*[subclass=Object]*/ field; o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Assign after access in right-hand side. //////////////////////////////////////////////////////////////////////////////// /*member: updateVsRhs:[null]*/ @pragma('dart2js:assumeDynamic') updateVsRhs(/*[null|subclass=Object]*/ o) { // TODO(johnniwinther): The right-hand side should refine the left-hand side // receiver. o.field = o.field; o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Access in both sides of a logical or. //////////////////////////////////////////////////////////////////////////////// /*member: logicalOr:[null]*/ @pragma('dart2js:assumeDynamic') logicalOr(/*[null|subclass=Object]*/ o) { o.field || o. /*[subclass=Object]*/ field; o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Access in condition of a conditional expression. //////////////////////////////////////////////////////////////////////////////// /*member: conditionalCondition:[null]*/ @pragma('dart2js:assumeDynamic') conditionalCondition(/*[null|subclass=Object]*/ o) { o.field ? o. /*[subclass=Object]*/ field : o. /*[subclass=Object]*/ field; o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Access both branches of a conditional expression. //////////////////////////////////////////////////////////////////////////////// /*member: conditionalBothBranches:[null]*/ @pragma('dart2js:assumeDynamic') conditionalBothBranches(/*[null|subclass=Object]*/ o) { // ignore: DEAD_CODE true ? o.field : o.field; o. /*[subclass=Object]*/ field; } //////////////////////////////////////////////////////////////////////////////// // Access in only one branch of a conditional expression. //////////////////////////////////////////////////////////////////////////////// /*member: conditionalOneBranchOnly:[null]*/ @pragma('dart2js:assumeDynamic') conditionalOneBranchOnly(/*[null|subclass=Object]*/ o) { // ignore: DEAD_CODE true ? o.field : null; o.field; o. /*[subclass=Object]*/ field; }