MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / compilePrecedence3

Function compilePrecedence3

lib/tokenlist.cpp:1158–1263  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1156}
1157
1158static void compilePrecedence3(Token *&tok, AST_state& state)
1159{
1160 compilePrecedence2(tok, state);
1161 while (tok) {
1162 if ((Token::Match(tok, "[+-!~*&]") || tok->tokType() == Token::eIncDecOp) &&
1163 isPrefixUnary(tok, state.cpp)) {
1164 if (Token::Match(tok, "* [*,)]")) {
1165 Token* tok2 = tok->next();
1166 while (tok2->next() && tok2->str() == "*")
1167 tok2 = tok2->next();
1168 if (Token::Match(tok2, "[>),]")) {
1169 tok = tok2;
1170 continue;
1171 }
1172 }
1173 compileUnaryOp(tok, state, compilePrecedence3);
1174 } else if (tok->str() == "(" && iscast(tok, state.cpp)) {
1175 Token* castTok = tok;
1176 castTok->isCast(true);
1177 tok = tok->link()->next();
1178 const int inArrayAssignment = state.inArrayAssignment;
1179 if (tok && tok->str() == "{")
1180 state.inArrayAssignment = 1;
1181 compilePrecedence3(tok, state);
1182 state.inArrayAssignment = inArrayAssignment;
1183 compileUnaryOp(castTok, state, nullptr);
1184 } else if (state.cpp && Token::Match(tok, "new %name%|::|(")) {
1185 Token* newtok = tok;
1186 tok = tok->next();
1187 bool innertype = false;
1188 if (tok->str() == "(") {
1189 if (Token::Match(tok, "( &| %name%") && Token::Match(tok->link(), ") ( %type%") && Token::simpleMatch(tok->link()->linkAt(1), ") ("))
1190 tok = tok->link()->next();
1191 if (Token::Match(tok->link(), ") ::| %type%")) {
1192 if (Token::Match(tok, "( !!)")) {
1193 Token *innerTok = tok->next();
1194 AST_state innerState(true);
1195 compileExpression(innerTok, innerState);
1196 }
1197 tok = tok->link()->next();
1198 } else if (Token::Match(tok, "( %type%") && Token::Match(tok->link(), ") [();,[]")) {
1199 tok = tok->next();
1200 innertype = true;
1201 } else if (Token::Match(tok, "( &| %name%") && Token::simpleMatch(tok->link(), ") (")) {
1202 tok = tok->next();
1203 innertype = true;
1204 } else {
1205 /* bad code */
1206 continue;
1207 }
1208 }
1209
1210 Token* leftToken = tok;
1211 if (Token::simpleMatch(tok, "::")) {
1212 tok->astOperand1(tok->next());
1213 tok = tok->next();
1214 }
1215 else {

Callers 1

compilePointerToElemFunction · 0.85

Calls 13

compilePrecedence2Function · 0.85
isPrefixUnaryFunction · 0.85
compileUnaryOpFunction · 0.85
iscastFunction · 0.85
compileExpressionFunction · 0.85
compileBinOpFunction · 0.85
nextMethod · 0.80
isCastMethod · 0.80
linkAtMethod · 0.80
astOperand1Method · 0.80
astOperand2Method · 0.80
simpleMatchFunction · 0.70

Tested by

no test coverage detected