Skip to content

Commit ee45266

Browse files
authored
Merge pull request #859 from rdmarsh2/rdmarsh/cpp/ir-performance-1
C++: use field overrides in TranslatedElement and subclasses
2 parents e1d289f + bbe8e7e commit ee45266

File tree

4 files changed

+148
-279
lines changed

4 files changed

+148
-279
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

0 commit comments

Comments
 (0)