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

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

Issue 16154017: Rename RuntimeError to CyclicIntializationError, as per spec. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 6 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: sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
diff --git a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
index ab36275286da195ec31e8e5a5ba009c5dc01cc14..de5a37d24d31611d1da2648ec2eaf94b8a7af313 100644
--- a/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
+++ b/sdk/lib/_internal/compiler/implementation/lib/js_helper.dart
@@ -9,12 +9,9 @@ import 'dart:_foreign_helper' show DART_CLOSURE_TO_JS,
JS,
JS_CALL_IN_ISOLATE,
JS_CURRENT_ISOLATE,
- JS_CURRENT_ISOLATE_CONTEXT,
JS_DART_OBJECT_CONSTRUCTOR,
- JS_IS_INDEXABLE_FIELD_NAME,
- JS_OBJECT_CLASS_NAME,
- JS_OPERATOR_AS_PREFIX,
JS_OPERATOR_IS_PREFIX,
+ JS_OPERATOR_AS_PREFIX,
RAW_DART_FUNCTION_REF;
import 'dart:_interceptors';
import "dart:_collection-dev" as _symbol_dev;
@@ -34,7 +31,32 @@ bool isJsIndexable(var object, var record) {
var result = dispatchRecordIndexability(record);
if (result != null) return result;
}
- return object is JavaScriptIndexingBehavior;
+ return isJsIndexableSlow(object);
+}
+
+// We keep the slow path of the indexability check in a separate method
+// to get better code generated for the fast path and to increase the
+// chance of having it inlined.
+bool isJsIndexableSlow(var object) {
+ bool result = object is JavaScriptIndexingBehavior;
+ var record = getDispatchProperty(object);
+ if (record == null) return result;
+ // This is intentionally written to have two return points, so we
+ // will not inline the slow path function into the fast one.
+ setDispatchRecordIndexability(record, result);
+ return result;
+}
+
+checkMutable(list, reason) {
+ if (JS('bool', r'!!(#.immutable$list)', list)) {
+ throw new UnsupportedError(reason);
+ }
+}
+
+checkGrowable(list, reason) {
+ if (JS('bool', r'!!(#.fixed$length)', list)) {
+ throw new UnsupportedError(reason);
+ }
}
String S(value) {
@@ -145,12 +167,12 @@ class JSInvocationMirror implements Invocation {
class Primitives {
static int objectHashCode(object) {
- int hash = JS('int|Null', r'#.$identityHash', object);
+ int hash = JS('var', r'#.$identityHash', object);
if (hash == null) {
hash = JS('int', '(Math.random() * 0x3fffffff) | 0');
JS('void', r'#.$identityHash = #', object, hash);
}
- return JS('int', '#', hash);
+ return hash;
}
/**
@@ -296,7 +318,7 @@ class Primitives {
/// Returns the type of [object] as a string (including type arguments).
static String objectTypeName(Object object) {
- String name = constructorNameFallback(getInterceptor(object));
+ String name = constructorNameFallback(object);
if (name == 'Object') {
// Try to decompile the constructor by turning it into a string
// and get the name out of that. If the decompiled name is a
@@ -575,7 +597,8 @@ class Primitives {
if (JS('bool', '# == "num"', int)) return const JSNumber();
if (JS('bool', '# == "bool"', int)) return const JSBool();
if (JS('bool', '# == "List"', int)) return const JSArray();
- return JS('var', '#[#]', JS_CURRENT_ISOLATE(), className);
+ // TODO(ahe): How to safely access $?
+ return JS('var', r'$[#]', className);
}
static bool identicalImplementation(a, b) {
@@ -930,7 +953,7 @@ convertDartClosureToJS(closure, int arity) {
// Capture the current isolate now. Remember that "#"
// in JS is simply textual substitution of compiled
// expressions.
- JS_CURRENT_ISOLATE_CONTEXT(),
+ JS_CURRENT_ISOLATE(),
DART_CLOSURE_TO_JS(invokeClosure));
JS('void', r'#.$identity = #', closure, function);
@@ -1444,5 +1467,15 @@ void throwNoSuchMethod(obj, name, arguments, expectedArgumentNames) {
* field that is currently being initialized.
*/
Johnni Winther 2013/06/04 09:58:52 What is the reason for all the changes above?
Lasse Reichstein Nielsen 2013/06/04 10:21:08 Looks like a really bad merge.
void throwCyclicInit(String staticName) {
- throw new RuntimeError("Cyclic initialization for static $staticName");
+ throw new CyclicInitializationError(
+ "Cyclic initialization for static $staticName");
+}
+
+/**
+ * Error thrown when a runtime error occurs.
+ */
+class RuntimeError implements Error {
+ final message;
+ RuntimeError(this.message);
+ String toString() => "RuntimeError: $message";
}

Powered by Google App Engine
This is Rietveld 408576698