blob: 83c515b4f5c241a75673fb7f2a5bd758cf0403c8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
#include "cps/CodeGen.h"
#include "cps/Operator.h"
using namespace cps;
// Probing candidates must not evaluate operands or diagnose absent overloads:
// both static typing and emission use this same selection.
CodeGen::OperatorResolution CodeGen::resolveOperator(
int Op, const TypeInfo *Left, const TypeInfo *Right) {
OperatorResolution Result;
if (!Left) return Result;
for (const FuncSig *Sig : FuncGen->getOverloads(operatorName(Op))) {
if (Sig->Prototype->getOperator() != Op || Sig->Params.size() != (Right ? 2u : 1u)) continue;
if (!Left->sameType(resolveType(Sig->Params[0].TypeName))) continue;
if (Right && !Right->sameType(resolveType(Sig->Params[1].TypeName))) continue;
if (Result.Signature) Result.Ambiguous = true;
else Result.Signature = Sig;
}
return Result;
}
|