Change more JS foreign methods to JS_GET_NAME.

R=herhut@google.com

Review URL: https://codereview.chromium.org//1154073004
This commit is contained in:
Karl Klose 2015-06-03 11:41:46 +02:00
parent 114c37738d
commit 683743c9c5
6 changed files with 83 additions and 72 deletions

View file

@ -435,6 +435,19 @@ class Namer {
case JsGetName.DEFAULT_VALUES_PROPERTY: return defaultValuesField;
case JsGetName.CALL_NAME_PROPERTY: return callNameField;
case JsGetName.DEFERRED_ACTION_PROPERTY: return deferredAction;
case JsGetName.OPERATOR_AS_PREFIX: return operatorAsPrefix;
case JsGetName.SIGNATURE_NAME: return operatorSignature;
case JsGetName.TYPEDEF_TAG: return typedefTag;
case JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG:
return functionTypeVoidReturnTag;
case JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG:
return functionTypeReturnTypeTag;
case JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG:
return functionTypeRequiredParametersTag;
case JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG:
return functionTypeOptionalParametersTag;
case JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG:
return functionTypeNamedParametersTag;
default:
compiler.reportError(
node, MessageKind.GENERIC,

View file

@ -4258,36 +4258,6 @@ class SsaBuilder extends NewResolvedVisitor {
handleForeignRawFunctionRef(node, 'RAW_DART_FUNCTION_REF');
} else if (name == 'JS_SET_CURRENT_ISOLATE') {
handleForeignSetCurrentIsolate(node);
} else if (name == 'JS_OPERATOR_AS_PREFIX') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(backend.namer.operatorAsPrefix));
} else if (name == 'JS_SIGNATURE_NAME') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(backend.namer.operatorSignature));
} else if (name == 'JS_TYPEDEF_TAG') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(backend.namer.typedefTag));
} else if (name == 'JS_FUNCTION_TYPE_VOID_RETURN_TAG') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(backend.namer.functionTypeVoidReturnTag));
} else if (name == 'JS_FUNCTION_TYPE_RETURN_TYPE_TAG') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(backend.namer.functionTypeReturnTypeTag));
} else if (name ==
'JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(
backend.namer.functionTypeRequiredParametersTag));
} else if (name ==
'JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(
backend.namer.functionTypeOptionalParametersTag));
} else if (name ==
'JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG') {
// TODO(floitsch): this should be a JS_NAME.
stack.add(addConstantString(
backend.namer.functionTypeNamedParametersTag));
} else if (name == 'JS_IS_INDEXABLE_FIELD_NAME') {
// TODO(floitsch): this should be a JS_NAME.
Element element = backend.findHelper('JavaScriptIndexingBehavior');
@ -4309,7 +4279,7 @@ class SsaBuilder extends NewResolvedVisitor {
} else if (name == 'JS_STRING_CONCAT') {
handleJsStringConcat(node);
} else {
throw "Unknown foreign: ${element}";
compiler.internalError(node, "Unknown foreign: ${element}");
}
}

View file

@ -2318,7 +2318,8 @@ abstract class Closure implements Function {
throw 'Error in reflectionInfo.';
}
JS('', '#[#] = #', prototype, JS_SIGNATURE_NAME(), signatureFunction);
JS('', '#[#] = #', prototype, JS_GET_NAME(JsGetName.SIGNATURE_NAME),
signatureFunction);
JS('', '#[#] = #', prototype, callName, trampoline);
for (int i = 1; i < functions.length; i++) {
@ -3221,28 +3222,33 @@ class RuntimeFunctionType extends RuntimeType {
_extractFunctionTypeObjectFrom(o) {
var interceptor = getInterceptor(o);
return JS('bool', '# in #', JS_SIGNATURE_NAME(), interceptor)
? JS('', '#[#]()', interceptor, JS_SIGNATURE_NAME())
var signatureName = JS_GET_NAME(JsGetName.SIGNATURE_NAME);
return JS('bool', '# in #', signatureName, interceptor)
? JS('', '#[#]()', interceptor, JS_GET_NAME(JsGetName.SIGNATURE_NAME))
: null;
}
toRti() {
var result = createDartFunctionTypeRti();
if (isVoid) {
JS('', '#[#] = true', result, JS_FUNCTION_TYPE_VOID_RETURN_TAG());
JS('', '#[#] = true', result,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG));
} else {
if (returnType is! DynamicRuntimeType) {
JS('', '#[#] = #', result, JS_FUNCTION_TYPE_RETURN_TYPE_TAG(),
JS('', '#[#] = #', result,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG),
returnType.toRti());
}
}
if (parameterTypes != null && !parameterTypes.isEmpty) {
JS('', '#[#] = #', result, JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG(),
JS('', '#[#] = #', result,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG),
listToRti(parameterTypes));
}
if (optionalParameterTypes != null && !optionalParameterTypes.isEmpty) {
JS('', '#[#] = #', result, JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG(),
JS('', '#[#] = #', result,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG),
listToRti(optionalParameterTypes));
}
@ -3254,7 +3260,8 @@ class RuntimeFunctionType extends RuntimeType {
var rti = JS('', '#[#]', namedParameters, name).toRti();
JS('', '#[#] = #', namedRti, name, rti);
}
JS('', '#[#] = #', result, JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG(),
JS('', '#[#] = #', result,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG),
namedRti);
}

View file

@ -2631,41 +2631,51 @@ class JsFunctionTypeMirror extends BrokenClassMirror
JsFunctionTypeMirror(this._typeData, this.owner);
bool get _hasReturnType {
return JS('bool', '# in #', JS_FUNCTION_TYPE_RETURN_TYPE_TAG(), _typeData);
return JS('bool', '# in #',
JS_GET_NAME(JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG), _typeData);
}
get _returnType {
return JS('', '#[#]', _typeData, JS_FUNCTION_TYPE_RETURN_TYPE_TAG());
return JS('', '#[#]', _typeData,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG));
}
bool get _isVoid {
return JS('bool', '!!#[#]', _typeData, JS_FUNCTION_TYPE_VOID_RETURN_TAG());
return JS('bool', '!!#[#]', _typeData,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG));
}
bool get _hasArguments {
return JS('bool', '# in #',
JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG(), _typeData);
JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG),
_typeData);
}
List get _arguments {
return JS('JSExtendableArray', '#[#]',
_typeData, JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG());
_typeData,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG));
}
bool get _hasOptionalArguments {
return JS('bool', '# in #',
JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG(), _typeData);
JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG),
_typeData);
}
List get _optionalArguments {
return JS('JSExtendableArray', '#[#]',
_typeData, JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG());
_typeData,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG));
}
bool get _hasNamedArguments {
return JS('bool', '# in #',
JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG(), _typeData);
JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG),
_typeData);
}
get _namedArguments {
return JS('=Object', '#[#]',
_typeData, JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG());
_typeData,
JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG));
}
bool get isOriginalDeclaration => true;
@ -2854,7 +2864,7 @@ TypeMirror typeMirrorFromRuntimeTypeRepresentation(
return reflectClassByMangledName(
getMangledTypeName(createRuntimeType(representation)));
}
String typedefPropertyName = JS_TYPEDEF_TAG();
String typedefPropertyName = JS_GET_NAME(JsGetName.TYPEDEF_TAG);
if (type != null && JS('', '#[#]', type, typedefPropertyName) != null) {
return typeMirrorFromRuntimeTypeRepresentation(
owner, JS('', '#[#]', type, typedefPropertyName));

View file

@ -105,8 +105,8 @@ getRuntimeTypeInfo(Object target) {
* Returns the type arguments of [target] as an instance of [substitutionName].
*/
getRuntimeTypeArguments(target, substitutionName) {
var substitution =
getField(target, '${JS_OPERATOR_AS_PREFIX()}$substitutionName');
var substitution = getField(target,
'${JS_GET_NAME(JsGetName.OPERATOR_AS_PREFIX)}$substitutionName');
return substitute(substitution, getRuntimeTypeInfo(target));
}
@ -392,7 +392,8 @@ bool checkSubtypeOfRuntimeType(o, t) {
} else if (isDartFunctionType(t)) {
// Functions are treated specially and have their type information stored
// directly in the instance.
var targetSignatureFunction = getField(o, '${JS_SIGNATURE_NAME()}');
var targetSignatureFunction =
getField(o, '${JS_GET_NAME(JsGetName.SIGNATURE_NAME)}');
if (targetSignatureFunction == null) return false;
type = invokeOn(targetSignatureFunction, o, null);
return isFunctionSubtype(type, t);
@ -459,7 +460,8 @@ bool isSubtype(var s, var t) {
return false;
}
var typeOfSPrototype = JS('', '#.prototype', typeOfS);
var field = '${JS_OPERATOR_AS_PREFIX()}${runtimeTypeToString(typeOfT)}';
var field = '${JS_GET_NAME(JsGetName.OPERATOR_AS_PREFIX)}'
'${runtimeTypeToString(typeOfT)}';
substitution = getField(typeOfSPrototype, field);
}
// The class of [s] is a subclass of the class of [t]. If [s] has no type
@ -531,25 +533,26 @@ bool areAssignableMaps(var s, var t) {
bool isFunctionSubtype(var s, var t) {
assert(isDartFunctionType(t));
if (!isDartFunctionType(s)) return false;
if (hasField(s, '${JS_FUNCTION_TYPE_VOID_RETURN_TAG()}')) {
if (hasNoField(t, '${JS_FUNCTION_TYPE_VOID_RETURN_TAG()}') &&
hasField(t, '${JS_FUNCTION_TYPE_RETURN_TYPE_TAG()}')) {
var voidReturnTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_VOID_RETURN_TAG);
var returnTypeTag = JS_GET_NAME(JsGetName.FUNCTION_TYPE_RETURN_TYPE_TAG);
if (hasField(s, voidReturnTag)) {
if (hasNoField(t, voidReturnTag) && hasField(t, returnTypeTag)) {
return false;
}
} else if (hasNoField(t, '${JS_FUNCTION_TYPE_VOID_RETURN_TAG()}')) {
var sReturnType = getField(s, '${JS_FUNCTION_TYPE_RETURN_TYPE_TAG()}');
var tReturnType = getField(t, '${JS_FUNCTION_TYPE_RETURN_TYPE_TAG()}');
} else if (hasNoField(t, voidReturnTag)) {
var sReturnType = getField(s, returnTypeTag);
var tReturnType = getField(t, returnTypeTag);
if (!isAssignable(sReturnType, tReturnType)) return false;
}
var sParameterTypes =
getField(s, '${JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG()}');
var tParameterTypes =
getField(t, '${JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG()}');
var requiredParametersTag =
JS_GET_NAME(JsGetName.FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG);
var sParameterTypes = getField(s, requiredParametersTag);
var tParameterTypes = getField(t, requiredParametersTag);
var sOptionalParameterTypes =
getField(s, '${JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG()}');
var tOptionalParameterTypes =
getField(t, '${JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG()}');
var optionalParametersTag =
JS_GET_NAME(JsGetName.FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG);
var sOptionalParameterTypes = getField(s, optionalParametersTag);
var tOptionalParameterTypes = getField(t, optionalParametersTag);
int sParametersLen = sParameterTypes != null ? getLength(sParameterTypes) : 0;
int tParametersLen = tParameterTypes != null ? getLength(tParameterTypes) : 0;
@ -606,10 +609,10 @@ bool isFunctionSubtype(var s, var t) {
}
}
var sNamedParameters =
getField(s, '${JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG()}');
var tNamedParameters =
getField(t, '${JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG()}');
var namedParametersTag =
JS_GET_NAME(JsGetName.FUNCTION_TYPE_NAMED_PARAMETERS_TAG);
var sNamedParameters = getField(s, namedParametersTag);
var tNamedParameters = getField(t, namedParametersTag);
return areAssignableMaps(sNamedParameters, tNamedParameters);
}

View file

@ -92,7 +92,15 @@ enum JsGetName {
REQUIRED_PARAMETER_PROPERTY,
DEFAULT_VALUES_PROPERTY,
CALL_NAME_PROPERTY,
DEFERRED_ACTION_PROPERTY
DEFERRED_ACTION_PROPERTY,
OPERATOR_AS_PREFIX,
SIGNATURE_NAME,
TYPEDEF_TAG,
FUNCTION_TYPE_VOID_RETURN_TAG,
FUNCTION_TYPE_RETURN_TYPE_TAG,
FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG,
FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG,
FUNCTION_TYPE_NAMED_PARAMETERS_TAG,
}
enum JsBuiltin {