Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 9dc3f18

Browse filesBrowse files
committed
EssentialType: extract Add/Sub expressions
Extract out add/sub expressions special behaviour to improve clarity. This commit also simplifies the add case by avoiding referring to left/right explicitly.
1 parent 37ac088 commit 9dc3f18
Copy full SHA for 9dc3f18

File tree

1 file changed

+44
-22
lines changed
Filter options

1 file changed

+44
-22
lines changed

‎c/misra/src/codingstandards/c/misra/EssentialTypes.qll

Copy file name to clipboardExpand all lines: c/misra/src/codingstandards/c/misra/EssentialTypes.qll
+44-22Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -342,28 +342,50 @@ class EssentialBinaryOperationSubjectToUsualConversions extends EssentialExpr, B
342342
then result = leftEssentialType
343343
else result = rightEssentialType
344344
)
345-
else
346-
if
347-
this instanceof AddExpr and
348-
(
349-
leftEssentialTypeCategory = EssentiallyCharacterType()
350-
or
351-
rightEssentialTypeCategory = EssentiallyCharacterType()
352-
) and
353-
(
354-
leftEssentialTypeCategory =
355-
[EssentiallySignedType(), EssentiallyUnsignedType().(TEssentialTypeCategory)]
356-
or
357-
rightEssentialTypeCategory =
358-
[EssentiallySignedType(), EssentiallyUnsignedType().(TEssentialTypeCategory)]
359-
)
360-
or
361-
this instanceof SubExpr and
362-
leftEssentialTypeCategory = EssentiallyCharacterType() and
363-
rightEssentialTypeCategory =
364-
[EssentiallySignedType(), EssentiallyUnsignedType().(TEssentialTypeCategory)]
365-
then result instanceof PlainCharType
366-
else result = this.getStandardType()
345+
else result = this.getStandardType()
346+
)
347+
}
348+
}
349+
350+
/**
351+
* An add expression, with essential type behaviour as specified by D.7.9.
352+
*/
353+
class EssentialAddExpr extends EssentialBinaryOperationSubjectToUsualConversions, AddExpr {
354+
override Type getEssentialType() {
355+
exists(
356+
EssentialTypeCategory operandTypeCategory, EssentialTypeCategory otherOperandTypeCategory
357+
|
358+
operandTypeCategory = getEssentialTypeCategory(getEssentialType(getAnOperand())) and
359+
otherOperandTypeCategory = getEssentialTypeCategory(getEssentialType(getAnOperand()))
360+
|
361+
if
362+
operandTypeCategory = EssentiallyCharacterType() and
363+
otherOperandTypeCategory =
364+
[EssentiallySignedType(), EssentiallyUnsignedType().(TEssentialTypeCategory)]
365+
then result instanceof PlainCharType
366+
else result = super.getEssentialType()
367+
)
368+
}
369+
}
370+
371+
/**
372+
* A sub expression, with essential type behaviour as specified by D.7.9.
373+
*/
374+
class EssentialSubExpr extends EssentialBinaryOperationSubjectToUsualConversions, SubExpr {
375+
override Type getEssentialType() {
376+
exists(
377+
EssentialTypeCategory leftEssentialTypeCategory,
378+
EssentialTypeCategory rightEssentialTypeCategory
379+
|
380+
leftEssentialTypeCategory = getEssentialTypeCategory(getEssentialType(getLeftOperand())) and
381+
rightEssentialTypeCategory = getEssentialTypeCategory(getEssentialType(getRightOperand()))
382+
|
383+
if
384+
leftEssentialTypeCategory = EssentiallyCharacterType() and
385+
rightEssentialTypeCategory =
386+
[EssentiallySignedType(), EssentiallyUnsignedType().(TEssentialTypeCategory)]
387+
then result instanceof PlainCharType
388+
else result = super.getEssentialType()
367389
)
368390
}
369391
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.