Skip to content

Commit ffb4663

Browse files
author
Robert Marsh
committed
C++: use more field overrides in IR generation
1 parent fa56981 commit ffb4663

File tree

3 files changed

+28
-69
lines changed

3 files changed

+28
-69
lines changed

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCall.qll

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -255,64 +255,53 @@ abstract class TranslatedDirectCall extends TranslatedCall {
255255
*/
256256
abstract class TranslatedCallExpr extends TranslatedNonConstantExpr,
257257
TranslatedCall {
258-
Call call;
259-
260-
TranslatedCallExpr() {
261-
expr = call
262-
}
258+
override Call expr;
263259

264260
override final Type getCallResultType() {
265261
result = getResultType()
266262
}
267263

268264
override final predicate hasArguments() {
269-
exists(call.getArgument(0))
265+
exists(expr.getArgument(0))
270266
}
271267

272268
override final TranslatedExpr getQualifier() {
273-
result = getTranslatedExpr(call.getQualifier().getFullyConverted())
269+
result = getTranslatedExpr(expr.getQualifier().getFullyConverted())
274270
}
275271

276272
override final TranslatedExpr getArgument(int index) {
277-
result = getTranslatedExpr(call.getArgument(index).getFullyConverted())
273+
result = getTranslatedExpr(expr.getArgument(index).getFullyConverted())
278274
}
279275
}
280276

281277
/**
282278
* Represents the IR translation of a call through a function pointer.
283279
*/
284280
class TranslatedExprCall extends TranslatedCallExpr {
285-
ExprCall exprCall;
281+
override ExprCall expr;
286282

287-
TranslatedExprCall() {
288-
expr = exprCall
289-
}
290283

291284
override TranslatedExpr getCallTarget() {
292-
result = getTranslatedExpr(exprCall.getExpr().getFullyConverted())
285+
result = getTranslatedExpr(expr.getExpr().getFullyConverted())
293286
}
294287
}
295288

296289
/**
297290
* Represents the IR translation of a direct function call.
298291
*/
299292
class TranslatedFunctionCall extends TranslatedCallExpr, TranslatedDirectCall {
300-
FunctionCall funcCall;
301-
302-
TranslatedFunctionCall() {
303-
expr = funcCall
304-
}
293+
override FunctionCall expr;
305294

306295
override Function getInstructionFunction(InstructionTag tag) {
307-
tag = CallTargetTag() and result = funcCall.getTarget()
296+
tag = CallTargetTag() and result = expr.getTarget()
308297
}
309298

310299
override predicate hasReadSideEffect() {
311-
not funcCall.getTarget().(SideEffectFunction).neverReadsMemory()
300+
not expr.getTarget().(SideEffectFunction).neverReadsMemory()
312301
}
313302

314303
override predicate hasWriteSideEffect() {
315-
not funcCall.getTarget().(SideEffectFunction).neverWritesMemory()
304+
not expr.getTarget().(SideEffectFunction).neverWritesMemory()
316305
}
317306
}
318307

@@ -321,8 +310,8 @@ class TranslatedFunctionCall extends TranslatedCallExpr, TranslatedDirectCall {
321310
*/
322311
class TranslatedStructorCall extends TranslatedFunctionCall {
323312
TranslatedStructorCall() {
324-
funcCall instanceof ConstructorCall or
325-
funcCall instanceof DestructorCall
313+
expr instanceof ConstructorCall or
314+
expr instanceof DestructorCall
326315
}
327316

328317
override Instruction getQualifierResult() {

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedCondition.qll

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,7 @@ abstract class TranslatedFlexibleCondition extends TranslatedCondition,
7575
}
7676

7777
class TranslatedParenthesisCondition extends TranslatedFlexibleCondition {
78-
ParenthesisExpr paren;
79-
80-
TranslatedParenthesisCondition() {
81-
paren = expr
82-
}
78+
override ParenthesisExpr expr;
8379

8480
final override Instruction getChildTrueSuccessor(TranslatedCondition child) {
8581
child = getOperand() and
@@ -92,16 +88,12 @@ class TranslatedParenthesisCondition extends TranslatedFlexibleCondition {
9288
}
9389

9490
final override TranslatedCondition getOperand() {
95-
result = getTranslatedCondition(paren.getExpr())
91+
result = getTranslatedCondition(expr.getExpr())
9692
}
9793
}
9894

9995
class TranslatedNotCondition extends TranslatedFlexibleCondition {
100-
NotExpr notExpr;
101-
102-
TranslatedNotCondition() {
103-
notExpr = expr
104-
}
96+
override NotExpr expr;
10597

10698
override Instruction getChildTrueSuccessor(TranslatedCondition child) {
10799
child = getOperand() and
@@ -114,7 +106,7 @@ class TranslatedNotCondition extends TranslatedFlexibleCondition {
114106
}
115107

116108
override TranslatedCondition getOperand() {
117-
result = getTranslatedCondition(notExpr.getOperand().getFullyConverted())
109+
result = getTranslatedCondition(expr.getOperand().getFullyConverted())
118110
}
119111
}
120112

@@ -131,11 +123,7 @@ abstract class TranslatedNativeCondition extends TranslatedCondition,
131123

132124
abstract class TranslatedBinaryLogicalOperation extends
133125
TranslatedNativeCondition, ConditionContext {
134-
BinaryLogicalOperation op;
135-
136-
TranslatedBinaryLogicalOperation() {
137-
op = expr
138-
}
126+
override BinaryLogicalOperation expr;
139127

140128
override final TranslatedElement getChild(int id) {
141129
id = 0 and result = getLeftOperand() or
@@ -157,17 +145,17 @@ abstract class TranslatedBinaryLogicalOperation extends
157145
}
158146

159147
final TranslatedCondition getLeftOperand() {
160-
result = getTranslatedCondition(op.getLeftOperand().getFullyConverted())
148+
result = getTranslatedCondition(expr.getLeftOperand().getFullyConverted())
161149
}
162150

163151
final TranslatedCondition getRightOperand() {
164-
result = getTranslatedCondition(op.getRightOperand().getFullyConverted())
152+
result = getTranslatedCondition(expr.getRightOperand().getFullyConverted())
165153
}
166154
}
167155

168156
class TranslatedLogicalAndExpr extends TranslatedBinaryLogicalOperation {
169157
TranslatedLogicalAndExpr() {
170-
op instanceof LogicalAndExpr
158+
expr instanceof LogicalAndExpr
171159
}
172160

173161
override Instruction getChildTrueSuccessor(TranslatedCondition child) {
@@ -188,9 +176,7 @@ class TranslatedLogicalAndExpr extends TranslatedBinaryLogicalOperation {
188176
}
189177

190178
class TranslatedLogicalOrExpr extends TranslatedBinaryLogicalOperation {
191-
TranslatedLogicalOrExpr() {
192-
op instanceof LogicalOrExpr
193-
}
179+
override LogicalOrExpr expr;
194180

195181
override Instruction getChildTrueSuccessor(TranslatedCondition child) {
196182
(child = getLeftOperand() or child = getRightOperand()) and

cpp/ql/src/semmle/code/cpp/ir/implementation/raw/internal/TranslatedInitialization.qll

Lines changed: 7 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -120,16 +120,12 @@ abstract class TranslatedListInitialization extends TranslatedInitialization,
120120
class TranslatedClassListInitialization extends
121121
TranslatedListInitialization
122122
{
123-
ClassAggregateLiteral initList;
124-
125-
TranslatedClassListInitialization() {
126-
initList = expr
127-
}
123+
override ClassAggregateLiteral expr;
128124

129125
override TranslatedElement getChild(int id) {
130126
exists(TranslatedFieldInitialization fieldInit |
131127
result = fieldInit and
132-
fieldInit = getTranslatedFieldInitialization(initList, _) and
128+
fieldInit = getTranslatedFieldInitialization(expr, _) and
133129
fieldInit.getOrder() = id
134130
)
135131
}
@@ -141,16 +137,12 @@ class TranslatedClassListInitialization extends
141137
*/
142138
class TranslatedArrayListInitialization extends
143139
TranslatedListInitialization {
144-
ArrayAggregateLiteral initList;
145-
146-
TranslatedArrayListInitialization() {
147-
initList = expr
148-
}
140+
override ArrayAggregateLiteral expr;
149141

150142
override TranslatedElement getChild(int id) {
151143
// The children are in initialization order
152144
result = rank[id + 1](TranslatedElementInitialization init |
153-
init.getInitList() = initList |
145+
init.getInitList() = expr |
154146
init order by init.getElementIndex()
155147
)
156148
}
@@ -231,9 +223,7 @@ class TranslatedSimpleDirectInitialization extends
231223
*/
232224
class TranslatedStringLiteralInitialization extends
233225
TranslatedDirectInitialization {
234-
TranslatedStringLiteralInitialization() {
235-
expr instanceof StringLiteral
236-
}
226+
override StringLiteral expr;
237227

238228
override predicate hasInstruction(Opcode opcode, InstructionTag tag,
239229
Type resultType, boolean isGLValue) {
@@ -434,11 +424,7 @@ class TranslatedStringLiteralInitialization extends
434424

435425
class TranslatedConstructorInitialization extends
436426
TranslatedDirectInitialization, StructorCallContext {
437-
ConstructorCall ctorCall;
438-
439-
TranslatedConstructorInitialization() {
440-
ctorCall = expr
441-
}
427+
override ConstructorCall expr;
442428

443429
override predicate hasInstruction(Opcode opcode, InstructionTag tag,
444430
Type resultType, boolean isGLValue) {
@@ -1008,9 +994,7 @@ TranslatedConstructorCallFromConstructor getTranslatedConstructorBaseInit(Constr
1008994
* Represents the IR translation of a delegating constructor call from within a constructor.
1009995
*/
1010996
class TranslatedConstructorDelegationInit extends TranslatedConstructorCallFromConstructor {
1011-
TranslatedConstructorDelegationInit() {
1012-
call instanceof ConstructorDelegationInit
1013-
}
997+
override ConstructorDelegationInit call;
1014998

1015999
override final string toString() {
10161000
result = "delegation construct: " + call.toString()

0 commit comments

Comments
 (0)