| // 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 |
| |
| // Test file for testing source mappings of various expression and statements. |
| |
| main() { |
| throwStatement(); |
| whileLoop(true); |
| forLoop(false); |
| forInLoop([1]); |
| forInLoop([1, 2]); |
| forInLoopBreak([1]); |
| forInLoopBreak([1, 2]); |
| forInLoopContinue([1]); |
| forInLoopContinue([1, 2]); |
| forInLoopEmpty([]); |
| forInLoopNull(null); |
| doLoop(true); |
| stringInterpolation(0); |
| stringInterpolation(null); |
| boxing(); |
| captureTwice(); |
| var c = new Class(); |
| equals(c, 0); |
| c.property1 = 1; |
| c.property2 = 2; |
| equals(c, null); |
| c.captureTwice(); |
| equals2(c, null); |
| equals2(c, c); |
| var c2 = new Class2(); |
| c2.field1 = new Class2(); |
| c2.field2 = new Class2(); |
| c2 == c2.field1; |
| new Class3(87); |
| switchStatement(1); |
| switchStatement(0); |
| switchStatementConst(const Const(0)); |
| switchStatementConst(const Const(1)); |
| switchStatementBreak(0); |
| switchStatementBreak(1); |
| switchStatementBreakContinue(0); |
| switchStatementBreakContinue(1); |
| isInt(null); |
| isInt(0); |
| isDouble(null); |
| isDouble(0.5); |
| isBool(null); |
| isBool(true); |
| isString(null); |
| isString(''); |
| asString(0); |
| asString(''); |
| isList([]); |
| isList(null); |
| isListOfString(<String>[]); |
| isListOfString(<int>[]); |
| tryCatch(); |
| tryOnCatch(); |
| } |
| |
| throwStatement() { |
| throw 'foo'; |
| } |
| |
| whileLoop(local) { |
| while (local) { |
| print(local); |
| } |
| } |
| |
| forLoop(local) { |
| for (; local;) { |
| print(local); |
| } |
| } |
| |
| forInLoop(local) { |
| for (var e in local) { |
| print(e); |
| } |
| } |
| |
| forInLoopBreak(local) { |
| for (var e in local) { |
| if (e == 1) { |
| break; |
| } |
| print(e); |
| } |
| } |
| |
| forInLoopContinue(local) { |
| for (var e in local) { |
| if (e == 1) { |
| continue; |
| } |
| print(e); |
| } |
| } |
| |
| forInLoopEmpty(local) { |
| for (var e in local) { |
| print(e); |
| } |
| } |
| |
| forInLoopNull(local) { |
| for (var e in local) { |
| print(e); |
| } |
| } |
| |
| doLoop(local) { |
| do { |
| print(local); |
| } while (local); |
| } |
| |
| stringInterpolation(a) { |
| // TODO(johnniwinther): Handle interpolation of `a` itself. |
| print('${a()}'); |
| } |
| |
| boxing() { |
| var b = 0; |
| () { |
| b = 2; |
| }(); |
| return b; |
| } |
| |
| captureTwice() { |
| var b = 0; |
| () { |
| return b + b; |
| }(); |
| return b; |
| } |
| |
| class Class { |
| var property1; |
| var property2; |
| |
| captureTwice() { |
| return () { |
| return property1 == property2; |
| }; |
| } |
| } |
| |
| equals(a, b) { |
| return a.property1 == b; |
| } |
| |
| equals2(a, b) { |
| return b != null && a.property1 == b.property1 && a.property2 == b.property2; |
| } |
| |
| class Class2 { |
| var field1; |
| var field2; |
| |
| operator ==(other) { |
| return other != null && field1 == other.field1 && field2 == other.field2; |
| } |
| } |
| |
| class Class3 { |
| var field1; |
| var field2; |
| |
| Class3(this.field1) { |
| this.field2 = 42; |
| } |
| } |
| |
| switchStatement(a) { |
| switch (a) { |
| case 0: |
| return 1; |
| case 1: |
| return 2; |
| case 2: |
| return 3; |
| } |
| } |
| |
| class Const { |
| final int value; |
| |
| const Const(this.value); |
| } |
| |
| switchStatementConst(a) { |
| switch (a) { |
| case const Const(0): |
| return 1; |
| case const Const(2): |
| return 2; |
| case const Const(2): |
| return 3; |
| } |
| } |
| |
| switchStatementBreak(a) { |
| switch (a) { |
| case 0: |
| break; |
| case 1: |
| return 2; |
| case 2: |
| break; |
| } |
| } |
| |
| switchStatementBreakContinue(a) { |
| switch (a) { |
| case 0: |
| break; |
| label: |
| case 1: |
| return 2; |
| case 2: |
| continue label; |
| } |
| } |
| |
| isInt(e) { |
| e = e is int; |
| print(e); |
| return e; |
| } |
| |
| isDouble(e) { |
| e = e is double; |
| print(e); |
| return e; |
| } |
| |
| isBool(e) { |
| e = e is bool; |
| print(e); |
| return e; |
| } |
| |
| isString(e) { |
| e = e is String; |
| print(e); |
| return e; |
| } |
| |
| isList(e) { |
| e = e is List; |
| print(e); |
| return e; |
| } |
| |
| isListOfString(e) { |
| e = e is List<String>; |
| print(e); |
| return e; |
| } |
| |
| asString(e) { |
| e = e as String; |
| print(e); |
| return e; |
| } |
| |
| tryCatch() { |
| try { |
| throw ''; |
| } catch (e) { |
| print(e); |
| } |
| } |
| |
| tryOnCatch() { |
| try { |
| throw ''; |
| } on String catch (e) { |
| print(e); |
| } on int catch (e) { |
| print(e); |
| } |
| } |