| Index: test/codegen/lib/mirrors/generic_bounded_test.dart
 | 
| diff --git a/test/codegen/lib/mirrors/generic_bounded_test.dart b/test/codegen/lib/mirrors/generic_bounded_test.dart
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..3cfac14d967ac5603326569d513a16617d58e627
 | 
| --- /dev/null
 | 
| +++ b/test/codegen/lib/mirrors/generic_bounded_test.dart
 | 
| @@ -0,0 +1,83 @@
 | 
| +// Copyright (c) 2013, 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 test.generic_bounded;
 | 
| +
 | 
| +import 'dart:mirrors';
 | 
| +
 | 
| +import 'package:expect/expect.dart';
 | 
| +
 | 
| +import 'generics_helper.dart';
 | 
| +
 | 
| +class Super<T extends num> {}
 | 
| +
 | 
| +class Fixed extends Super<int> {}
 | 
| +class Generic<R> extends Super<R> {}  /// 02: static type warning
 | 
| +class Malbounded extends Super<String> {} /// 01: static type warning
 | 
| +
 | 
| +bool inCheckedMode() {
 | 
| +  try {
 | 
| +    var s = 'string';
 | 
| +    int i = s;
 | 
| +  } catch(e) {
 | 
| +    return true;
 | 
| +  }
 | 
| +  return false;
 | 
| +}
 | 
| +
 | 
| +main() {
 | 
| +  ClassMirror superDecl = reflectClass(Super);
 | 
| +  ClassMirror superOfInt = reflectClass(Fixed).superclass;
 | 
| +  ClassMirror genericDecl = reflectClass(Generic);  /// 02: continued
 | 
| +  ClassMirror superOfR = genericDecl.superclass;  /// 02: continued
 | 
| +  ClassMirror genericOfDouble = reflect(new Generic<double>()).type;  /// 02: continued
 | 
| +  ClassMirror superOfDouble = genericOfDouble.superclass;  /// 02: continued
 | 
| +
 | 
| +  try {
 | 
| +    ClassMirror genericOfBool = reflect(new Generic<bool>()).type;  /// 02: static type warning
 | 
| +    ClassMirror superOfBool = genericOfBool.superclass;  /// 02: continued
 | 
| +    Expect.isFalse(genericOfBool.isOriginalDeclaration);  /// 02: continued
 | 
| +    Expect.isFalse(superOfBool.isOriginalDeclaration);  /// 02: continued
 | 
| +    typeParameters(genericOfBool, [#R]);  /// 02: continued
 | 
| +    typeParameters(superOfBool, [#T]);  /// 02: continued
 | 
| +    typeArguments(genericOfBool, [reflectClass(bool)]);  /// 02: continued
 | 
| +    typeArguments(superOfBool, [reflectClass(bool)]);  /// 02: continued
 | 
| +    Expect.isFalse(inCheckedMode()); /// 02: continued
 | 
| +  } on TypeError catch(e) {
 | 
| +    Expect.isTrue(inCheckedMode());
 | 
| +  }
 | 
| +
 | 
| +  ClassMirror superOfString = reflectClass(Malbounded).superclass;  /// 01: continued
 | 
| +
 | 
| +  Expect.isTrue(superDecl.isOriginalDeclaration);
 | 
| +  Expect.isFalse(superOfInt.isOriginalDeclaration);
 | 
| +  Expect.isTrue(genericDecl.isOriginalDeclaration);  /// 02: continued
 | 
| +  Expect.isFalse(superOfR.isOriginalDeclaration);  /// 02: continued
 | 
| +  Expect.isFalse(genericOfDouble.isOriginalDeclaration);  /// 02: continued
 | 
| +  Expect.isFalse(superOfDouble.isOriginalDeclaration);  /// 02: continued
 | 
| +
 | 
| +  Expect.isFalse(superOfString.isOriginalDeclaration);  /// 01: continued
 | 
| +
 | 
| +  TypeVariableMirror tFromSuper = superDecl.typeVariables.single;
 | 
| +  TypeVariableMirror rFromGeneric = genericDecl.typeVariables.single;  /// 02: continued
 | 
| +
 | 
| +  Expect.equals(reflectClass(num), tFromSuper.upperBound);
 | 
| +  Expect.equals(reflectClass(Object), rFromGeneric.upperBound);  /// 02: continued
 | 
| +
 | 
| +  typeParameters(superDecl, [#T]);
 | 
| +  typeParameters(superOfInt, [#T]);
 | 
| +  typeParameters(genericDecl, [#R]);  /// 02: continued
 | 
| +  typeParameters(superOfR, [#T]);  /// 02: continued
 | 
| +  typeParameters(genericOfDouble, [#R]);  /// 02: continued
 | 
| +  typeParameters(superOfDouble, [#T]);  /// 02: continued
 | 
| +  typeParameters(superOfString, [#T]);  /// 01: continued
 | 
| +
 | 
| +  typeArguments(superDecl, []);
 | 
| +  typeArguments(superOfInt, [reflectClass(int)]);
 | 
| +  typeArguments(genericDecl, []);  /// 02: continued
 | 
| +  typeArguments(superOfR, [rFromGeneric]);  /// 02: continued
 | 
| +  typeArguments(genericOfDouble, [reflectClass(double)]);  /// 02: continued
 | 
| +  typeArguments(superOfDouble, [reflectClass(double)]);  /// 02: continued
 | 
| +  typeArguments(superOfString, [reflectClass(String)]);  /// 01: continued
 | 
| +}
 | 
| 
 |