Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(421)

Unified Diff: dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart

Issue 11859012: Change how to opt-in to dart2js mirrors. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address review comments Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
diff --git a/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart b/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
index 58d1549657189a9549295cf67a55aae2e81c967f..73328e8d7310ed4217ddb1349c544111516d04db 100644
--- a/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
+++ b/dart/sdk/lib/_internal/compiler/implementation/lib/mirrors_patch.dart
@@ -2,9 +2,24 @@
// 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.
-/**
- * Patch library for dart:mirrors.
- */
+// Patch library for dart:mirrors.
+
+// Yeah, seriously: mirrors in dart2js are experimental...
+const String _MIRROR_OPT_IN_MESSAGE = """
+
+This program is using an experimental feature called \"mirrors\". As
+currently implemented, mirrors do not work with minification, and will
+cause spurious errors depending on how code was optimized.
+
+The authors of this program are aware of these problems and have
+decided the thrill of using an experimental feature is outweighing the
+risks. Furthermore, the authors of this program understand that
+long-term, to fix the problems mentioned above, mirrors may have
+negative impact on size and performance of Dart programs compiled to
+JavaScript.
+""";
+
+bool _mirrorsEnabled = false;
/**
* Stub class for the mirror system.
@@ -20,6 +35,11 @@ patch Future<MirrorSystem> mirrorSystemOf(SendPort port) {
}
patch InstanceMirror reflect(Object reflectee) {
+ if (!_mirrorsEnabled && (_MIRROR_OPT_IN_MESSAGE == reflectee)) {
+ // Turn on mirrors and warn that it is an experimental feature.
+ _mirrorsEnabled = true;
+ print(reflectee);
+ }
_ensureEnabled();
return new _InstanceMirror(reflectee);
}
@@ -87,6 +107,6 @@ class _ClassMirror extends ClassMirror {
}
_ensureEnabled() {
- if (Primitives.mirrorsEnabled) return;
+ if (_mirrorsEnabled) return;
throw new UnsupportedError('dart:mirrors is an experimental feature');
}

Powered by Google App Engine
This is Rietveld 408576698