Skip to content

Commit

Permalink
Fix codegen for overload resolution. Fixes #6300
Browse files Browse the repository at this point in the history
  • Loading branch information
mukilan committed Jun 10, 2015
1 parent 96311aa commit e5b8e81
Showing 1 changed file with 9 additions and 16 deletions.
25 changes: 9 additions & 16 deletions components/script/dom/bindings/codegen/CodegenRust.py
Expand Up @@ -177,14 +177,15 @@ def requiredArgCount(signature):
requiredArgs -= 1
return requiredArgs

def getPerSignatureCall(signature, argConversionStartsAt=0, signatureIndex=0):

signatures = method.signatures()
def getPerSignatureCall(signature, argConversionStartsAt=0):
signatureIndex = signatures.index(signature)
return CGPerSignatureCall(signature[0], argsPre, signature[1],
nativeMethodName + '_'*signatureIndex,
static, descriptor,
method, argConversionStartsAt)


signatures = method.signatures()
if len(signatures) == 1:
# Special case: we can just do a per-signature method call
# here for our one signature and not worry about switching
Expand Down Expand Up @@ -215,12 +216,7 @@ def getPerSignatureCall(signature, argConversionStartsAt=0, signatureIndex=0):
if len(possibleSignatures) == 1:
# easy case!
signature = possibleSignatures[0]


sigIndex = signatures.index(signature)
argCountCases.append(
CGCase(str(argCount), getPerSignatureCall(signature,
signatureIndex=sigIndex)))
argCountCases.append(CGCase(str(argCount), getPerSignatureCall(signature)))
continue

distinguishingIndex = method.distinguishingIndexForArgCount(argCount)
Expand Down Expand Up @@ -249,15 +245,12 @@ def pickFirstSignature(condition, filterLambda):
sigs = filter(filterLambda, possibleSignatures)
assert len(sigs) < 2
if len(sigs) > 0:
call = getPerSignatureCall(sigs[0], distinguishingIndex)
if condition is None:
caseBody.append(
getPerSignatureCall(sigs[0], distinguishingIndex,
possibleSignatures.index(sigs[0])))
caseBody.append(call)
else:
caseBody.append(CGGeneric("if " + condition + " {"))
caseBody.append(CGIndenter(
getPerSignatureCall(sigs[0], distinguishingIndex,
possibleSignatures.index(sigs[0]))))
caseBody.append(CGIndenter(call))
caseBody.append(CGGeneric("}"))
return True
return False
Expand Down Expand Up @@ -318,7 +311,7 @@ def pickFirstSignature(condition, filterLambda):
# distinguishingIndex + 1, since we already converted
# distinguishingIndex.
caseBody.append(CGIndenter(
getPerSignatureCall(sig, distinguishingIndex + 1, idx), 4))
getPerSignatureCall(sig, distinguishingIndex + 1), 4))
caseBody.append(CGIndenter(CGGeneric("}")))

caseBody.append(CGGeneric("}"))
Expand Down

0 comments on commit e5b8e81

Please sign in to comment.