mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 03:17:55 +00:00
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:
parent
114c37738d
commit
683743c9c5
|
@ -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,
|
||||
|
|
|
@ -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}");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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));
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue