@specs-feup/clava-misra 1.0.3 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/MISRATool.d.ts +8 -1
  2. package/dist/MISRATool.d.ts.map +1 -1
  3. package/dist/MISRATool.js +18 -1
  4. package/dist/MISRATool.js.map +1 -1
  5. package/dist/main.js +0 -1
  6. package/dist/main.js.map +1 -1
  7. package/dist/rules/index.d.ts +1 -1
  8. package/dist/rules/index.js +1 -1
  9. package/dist/utils/CallUtils.d.ts.map +1 -1
  10. package/dist/utils/CallUtils.js.map +1 -1
  11. package/dist/utils/FileUtils.d.ts +25 -9
  12. package/dist/utils/FileUtils.d.ts.map +1 -1
  13. package/dist/utils/FileUtils.js +56 -33
  14. package/dist/utils/FileUtils.js.map +1 -1
  15. package/dist/utils/FunctionUtils.d.ts +22 -0
  16. package/dist/utils/FunctionUtils.d.ts.map +1 -1
  17. package/dist/utils/FunctionUtils.js +22 -0
  18. package/dist/utils/FunctionUtils.js.map +1 -1
  19. package/dist/utils/IdentifierUtils.d.ts +49 -0
  20. package/dist/utils/IdentifierUtils.d.ts.map +1 -1
  21. package/dist/utils/IdentifierUtils.js +53 -7
  22. package/dist/utils/IdentifierUtils.js.map +1 -1
  23. package/dist/utils/JoinpointUtils.d.ts +17 -0
  24. package/dist/utils/JoinpointUtils.d.ts.map +1 -1
  25. package/dist/utils/JoinpointUtils.js +17 -0
  26. package/dist/utils/JoinpointUtils.js.map +1 -1
  27. package/dist/utils/ProgramUtils.d.ts +26 -1
  28. package/dist/utils/ProgramUtils.d.ts.map +1 -1
  29. package/dist/utils/ProgramUtils.js +26 -1
  30. package/dist/utils/ProgramUtils.js.map +1 -1
  31. package/dist/utils/TypeDeclUtils.d.ts.map +1 -1
  32. package/dist/utils/TypeDeclUtils.js.map +1 -1
  33. package/dist/utils/VarUtils.d.ts +33 -1
  34. package/dist/utils/VarUtils.d.ts.map +1 -1
  35. package/dist/utils/VarUtils.js +33 -1
  36. package/dist/utils/VarUtils.js.map +1 -1
  37. package/package.json +1 -2
  38. package/src/MISRATool.ts +20 -2
  39. package/src/main.ts +1 -4
  40. package/src/rules/index.ts +1 -1
  41. package/src/utils/CallUtils.ts +0 -3
  42. package/src/utils/FileUtils.ts +66 -38
  43. package/src/utils/FunctionUtils.ts +25 -3
  44. package/src/utils/IdentifierUtils.ts +58 -10
  45. package/src/utils/JoinpointUtils.ts +18 -1
  46. package/src/utils/ProgramUtils.ts +27 -3
  47. package/src/utils/TypeDeclUtils.ts +0 -1
  48. package/src/utils/VarUtils.ts +34 -2
@@ -1,6 +1,12 @@
1
1
  import { Vardecl, StorageClass, FunctionJp, TypedefDecl, LabelStmt, NamedDecl } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import { compareLocation, isTagDecl } from "./JoinpointUtils.js";
3
3
  import { findDuplicateVarDefinition, findExternalVarRefs, isSameVarDecl } from "./VarUtils.js";
4
+ /**
5
+ * Checks if the given joinpoint is an identifier declaration (variable, function, typedef, label, or tag)
6
+ *
7
+ * @param $jp The joinpoint to evaluate
8
+ * @returns True if the join point is an identifier declaration, false otherwise
9
+ */
4
10
  export function isIdentifierDecl($jp) {
5
11
  return ($jp instanceof Vardecl && $jp.storageClass !== StorageClass.EXTERN) ||
6
12
  ($jp instanceof FunctionJp && $jp.isImplementation) ||
@@ -8,6 +14,11 @@ export function isIdentifierDecl($jp) {
8
14
  $jp instanceof LabelStmt ||
9
15
  isTagDecl($jp);
10
16
  }
17
+ /**
18
+ * Retrieves the name of the given joinpoint
19
+ * @param $jp The joinpoint to evaluate
20
+ * @returns The name of the identifier, or undefined if the join point does not represent an identifier
21
+ */
11
22
  export function getIdentifierName($jp) {
12
23
  if ($jp instanceof NamedDecl) {
13
24
  return $jp.name;
@@ -17,6 +28,12 @@ export function getIdentifierName($jp) {
17
28
  }
18
29
  return undefined;
19
30
  }
31
+ /**
32
+ * Checks if two joinpoints represent different identifiers with the same name
33
+ * @param identifier1 The first joinpoint to evaluate
34
+ * @param identifier2 The second joinpoint to evaluate
35
+ * @returns True if names match and the nodes differ, otherwise returns false
36
+ */
20
37
  export function areIdentifierNamesEqual(identifier1, identifier2) {
21
38
  const name1 = getIdentifierName(identifier1);
22
39
  const name2 = getIdentifierName(identifier2);
@@ -24,18 +41,21 @@ export function areIdentifierNamesEqual(identifier1, identifier2) {
24
41
  return false;
25
42
  return identifier1.ast !== identifier2.ast && name1 === name2;
26
43
  }
44
+ /**
45
+ * Updates the name of an identifier joinpoint
46
+ * @param $jp The joinpoint to rename
47
+ * @param newName the new identifier name
48
+ * @returns True if renaming was successful, false otherwise
49
+ */
27
50
  export function renameIdentifier($jp, newName) {
28
51
  if ($jp instanceof LabelStmt) {
29
52
  $jp.decl.setName(newName);
30
53
  }
31
54
  else if ($jp instanceof Vardecl) {
32
- if (!isExternalLinkageIdentifier($jp)) {
33
- $jp.setName(newName);
34
- }
35
- else {
36
- const externalRefs = findExternalVarRefs($jp);
37
- const duplicateDefs = findDuplicateVarDefinition($jp);
38
- $jp.setName(newName);
55
+ const externalRefs = findExternalVarRefs($jp);
56
+ const duplicateDefs = findDuplicateVarDefinition($jp);
57
+ $jp.setName(newName);
58
+ if (isExternalLinkageIdentifier($jp)) {
39
59
  externalRefs.forEach((varRef) => varRef.setName(newName));
40
60
  duplicateDefs.forEach((defJp) => defJp.setName(newName));
41
61
  }
@@ -45,6 +65,12 @@ export function renameIdentifier($jp, newName) {
45
65
  }
46
66
  return true;
47
67
  }
68
+ /**
69
+ * Checks if a given joinpoint represents an identifier with external linkage
70
+ *
71
+ * @param $jp The joinpoint to evaluate
72
+ * @returns True if the joinpoint has external linkage, false otherwise
73
+ */
48
74
  export function isExternalLinkageIdentifier($jp) {
49
75
  if (!($jp instanceof FunctionJp || $jp instanceof Vardecl)) {
50
76
  return false;
@@ -55,6 +81,12 @@ export function isExternalLinkageIdentifier($jp) {
55
81
  }
56
82
  return result;
57
83
  }
84
+ /**
85
+ * Checks if a given joinpoint represents an identifier with internal linkage
86
+ *
87
+ * @param $jp The joinpoint to evaluate
88
+ * @returns True if the joinpoint has internal linkage, false otherwise
89
+ */
58
90
  export function isInternalLinkageIdentifier($jp) {
59
91
  if (!($jp instanceof FunctionJp || $jp instanceof Vardecl)) {
60
92
  return false;
@@ -65,9 +97,23 @@ export function isInternalLinkageIdentifier($jp) {
65
97
  }
66
98
  return result;
67
99
  }
100
+ /**
101
+ * Determines if an identifier is duplicated in a collection of join points
102
+ *
103
+ * @param $jp The identifier to evaluate
104
+ * @param $others Other join points to compare with
105
+ * @returns True if a duplicate exists, false otherwise
106
+ */
68
107
  export function isIdentifierDuplicated($jp, $others) {
69
108
  return $others.some((identifier) => identifier.astId !== $jp.astId && !isSameVarDecl($jp, identifier) && areIdentifierNamesEqual($jp, identifier));
70
109
  }
110
+ /**
111
+ * Checks if another identifier with the same name is declared before the given joinpoint
112
+ *
113
+ * @param $jp The identifier join point to check
114
+ * @param $others The list of other identifiers to compare with
115
+ * @returns True if a matching identifier is declared earlier, false otherwise.
116
+ */
71
117
  export function isIdentifierNameDeclaredBefore($jp, $others) {
72
118
  return $others.some((identifier) => {
73
119
  return identifier.astId !== $jp.astId && !isSameVarDecl($jp, identifier) && compareLocation(identifier, $jp) < 0 && areIdentifierNamesEqual(identifier, $jp);
@@ -1 +1 @@
1
- {"version":3,"file":"IdentifierUtils.js","sourceRoot":"","sources":["../../src/utils/IdentifierUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IdentifierUtils.js","sourceRoot":"","sources":["../../src/utils/IdentifierUtils.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,24 @@ export declare function hasDefinedType($jp: Joinpoint): boolean;
13
13
  * @returns The base type of the joinpoint, or undefined if the joinpoint does not have a type
14
14
  */
15
15
  export declare function getBaseType($jp: Joinpoint): Type | undefined;
16
+ /**
17
+ * Gets the file path of the given join point.
18
+ * @param $jp The join point
19
+ * @returns The file path string
20
+ */
16
21
  export declare function getFilepath($jp: Joinpoint): string;
22
+ /**
23
+ * Returns the exact location of a given join point
24
+ * @param $jp The joinpoint to evaluate
25
+ * @returns A location string containing the filepath, line and column in the format "filepath@line:column"
26
+ */
17
27
  export declare function getFileLocation($jp: Joinpoint): string;
28
+ /**
29
+ * Orders two join points by their source location: filepath, line, and column
30
+ *
31
+ * @param $jp1 The first join point
32
+ * @param $jp2 The second join point
33
+ * @returns A negative value if $jp1 comes before $jp2, positive if after, or 0 if equal.
34
+ */
18
35
  export declare function compareLocation($jp1: Joinpoint, $jp2: Joinpoint): number;
19
36
  //# sourceMappingURL=JoinpointUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"JoinpointUtils.d.ts","sourceRoot":"","sources":["../../src/utils/JoinpointUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAA0B,QAAQ,EAAE,QAAQ,EAAwC,MAAM,qCAAqC,CAAC;AAExJ,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1C,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,GAAI,GAAG,IAAI,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAQ5D;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,UAEzC;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,UAK7C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CASxE"}
1
+ {"version":3,"file":"JoinpointUtils.d.ts","sourceRoot":"","sources":["../../src/utils/JoinpointUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,IAAI,EAA0B,QAAQ,EAAE,QAAQ,EAAwC,MAAM,qCAAqC,CAAC;AAExJ,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE1C,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,GAAI,GAAG,IAAI,OAAO,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEtD;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,CAQ5D;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,UAK7C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CASxE"}
@@ -24,15 +24,32 @@ export function getBaseType($jp) {
24
24
  }
25
25
  return jpType;
26
26
  }
27
+ /**
28
+ * Gets the file path of the given join point.
29
+ * @param $jp The join point
30
+ * @returns The file path string
31
+ */
27
32
  export function getFilepath($jp) {
28
33
  return $jp instanceof Include ? $jp.parent.filepath : $jp.filepath;
29
34
  }
35
+ /**
36
+ * Returns the exact location of a given join point
37
+ * @param $jp The joinpoint to evaluate
38
+ * @returns A location string containing the filepath, line and column in the format "filepath@line:column"
39
+ */
30
40
  export function getFileLocation($jp) {
31
41
  if ($jp instanceof Include && $jp.line === undefined) {
32
42
  return `${$jp.parent?.filepath}`;
33
43
  }
34
44
  return `${$jp.filepath}@${$jp.line}:${$jp.column}`;
35
45
  }
46
+ /**
47
+ * Orders two join points by their source location: filepath, line, and column
48
+ *
49
+ * @param $jp1 The first join point
50
+ * @param $jp2 The second join point
51
+ * @returns A negative value if $jp1 comes before $jp2, positive if after, or 0 if equal.
52
+ */
36
53
  export function compareLocation($jp1, $jp2) {
37
54
  const filepath1 = getFilepath($jp1), filepath2 = getFilepath($jp2);
38
55
  if (filepath1 !== filepath2)
@@ -1 +1 @@
1
- {"version":3,"file":"JoinpointUtils.js","sourceRoot":"","sources":["../../src/utils/JoinpointUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAqB,QAAQ,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAIxJ,MAAM,UAAU,SAAS,CAAC,GAAc;IACpC,OAAO,GAAG,YAAY,QAAQ,IAAI,GAAG,YAAY,QAAQ,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAc;IACzC,OAAO,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAc;IACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAEhF,OAAO,MAAM,YAAY,WAAW,IAAI,MAAM,YAAY,SAAS,EAAE,CAAC;QAClE,MAAM,GAAG,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAc;IACtC,OAAO,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAc;IAC1C,IAAI,GAAG,YAAY,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAe,EAAE,IAAe;IAC5D,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/F,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtE,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACvF,CAAC"}
1
+ {"version":3,"file":"JoinpointUtils.js","sourceRoot":"","sources":["../../src/utils/JoinpointUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAqB,QAAQ,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AAIxJ,MAAM,UAAU,SAAS,CAAC,GAAc;IACpC,OAAO,GAAG,YAAY,QAAQ,IAAI,GAAG,YAAY,QAAQ,CAAC;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,GAAc;IACzC,OAAO,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC;AACtE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAc;IACtC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,MAAM,GAAG,GAAG,CAAC,IAAI,YAAY,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IAEhF,OAAO,MAAM,YAAY,WAAW,IAAI,MAAM,YAAY,SAAS,EAAE,CAAC;QAClE,MAAM,GAAG,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;IACjF,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAc;IACtC,OAAO,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAc;IAC1C,IAAI,GAAG,YAAY,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACnD,OAAO,GAAG,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,CAAA;AACtD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,IAAe,EAAE,IAAe;IAC5D,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/F,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,CAAC,IAAI,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,YAAY,OAAO,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtE,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACvF,CAAC"}
@@ -1,14 +1,39 @@
1
1
  import { Vardecl, FunctionJp } from "@specs-feup/clava/api/Joinpoints.js";
2
+ /**
3
+ * Clears all cached identifiers and variable references
4
+ */
2
5
  export declare function resetCaches(): void;
6
+ /**
7
+ * Clears the cache of external variable references
8
+ */
3
9
  export declare function resetExternalVarRefs(): void;
4
10
  /**
5
11
  * Retrieves all variables and functions that are eligible for `extern` linkage, i.e.,
6
12
  * elements with storage classes that are not `STATIC` or `EXTERN`
7
- * @returns Array of functions and variables that can be declared as external
13
+ *
14
+ * @returns Array of functions and variables that can be declared as external
8
15
  */
9
16
  export declare function getExternalLinkageIdentifiers(): (FunctionJp | Vardecl)[];
17
+ /**
18
+ * Gets identifiers with internal linkage
19
+ *
20
+ * @returns List of functions and variable declarations with internal linkage
21
+ */
10
22
  export declare function getInternalLinkageIdentifiers(): (FunctionJp | Vardecl)[];
23
+ /**
24
+ * Gets identifiers with external linkage
25
+ *
26
+ * @returns List of functions and variable declarations with external linkage
27
+ */
11
28
  export declare function getExternalLinkageVars(): Vardecl[];
29
+ /**
30
+ * Gets all variable declared with 'extern'
31
+ *
32
+ * @returns List of variable declarations with extern storage class
33
+ */
12
34
  export declare function getExternalVarRefs(): Vardecl[];
35
+ /**
36
+ * Gets all named declarations and labels
37
+ */
13
38
  export declare function getIdentifierDecls(): any[];
14
39
  //# sourceMappingURL=ProgramUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProgramUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ProgramUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAA+C,MAAM,qCAAqC,CAAC;AAWvH,wBAAgB,WAAW,SAM1B;AAED,wBAAgB,oBAAoB,SAEnC;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAaxE;AAED,wBAAgB,6BAA6B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAYxE;AAED,wBAAgB,sBAAsB,IAAI,OAAO,EAAE,CAMlD;AAED,wBAAgB,kBAAkB,IAAI,OAAO,EAAE,CAM9C;AAED,wBAAgB,kBAAkB,IAAI,GAAG,EAAE,CAS1C"}
1
+ {"version":3,"file":"ProgramUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ProgramUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAsC,MAAM,qCAAqC,CAAC;AAU9G;;GAEG;AACH,wBAAgB,WAAW,SAM1B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,SAEnC;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAaxE;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,EAAE,CAYxE;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,EAAE,CAMlD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,EAAE,CAM9C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,GAAG,EAAE,CAS1C"}
@@ -6,6 +6,9 @@ let cachedExternalLinkageIdentifiers = null;
6
6
  let cachedExternalLinkageVars = null;
7
7
  let cachedExternalVarRefs = null;
8
8
  let cachedIdentifierDecls = null;
9
+ /**
10
+ * Clears all cached identifiers and variable references
11
+ */
9
12
  export function resetCaches() {
10
13
  cachedInternalLinkageIdentifiers = null;
11
14
  cachedExternalLinkageIdentifiers = null;
@@ -13,13 +16,17 @@ export function resetCaches() {
13
16
  cachedExternalVarRefs = null;
14
17
  cachedIdentifierDecls = null;
15
18
  }
19
+ /**
20
+ * Clears the cache of external variable references
21
+ */
16
22
  export function resetExternalVarRefs() {
17
23
  cachedExternalVarRefs = null;
18
24
  }
19
25
  /**
20
26
  * Retrieves all variables and functions that are eligible for `extern` linkage, i.e.,
21
27
  * elements with storage classes that are not `STATIC` or `EXTERN`
22
- * @returns Array of functions and variables that can be declared as external
28
+ *
29
+ * @returns Array of functions and variables that can be declared as external
23
30
  */
24
31
  export function getExternalLinkageIdentifiers() {
25
32
  if (cachedExternalLinkageIdentifiers !== null) {
@@ -33,6 +40,11 @@ export function getExternalLinkageIdentifiers() {
33
40
  ];
34
41
  return cachedExternalLinkageIdentifiers;
35
42
  }
43
+ /**
44
+ * Gets identifiers with internal linkage
45
+ *
46
+ * @returns List of functions and variable declarations with internal linkage
47
+ */
36
48
  export function getInternalLinkageIdentifiers() {
37
49
  if (cachedInternalLinkageIdentifiers !== null) {
38
50
  return cachedInternalLinkageIdentifiers;
@@ -45,6 +57,11 @@ export function getInternalLinkageIdentifiers() {
45
57
  ];
46
58
  return cachedInternalLinkageIdentifiers;
47
59
  }
60
+ /**
61
+ * Gets identifiers with external linkage
62
+ *
63
+ * @returns List of functions and variable declarations with external linkage
64
+ */
48
65
  export function getExternalLinkageVars() {
49
66
  if (cachedExternalLinkageVars != null) {
50
67
  return cachedExternalLinkageVars;
@@ -52,6 +69,11 @@ export function getExternalLinkageVars() {
52
69
  cachedExternalLinkageVars = Query.search(Vardecl, (varDeclJp) => isExternalLinkageIdentifier(varDeclJp)).get();
53
70
  return cachedExternalLinkageVars;
54
71
  }
72
+ /**
73
+ * Gets all variable declared with 'extern'
74
+ *
75
+ * @returns List of variable declarations with extern storage class
76
+ */
55
77
  export function getExternalVarRefs() {
56
78
  if (cachedExternalVarRefs !== null) {
57
79
  return cachedExternalVarRefs;
@@ -59,6 +81,9 @@ export function getExternalVarRefs() {
59
81
  cachedExternalVarRefs = Query.search(Vardecl, { storageClass: StorageClass.EXTERN }).get();
60
82
  return cachedExternalVarRefs;
61
83
  }
84
+ /**
85
+ * Gets all named declarations and labels
86
+ */
62
87
  export function getIdentifierDecls() {
63
88
  if (cachedIdentifierDecls !== null) {
64
89
  return cachedIdentifierDecls;
@@ -1 +1 @@
1
- {"version":3,"file":"ProgramUtils.js","sourceRoot":"","sources":["../../src/utils/ProgramUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProgramUtils.js","sourceRoot":"","sources":["../../src/utils/ProgramUtils.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TypeDeclUtils.d.ts","sourceRoot":"","sources":["../../src/utils/TypeDeclUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAA4F,MAAM,qCAAqC,CAAC;AAGvK,OAAO,EAAa,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGzD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAStE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEtD;AAGD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAO3E;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAc/D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,OAAO,CAcnE"}
1
+ {"version":3,"file":"TypeDeclUtils.d.ts","sourceRoot":"","sources":["../../src/utils/TypeDeclUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAA4F,MAAM,qCAAqC,CAAC;AAGvK,OAAO,EAAa,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGzD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAStE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAO3E;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,GAAG,OAAO,CAc/D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,GAAG,OAAO,CAcnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"TypeDeclUtils.js","sourceRoot":"","sources":["../../src/utils/TypeDeclUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TypeDeclUtils.js","sourceRoot":"","sources":["../../src/utils/TypeDeclUtils.ts"],"names":[],"mappings":"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"}
@@ -6,14 +6,46 @@ import { FunctionJp, Joinpoint, Vardecl, Varref } from "@specs-feup/clava/api/Jo
6
6
  */
7
7
  export declare function getVolatileVarRefs($jp: Joinpoint): Varref[];
8
8
  /**
9
- * Retrieves all external references of the given variable.
9
+ * Retrieves all external references of the given variable
10
+ *
10
11
  * @param $varDecl variable to match by name.
11
12
  * @returns Array of external references with the same name as the given variable.
12
13
  */
13
14
  export declare function findExternalVarRefs($varDecl: Vardecl): Vardecl[];
15
+ /**
16
+ * Identifies functions in the same file that reference the specified variable declaration
17
+ *
18
+ * @param $jp The variable declaration
19
+ * @returns An array of functions that reference the variable
20
+ */
14
21
  export declare function findReferencingFunctions($jp: Vardecl): FunctionJp[];
22
+ /**
23
+ * Finds duplicate definitions of the given variable declaration among external linkage variables
24
+ *
25
+ * @param $jp The variable declaration to evaluate
26
+ * @returns An array of variable declarations representing duplicates
27
+ */
15
28
  export declare function findDuplicateVarDefinition($jp: Vardecl): Vardecl[];
29
+ /**
30
+ * Checks whether two joinpoints represent the same variable declaration by comparing identifier name, type, and external linkage
31
+ *
32
+ * @param $jp1 The first join point
33
+ * @param $jp2 The second join point
34
+ * @returns True if both are equivalent external variable declarations, false otherwise
35
+ */
16
36
  export declare function isSameVarDecl($jp1: Joinpoint, $jp2: Joinpoint): boolean;
37
+ /**
38
+ * Checks if the given variable has multiple external linkage declarations across different files
39
+ *
40
+ * @param $jp The variable declaration to evaluate
41
+ * @returns True if multiple external declarations exist, false otherwise
42
+ */
17
43
  export declare function hasMultipleExternalLinkDeclarations($jp: Vardecl): boolean;
44
+ /**
45
+ * Checks whether the given variable declaration is used in its file or in files that include its header.
46
+ *
47
+ * @param varDecl The variable declaration to check
48
+ * @returns True if the variable is referenced, false otherwise
49
+ */
18
50
  export declare function isVarUsed(varDecl: Vardecl): boolean;
19
51
  //# sourceMappingURL=VarUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"VarUtils.d.ts","sourceRoot":"","sources":["../../src/utils/VarUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAE,SAAS,EAA0B,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAM7H;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,EAAE,CAQ3D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,CAEhE;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAQnE;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAElE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAKvE;AAED,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIzE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAYnD"}
1
+ {"version":3,"file":"VarUtils.d.ts","sourceRoot":"","sources":["../../src/utils/VarUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAE,SAAS,EAA0B,OAAO,EAAE,MAAM,EAAE,MAAM,qCAAqC,CAAC;AAM7H;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,GAAG,MAAM,EAAE,CAQ3D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,CAEhE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,EAAE,CAQnE;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,EAAE,CAElE;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAKvE;AAED;;;;;GAKG;AAEH,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAIzE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAWnD"}
@@ -19,31 +19,63 @@ export function getVolatileVarRefs($jp) {
19
19
  }).get();
20
20
  }
21
21
  /**
22
- * Retrieves all external references of the given variable.
22
+ * Retrieves all external references of the given variable
23
+ *
23
24
  * @param $varDecl variable to match by name.
24
25
  * @returns Array of external references with the same name as the given variable.
25
26
  */
26
27
  export function findExternalVarRefs($varDecl) {
27
28
  return getExternalVarRefs().filter(ref => ref.name === $varDecl.name);
28
29
  }
30
+ /**
31
+ * Identifies functions in the same file that reference the specified variable declaration
32
+ *
33
+ * @param $jp The variable declaration
34
+ * @returns An array of functions that reference the variable
35
+ */
29
36
  export function findReferencingFunctions($jp) {
30
37
  const fileJp = $jp.getAncestor("file");
31
38
  const functionsJp = Query.searchFrom(fileJp, FunctionJp).get();
32
39
  return functionsJp
33
40
  .filter(funcJp => Query.searchFrom(funcJp, Varref, { decl: (declJp) => declJp?.astId === $jp.astId }).get().length > 0);
34
41
  }
42
+ /**
43
+ * Finds duplicate definitions of the given variable declaration among external linkage variables
44
+ *
45
+ * @param $jp The variable declaration to evaluate
46
+ * @returns An array of variable declarations representing duplicates
47
+ */
35
48
  export function findDuplicateVarDefinition($jp) {
36
49
  return getExternalLinkageVars().filter((varDeclJp) => varDeclJp.astId !== $jp.astId && isSameVarDecl(varDeclJp, $jp));
37
50
  }
51
+ /**
52
+ * Checks whether two joinpoints represent the same variable declaration by comparing identifier name, type, and external linkage
53
+ *
54
+ * @param $jp1 The first join point
55
+ * @param $jp2 The second join point
56
+ * @returns True if both are equivalent external variable declarations, false otherwise
57
+ */
38
58
  export function isSameVarDecl($jp1, $jp2) {
39
59
  return $jp1 instanceof Vardecl && $jp2 instanceof Vardecl &&
40
60
  isExternalLinkageIdentifier($jp1) && isExternalLinkageIdentifier($jp2) &&
41
61
  getIdentifierName($jp1) === getIdentifierName($jp2) &&
42
62
  $jp1.type.code === $jp2.type.code;
43
63
  }
64
+ /**
65
+ * Checks if the given variable has multiple external linkage declarations across different files
66
+ *
67
+ * @param $jp The variable declaration to evaluate
68
+ * @returns True if multiple external declarations exist, false otherwise
69
+ */
44
70
  export function hasMultipleExternalLinkDeclarations($jp) {
45
71
  return getExternalLinkageIdentifiers().some(identifier => isSameVarDecl(identifier, $jp) && identifier.getAncestor("file").ast !== $jp.getAncestor("file").ast);
46
72
  }
73
+ /**
74
+ * Checks whether the given variable declaration is used in its file or in files that include its header.
75
+ *
76
+ * @param varDecl The variable declaration to check
77
+ * @returns True if the variable is referenced, false otherwise
78
+ */
47
79
  export function isVarUsed(varDecl) {
48
80
  const fileJp = varDecl.getAncestor("file");
49
81
  let referencingFiles;
@@ -1 +1 @@
1
- {"version":3,"file":"VarUtils.js","sourceRoot":"","sources":["../../src/utils/VarUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"VarUtils.js","sourceRoot":"","sources":["../../src/utils/VarUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@specs-feup/clava-misra",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "author": "Milena Gouveia",
5
5
  "description": "Clava library to automatically detect and correct violations of the MISRA-C:2012 standard in C code",
6
6
  "type": "module",
@@ -42,7 +42,6 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@specs-feup/clava": "3.0.26",
45
- "@specs-feup/clava-visualization": "^1.0.5",
46
45
  "@specs-feup/lara": "^3.0.11",
47
46
  "@specs-feup/clava-flow": "^1.0.1",
48
47
  "@specs-feup/flow": "^1.0.3"
package/src/MISRATool.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import Query from "@specs-feup/lara/api/weaver/Query.js";
2
- import { FileJp, Joinpoint, Program } from "@specs-feup/clava/api/Joinpoints.js";
2
+ import { FileJp, FunctionJp, Joinpoint, Program } from "@specs-feup/clava/api/Joinpoints.js";
3
3
  import MISRARule from "./MISRARule.js";
4
4
  import MISRAContext from "./MISRAContext.js";
5
5
  import { MISRATransformationType } from "./MISRA.js";
6
6
  import Clava from "@specs-feup/clava/api/clava/Clava.js";
7
7
  import { resetCaches } from "./utils/ProgramUtils.js";
8
8
  import { selectRules } from "./rules/index.js";
9
+ import ClavaJoinPoints from "@specs-feup/clava/api/clava/ClavaJoinPoints.js";
9
10
 
10
11
  enum ExecutionMode {
11
12
  CORRECTION,
@@ -18,6 +19,10 @@ export default class MISRATool {
18
19
  static readonly #standards = new Set(["c90", "c99", "c11"]);
19
20
  static readonly #ruleTypes = new Set(["all", "single", "system"]);
20
21
 
22
+ /**
23
+ * Checks whether the source code complies with MISRA C coding guidelines and reports all violations identified during the analysis
24
+ * @param startingPoint The AST node from which to start the analysis
25
+ */
21
26
  public static checkCompliance(startingPoint: Program | FileJp = Query.root() as Program) {
22
27
  this.init();
23
28
 
@@ -43,12 +48,22 @@ export default class MISRATool {
43
48
  this.context.config = configFilePath;
44
49
  }
45
50
 
51
+ // Correct violations
46
52
  let iteration = 0;
47
53
  let modified = true;
48
54
  while (modified) {
49
55
  console.log(`[Clava-MISRATool] Iteration #${++iteration}: Applying MISRA-C transformations...`);
50
56
  modified = this.transformAST(Query.root() as Program);
51
57
  }
58
+
59
+ // Additional transformation: insert explicit 'void' in the argument list of functions with no parameters
60
+ const functionJps = Query.search(FunctionJp).get();
61
+ functionJps.forEach(functionJp => {
62
+ if (functionJp.params.length === 0) {
63
+ functionJp.addParam("", ClavaJoinPoints.builtinType("void"));
64
+ }
65
+ })
66
+
52
67
  this.outputReport(ExecutionMode.CORRECTION);
53
68
  }
54
69
 
@@ -56,7 +71,7 @@ export default class MISRATool {
56
71
  * Recursively transforms the AST using a pre-order traversal
57
72
  *
58
73
  * @param $jp AST node from which to start the visit.
59
- * @returns Return true if any modifications were made (removal, replacement, or changes in descendants). Otherwise, returns false.
74
+ * @returns Return true if any modification was made (removal, replacement or changes in descendants). Otherwise, returns false.
60
75
  */
61
76
  private static transformAST($jp: Joinpoint): boolean {
62
77
  let modified = false;
@@ -80,6 +95,9 @@ export default class MISRATool {
80
95
  return modified;
81
96
  }
82
97
 
98
+ /**
99
+ * Validates the C standard, creates a MISRA context, and initializes rules.
100
+ */
83
101
  private static init() {
84
102
  this.validateStdVersion();
85
103
  this.context = new MISRAContext();
package/src/main.ts CHANGED
@@ -1,7 +1,4 @@
1
- import VisualizationTool from "@specs-feup/clava-visualization/api/VisualizationTool.js";
2
1
  import MISRATool from "./MISRATool.js";
3
2
 
4
3
  MISRATool.checkCompliance();
5
- MISRATool.correctViolations();
6
-
7
- //await VisualizationTool.visualize();
4
+ MISRATool.correctViolations();
@@ -34,7 +34,7 @@ import Rule_8_9_BlockScopeDefinition from "./Section8_DeclarationsAndDefinitions
34
34
 
35
35
  /**
36
36
  * Selects MISRA-C rules based on the provided analysis type.
37
- * Returns rules sorted by priority (lower value = higher priority).
37
+ * Returns rules sorted by priority (lower value has higher priority).
38
38
  *
39
39
  * @param context - The shared analysis context
40
40
  * @param analysisType - Rule type to include ("all" for all rules).
@@ -1,8 +1,5 @@
1
1
  import { Call, FileJp, FunctionJp, Varref } from "@specs-feup/clava/api/Joinpoints.js";
2
2
  import Query from "@specs-feup/lara/api/weaver/Query.js";
3
- import { getIncludesOfFile } from "./FileUtils.js";
4
- import { findExternalFunctionDecl } from "./FunctionUtils.js";
5
- import { getFileLocation } from "./JoinpointUtils.js";
6
3
 
7
4
  /**
8
5
  * Checks if the given joinpoint represents a call to an implicit function.