// TODO(multitest): This was automatically migrated from a multitest and may
// contain strange or dead code.

// Copyright (c) 2014, 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 test program for the "is" and "as" operator with malformed type.

import "package:expect/expect.dart";

testEval(x) {
  return x;
}

test99(e) {
  // Test that a runtime error is thrown when the 'is' operator checks for a
  // malformed type.

}

test98(e) {
  // Test that a runtime error is thrown when the 'as' operator checks for a
  // malformed type.

}

test97(e) {
    // Check that the remaining expression after the type test
    // with malformed type is parsed, but not executed at runtime.
    // Regression test for issue 16985.

}

test96(e) {
    // Check that the remaining expression after the type test
    // with malformed type is parsed, but not executed at runtime.
    // Regression test for issue 16985.

}

test95(e) {
  // Check that the type-tested expression is evaluated before the
  // runtime error is thrown.

}

test94(e) {
  // Check that the type-tested expression is evaluated before the
  // runtime error is thrown.

}

main() {






}
