| Index: frog/tests/leg_only/bailout_test.dart
|
| ===================================================================
|
| --- frog/tests/leg_only/bailout_test.dart (revision 8644)
|
| +++ frog/tests/leg_only/bailout_test.dart (working copy)
|
| @@ -1,219 +0,0 @@
|
| -// Copyright (c) 2012, 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.
|
| -
|
| -var myString;
|
| -
|
| -String ifBailout(test) {
|
| - if (test) {
|
| - // Share the same variable for the type inference.
|
| - var o = myString;
|
| - // Make sure the type inference wants an array.
|
| - if (false) o[1] = 2;
|
| - return '${o[0]} bailout';
|
| - }
|
| - return '${myString[0]} no bailout';
|
| -}
|
| -
|
| -String ifElseBailout(test) {
|
| - if (test) {
|
| - // Share the same variable for the type inference.
|
| - var o = myString;
|
| - // Make sure the type inference wants an array.
|
| - if (false) o[1] = 2;
|
| - return '${o[0]} if bailout';
|
| - } else {
|
| - // Share the same variable for the type inference.
|
| - var o = myString;
|
| - // Make sure the type inference wants an array.
|
| - if (false) o[1] = 2;
|
| - return '${o[0]} else bailout';
|
| - }
|
| -}
|
| -
|
| -void forBailout() {
|
| - var n = myString.length;
|
| - var res = '';
|
| - for (int i = 0; i < n; i++) {
|
| - var o = myString;
|
| - if (false) o[1] = 2;
|
| - res += o[i];
|
| - }
|
| - return res;
|
| -}
|
| -
|
| -void forInBailout() {
|
| - var n = myString.length;
|
| - var res = '';
|
| - for (int i in myString.charCodes()) {
|
| - var o = myString;
|
| - if (false) o[1] = 2;
|
| - res += new String.fromCharCodes([i]);
|
| - }
|
| - return res;
|
| -}
|
| -
|
| -void innerForBailout() {
|
| - var n = myString.length;
|
| - var res = '';
|
| - for (int i = 0; i < 2; i++) {
|
| - for (int j = 0; j < n; j++) {
|
| - var o = myString;
|
| - if (false) o[1] = 2;
|
| - res += o[j];
|
| - }
|
| - }
|
| - return res;
|
| -}
|
| -
|
| -void whileBailout() {
|
| - var n = myString.length;
|
| - var res = '';
|
| - var i = 0;
|
| - while (i < n) {
|
| - var o = myString;
|
| - if (false) o[1] = 2;
|
| - res += o[i];
|
| - i++;
|
| - }
|
| - return res;
|
| -}
|
| -
|
| -void doWhileBailout() {
|
| - var n = myString.length;
|
| - var res = '';
|
| - var i = 0;
|
| - do {
|
| - var o = myString;
|
| - if (false) o[1] = 2;
|
| - res += o[i];
|
| - i++;
|
| - } while (i < n);
|
| - return res;
|
| -}
|
| -
|
| -void phiBailout() {
|
| - var prev = -1;
|
| - bool inside = false;
|
| - for (int i = 0; i < 2; i++) {
|
| - var o = myString;
|
| - // prev will be a phi converted to a local, and if we're not
|
| - // careful, the bailout target may not have the right value for
|
| - // it.
|
| - if (prev != -1) {
|
| - inside = true;
|
| - if (false) o[0] = 1;
|
| - print(o[0]);
|
| - Expect.equals(0, prev);
|
| - }
|
| - prev = i;
|
| - }
|
| - Expect.isTrue(inside);
|
| -}
|
| -
|
| -int fibonacci(int n) {
|
| - int a = 0, b = 1, i = 0;
|
| - // i, a, b will become phis, and then locals. The i++ creates a
|
| - // load/store sequence that we must be careful with.
|
| - while (i++ < n) {
|
| - a = a + b;
|
| - b = a - b;
|
| - var o = myString;
|
| - if (false) o[0] = 2;
|
| - print(o[0]);
|
| - }
|
| - return a;
|
| -}
|
| -
|
| -void ifPhiBailout1(int bailout) {
|
| - var a = 0;
|
| - var c = 0;
|
| -
|
| - if (a == 0) c = a++;
|
| - else c = a--;
|
| -
|
| - if (bailout == 1) {
|
| - var o = myString;
|
| - if (false) o[0] = 2;
|
| - print(o[0]);
|
| - }
|
| -
|
| - Expect.equals(1, a);
|
| - Expect.equals(0, c);
|
| -
|
| - if (a == 0) c = a++;
|
| - else c = a--;
|
| -
|
| - if (bailout == 2) {
|
| - var o = myString;
|
| - if (false) o[0] = 2;
|
| - print(o[0]);
|
| - }
|
| -
|
| - Expect.equals(0, a);
|
| - Expect.equals(1, c);
|
| -}
|
| -
|
| -void ifPhiBailout2(int bailout) {
|
| - var a = 0;
|
| - var c = 0;
|
| -
|
| - if (a == 0) {
|
| - c = a;
|
| - a = a + 1;
|
| - } else {
|
| - c = a;
|
| - a = a - 1;
|
| - }
|
| -
|
| - if (bailout == 1) {
|
| - var o = myString;
|
| - if (false) o[0] = 2;
|
| - print(o[0]);
|
| - }
|
| -
|
| - Expect.equals(1, a);
|
| - Expect.equals(0, c);
|
| -
|
| - if (a == 0) {
|
| - c = a;
|
| - a = a + 1;
|
| - } else {
|
| - c = a;
|
| - a = a - 1;
|
| - }
|
| -
|
| - if (bailout == 2) {
|
| - var o = myString;
|
| - if (false) o[0] = 2;
|
| - print(o[0]);
|
| - }
|
| -
|
| - Expect.equals(0, a);
|
| - Expect.equals(1, c);
|
| -}
|
| -
|
| -main() {
|
| - myString = '1';
|
| - Expect.equals('1 no bailout', ifBailout(false));
|
| - Expect.equals('1 bailout', ifBailout(true));
|
| -
|
| - Expect.equals('1 else bailout', ifElseBailout(false));
|
| - Expect.equals('1 if bailout', ifElseBailout(true));
|
| -
|
| - myString = '1234';
|
| - Expect.equals('1234', forBailout());
|
| - Expect.equals('1234', forInBailout());
|
| - Expect.equals('12341234', innerForBailout());
|
| -
|
| - Expect.equals('1234', whileBailout());
|
| - Expect.equals('1234', doWhileBailout());
|
| -
|
| - Expect.equals(102334155, fibonacci(40));
|
| -
|
| - phiBailout();
|
| - ifPhiBailout1(1);
|
| - ifPhiBailout1(2);
|
| - ifPhiBailout2(1);
|
| - ifPhiBailout2(2);
|
| -}
|
|
|