|
11 | 11 | */ |
12 | 12 | import cpp |
13 | 13 |
|
14 | | -from Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, string subValue, string superValue |
15 | | -where p.hasInitializer() |
16 | | - and subF.getParameter(i) = p |
17 | | - and superP.hasInitializer() |
| 14 | +predicate parameterWithDefault(MemberFunction f, int ix, Parameter p, Expr initExpr, string initValue) { |
| 15 | + f.getParameter(ix) = p and |
| 16 | + p.hasInitializer() and |
| 17 | + initExpr = p.getInitializer().getExpr() and |
| 18 | + initValue = initExpr.getValue() |
| 19 | +} |
| 20 | + |
| 21 | +from Parameter p, Parameter superP, MemberFunction subF, MemberFunction superF, int i, Expr subExpr, string subValue, string superValue |
| 22 | +where parameterWithDefault(subF, i, p, subExpr, subValue) |
18 | 23 | and subF.overrides(superF) |
19 | | - and superF.getParameter(i) = superP |
20 | | - and subValue = p.getInitializer().getExpr().getValue() |
21 | | - and superValue = superP.getInitializer().getExpr().getValue() |
| 24 | + and parameterWithDefault(superF, i, superP, _, superValue) |
22 | 25 | and subValue != superValue |
23 | | -select p.getInitializer().getExpr(), |
| 26 | +select subExpr, |
24 | 27 | "Parameter " + p.getName() + |
25 | 28 | " redefines its default value to " + subValue + |
26 | 29 | " from the inherited default value " + superValue + |
|
0 commit comments