74
78
unsigned Candidates () const;
75
79
CCandidateInfo *Candidate (unsigned) const;
76
void addCandidate (CCandidateInfo *);
80
void addCandidate (CFunctionInfo *);
77
81
void removeCandidate (unsigned);
79
83
void collectConvFunctions (CRecord *);
80
void collectConstructors (CRecord *);
84
void collectConstructors (CRecord *, bool default_constr = false);
81
85
void addCandidates (CCNameLookup &);
83
87
// create built-in operators used as candidates for
84
88
// operator overloading, operator overloading mode
85
89
// must be enabled (else nothing is done)
86
void createBuiltinOperators (const char *, int, CTree *, CTree *);
90
void createBuiltinOperators (CClassDatabase *db, const char *,
91
int, CTree *, CTree *);
88
93
unsigned Arguments () const;
89
94
CTree *Argument (unsigned) const;
91
96
private: // built-in operators
92
void createIncrOp (const char *, CTypeInfo *, CTypeInfo *);
93
void createDecrOp (const char *, CTypeInfo *, CTypeInfo *);
94
void createMulOp (const char *, CTypeInfo *, CTypeInfo *);
95
void createPlusOp (const char *, CTypeInfo *, CTypeInfo *);
96
void createMinusOp (const char *, CTypeInfo *, CTypeInfo *);
97
void createTildeOp (const char *, CTypeInfo *, CTypeInfo *);
98
void createMembPtrOp (const char *, CTypeInfo *, CTypeInfo *);
99
void createIndexOp (const char *, CTypeInfo *, CTypeInfo *);
100
void createIfThenOp (const char *, CTypeInfo *, CTypeInfo *);
101
void createLogOp (const char *, CTypeInfo *, CTypeInfo *);
102
void createRelOp (const char *, CTypeInfo *, CTypeInfo *);
103
void createBinOp (const char *, CTypeInfo *, CTypeInfo *);
104
void createEqAssOp (const char *, CTypeInfo *, CTypeInfo *);
105
void createAssOp (const char *, CTypeInfo *, CTypeInfo *);
106
void createDivOp (const char *, CTypeInfo *, CTypeInfo *);
107
void createEqOp (const char *, CTypeInfo *, CTypeInfo *);
108
void createMulAssOp (const char *, CTypeInfo *, CTypeInfo *);
109
void createAddAssOp (const char *, CTypeInfo *, CTypeInfo *);
97
void createIncrOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
98
void createDecrOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
99
void createMulOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
100
void createPlusOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
101
void createMinusOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
102
void createTildeOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
103
void createMembPtrOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
104
void createIndexOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
105
void createIfThenOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
106
void createLogOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
107
void createRelOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
108
void createBinOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
109
void createEqAssOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
110
void createAssOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
111
void createDivOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
112
void createEqOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
113
void createMulAssOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
114
void createAddAssOp (CClassDatabase *, int, const char *, CTypeInfo *, CTypeInfo *);
112
117
void chooseViableFcts ();
113
118
void chooseBestViableFct ();
114
119
int compareCandidates (CCandidateInfo *, CCandidateInfo *) const;
121
int moreSpecialized (CFunctionInfo *, CFunctionInfo *) const;
116
122
bool equalOrMoreQualified (CTypeFunction *, CTypeInfo *) const;
117
bool moreSpecialized (CFunctionInfo *, CFunctionInfo *) const;
118
123
bool hasDefaultArgument (CFunctionInfo *, CTypeList *, unsigned) const;
119
124
void collectConvFunctions (CRecord *, unsigned);
120
125
void collectConvTypes (CRecord *, Array<CTypeInfo*> &);
121
126
CCStandardConvSeq *implicitThisConv (CTypeInfo *, CTypeInfo *,
122
127
CFunctionInfo *) const;
124
void createParameter (CFunctionInfo *, CTypeInfo *) const;
125
void createOperator (const char *, CTypeInfo *, CTypeInfo *,
129
void createOperator (CClassDatabase *, int, const char *,
130
CTypeInfo *, CTypeInfo *, CTypeInfo * = 0);
129
133
inline CCOverloading::CCOverloading (ErrorSink &e, bool oovl) :