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

Unified Diff: pkg/compiler/lib/src/js_backend/backend_impact.dart

Issue 1469353004: Restrict backend misuse (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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: pkg/compiler/lib/src/js_backend/backend_impact.dart
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 3320c2f0d106332b56817d11e7532d7d37dd4689..f25e13b4d5e52556683ad3171b81481e36c7005f 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -68,8 +68,8 @@ class BackendImpacts {
helpers.getRuntimeTypeInfo,
helpers.computeSignature,
helpers.getRuntimeTypeArguments],
- instantiatedClasses: [
- coreClasses.listClass]);
+ otherImpacts: [
+ listValues]);
}
return _computeSignature;
}
@@ -187,6 +187,74 @@ class BackendImpacts {
return _throwNoSuchMethod;
}
+ BackendImpact _stringValues;
+
+ BackendImpact get stringValues {
+ if (_stringValues == null) {
+ _stringValues = new BackendImpact(
+ instantiatedClasses: [
+ helpers.jsStringClass]);
+ }
+ return _stringValues;
+ }
+
+ BackendImpact _numValues;
+
+ BackendImpact get numValues {
+ if (_numValues == null) {
+ _numValues = new BackendImpact(
+ instantiatedClasses: [
+ helpers.jsIntClass,
+ helpers.jsPositiveIntClass,
+ helpers.jsUInt32Class,
+ helpers.jsUInt31Class,
+ helpers.jsNumberClass,
+ helpers.jsDoubleClass]);
+ }
+ return _numValues;
+ }
+
+ BackendImpact get intValues => numValues;
+
+ BackendImpact get doubleValues => numValues;
+
+ BackendImpact _boolValues;
+
+ BackendImpact get boolValues {
+ if (_boolValues == null) {
+ _boolValues = new BackendImpact(
+ instantiatedClasses: [
+ helpers.jsBoolClass]);
+ }
+ return _boolValues;
+ }
+
+ BackendImpact _nullValue;
+
+ BackendImpact get nullValue {
+ if (_nullValue == null) {
+ _nullValue = new BackendImpact(
+ instantiatedClasses: [
+ helpers.jsNullClass]);
+ }
+ return _nullValue;
+ }
+
+ BackendImpact _listValues;
+
+ BackendImpact get listValues {
+ if (_listValues == null) {
+ _listValues = new BackendImpact(
+ instantiatedClasses: [
+ helpers.jsArrayClass,
+ helpers.jsMutableArrayClass,
+ helpers.jsFixedArrayClass,
+ helpers.jsExtendableArrayClass,
+ helpers.jsUnmodifiableArrayClass]);
+ }
+ return _listValues;
+ }
+
BackendImpact _throwRuntimeError;
BackendImpact get throwRuntimeError {
@@ -194,9 +262,9 @@ class BackendImpacts {
_throwRuntimeError = new BackendImpact(
staticUses: [
helpers.throwRuntimeError],
- // Also register the types of the arguments passed to this method.
- instantiatedClasses: [
- coreClasses.stringClass]);
+ otherImpacts: [
+ // Also register the types of the arguments passed to this method.
+ stringValues]);
}
return _throwRuntimeError;
}
@@ -208,8 +276,7 @@ class BackendImpacts {
_superNoSuchMethod = new BackendImpact(
staticUses: [
helpers.createInvocationMirror,
- coreClasses.objectClass.lookupLocalMember(
- Identifiers.noSuchMethod_)],
+ helpers.objectNoSuchMethod],
otherImpacts: [
_needsInt(
'Needed to encode the invocation kind of super.noSuchMethod.'),
@@ -277,23 +344,19 @@ class BackendImpacts {
/// Helper for registering that `int` is needed.
BackendImpact _needsInt(String reason) {
// TODO(johnniwinther): Register [reason] for use in dump-info.
- return new BackendImpact(
- instantiatedClasses: [coreClasses.intClass]);
+ return intValues;
}
/// Helper for registering that `List` is needed.
BackendImpact _needsList(String reason) {
// TODO(johnniwinther): Register [reason] for use in dump-info.
- return new BackendImpact(
- instantiatedClasses: [coreClasses.listClass]);
+ return listValues;
}
/// Helper for registering that `String` is needed.
BackendImpact _needsString(String reason) {
// TODO(johnniwinther): Register [reason] for use in dump-info.
- return new BackendImpact(
- instantiatedClasses: [
- coreClasses.stringClass]);
+ return stringValues;
}
BackendImpact _assertWithoutMessage;
@@ -352,62 +415,15 @@ class BackendImpacts {
return _stringJuxtaposition;
}
- // TODO(johnniwinther): Point to to the JavaScript classes instead of the Dart
- // classes in these impacts.
- BackendImpact _nullLiteral;
+ BackendImpact get nullLiteral => nullValue;
- BackendImpact get nullLiteral {
- if (_nullLiteral == null) {
- _nullLiteral = new BackendImpact(
- instantiatedClasses: [
- coreClasses.nullClass]);
- }
- return _nullLiteral;
- }
+ BackendImpact get boolLiteral => boolValues;
- BackendImpact _boolLiteral;
+ BackendImpact get intLiteral => intValues;
- BackendImpact get boolLiteral {
- if (_boolLiteral == null) {
- _boolLiteral = new BackendImpact(
- instantiatedClasses: [
- coreClasses.boolClass]);
- }
- return _boolLiteral;
- }
+ BackendImpact get doubleLiteral => doubleValues;
- BackendImpact _intLiteral;
-
- BackendImpact get intLiteral {
- if (_intLiteral == null) {
- _intLiteral = new BackendImpact(
- instantiatedClasses: [
- coreClasses.intClass]);
- }
- return _intLiteral;
- }
-
- BackendImpact _doubleLiteral;
-
- BackendImpact get doubleLiteral {
- if (_doubleLiteral == null) {
- _doubleLiteral = new BackendImpact(
- instantiatedClasses: [
- coreClasses.doubleClass]);
- }
- return _doubleLiteral;
- }
-
- BackendImpact _stringLiteral;
-
- BackendImpact get stringLiteral {
- if (_stringLiteral == null) {
- _stringLiteral = new BackendImpact(
- instantiatedClasses: [
- coreClasses.stringClass]);
- }
- return _stringLiteral;
- }
+ BackendImpact get stringLiteral => stringValues;
BackendImpact _catchStatement;
@@ -468,7 +484,7 @@ class BackendImpacts {
if (_stackTraceInCatch == null) {
_stackTraceInCatch = new BackendImpact(
instantiatedClasses: [
- coreClasses.stackTraceClass],
+ helpers.stackTraceClass],
staticUses: [
helpers.traceFromException]);
}
@@ -498,9 +514,8 @@ class BackendImpacts {
helpers.getRuntimeTypeInfo,
helpers.runtimeTypeToString,
helpers.createRuntimeType],
- instantiatedClasses: [
- coreClasses.listClass],
otherImpacts: [
+ listValues,
getRuntimeTypeArgument,
_needsInt('Needed for accessing a type variable literal on this.')
]);
@@ -513,8 +528,8 @@ class BackendImpacts {
BackendImpact get typeCheck {
if (_typeCheck == null) {
_typeCheck = new BackendImpact(
- instantiatedClasses: [
- coreClasses.boolClass]);
+ otherImpacts: [
+ boolValues]);
}
return _typeCheck;
}
@@ -551,9 +566,8 @@ class BackendImpacts {
// TODO(johnniwinther): Investigate why this is needed.
helpers.setRuntimeTypeInfo,
helpers.getRuntimeTypeInfo],
- instantiatedClasses: [
- coreClasses.listClass],
otherImpacts: [
+ listValues,
getRuntimeTypeArgument]);
}
return _genericTypeCheck;
@@ -564,8 +578,8 @@ class BackendImpacts {
BackendImpact get genericIsCheck {
if (_genericIsCheck == null) {
_genericIsCheck = new BackendImpact(
- instantiatedClasses: [
- coreClasses.listClass]);
+ otherImpacts: [
+ intValues]);
}
return _genericIsCheck;
}

Powered by Google App Engine
This is Rietveld 408576698