Merge pull request #1716 from geoffw0/qldoceg4

CPP: Add syntax examples to QLDoc in Function.qll
This commit is contained in:
Jonas Jensen
2019-08-13 16:27:20 +02:00
committed by GitHub
11 changed files with 329 additions and 132 deletions

View File

@@ -32,3 +32,10 @@
| functions.cpp:28:3:28:8 | ~Table | ~Table | | | functions.cpp:28:3:28:8 | definition |
| functions.cpp:29:9:29:14 | lookup | lookup | | | functions.cpp:29:9:29:14 | declaration |
| functions.cpp:30:8:30:13 | insert | insert | | | functions.cpp:30:8:30:13 | declaration |
| functions.cpp:33:7:33:7 | operator= | operator= | | | functions.cpp:33:7:33:7 | declaration |
| functions.cpp:33:7:33:7 | operator= | operator= | | | functions.cpp:33:7:33:7 | definition |
| functions.cpp:36:2:36:8 | MyClass | MyClass | | | functions.cpp:36:2:36:8 | declaration |
| functions.cpp:37:2:37:8 | MyClass | MyClass | | | functions.cpp:37:2:37:8 | declaration |
| functions.cpp:38:2:38:8 | MyClass | MyClass | | | functions.cpp:38:2:38:8 | declaration |
| functions.cpp:39:2:39:8 | MyClass | MyClass | | | functions.cpp:39:2:39:8 | declaration |
| functions.cpp:40:2:40:13 | operator int | operator int | | | functions.cpp:40:2:40:13 | declaration |

View File

@@ -1,23 +1,26 @@
| ODASA-5186.cpp:4:8:4:14 | MyClass<T> | Class | ODASA-5186.cpp:5:8:5:17 | operator== | member function |
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | member function |
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | member function |
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:5:8:5:8 | operator== | member function |
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | member function |
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | member function |
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | member function |
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | member function |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | member function |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | member function |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:8:7:8:8 | af | member function |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:11:7:11:8 | ag | member function |
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | member function |
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | member function |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | Table | constructor |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | Table | member function |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | operator= | member function |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:27:3:27:7 | Table | constructor |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:27:3:27:7 | Table | member function |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:28:3:28:8 | ~Table | destructor |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:28:3:28:8 | ~Table | member function |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:29:9:29:14 | lookup | member function |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:30:8:30:13 | insert | member function |
| ODASA-5186.cpp:4:8:4:14 | MyClass<T> | Class | ODASA-5186.cpp:5:8:5:17 | operator== | |
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | |
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:4:8:4:8 | operator= | |
| ODASA-5186.cpp:4:8:4:14 | MyClass<int> | Struct | ODASA-5186.cpp:5:8:5:8 | operator== | |
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | |
| ODASA-5186.hpp:2:8:2:17 | NEQ_helper<MyClass<int>> | Struct | ODASA-5186.hpp:2:8:2:8 | operator= | |
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | |
| file://:0:0:0:0 | __va_list_tag | Struct | file://:0:0:0:0 | operator= | |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:7:8:7:8 | operator= | |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:8:7:8:8 | af | |
| functions.cpp:7:8:7:8 | A | Struct | functions.cpp:11:7:11:8 | ag | |
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | |
| functions.cpp:19:7:19:10 | Name | Class | functions.cpp:19:7:19:7 | operator= | |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | Table | Constructor, CopyConstructor, getAConstructor() |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:23:7:23:7 | operator= | |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:27:3:27:7 | Table | Constructor, getAConstructor() |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:28:3:28:8 | ~Table | Destructor, getDestructor() |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:29:9:29:14 | lookup | |
| functions.cpp:23:7:23:11 | Table | Class | functions.cpp:30:8:30:13 | insert | |
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:33:7:33:7 | operator= | |
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:36:2:36:8 | MyClass | Constructor, NoArgConstructor, getAConstructor() |
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:37:2:37:8 | MyClass | Constructor, ConversionConstructor, getAConstructor() |
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:38:2:38:8 | MyClass | Constructor, CopyConstructor, getAConstructor() |
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:39:2:39:8 | MyClass | Constructor, ConversionConstructor, MoveConstructor, getAConstructor() |
| functions.cpp:33:7:33:13 | MyClass | Class | functions.cpp:40:2:40:13 | operator int | ConversionOperator |

View File

@@ -4,12 +4,41 @@
*/
import cpp
from Class c, string ctype, MemberFunction f, string ftype
where
if c instanceof Struct then ctype = "Struct" else ctype = "Class" and
bindingset[c, f] string describe(Class c, MemberFunction f)
{
(
(f = c.getAConstructor() and ftype = "constructor") or
(f = c.getDestructor() and ftype = "destructor") or
(f.getDeclaringType() = c and ftype = "member function")
f = c.getAConstructor() and
result = "getAConstructor()"
) or (
f = c.getDestructor() and
result = "getDestructor()"
) or (
f instanceof Constructor and
result = "Constructor"
) or (
f instanceof Destructor and
result = "Destructor"
) or (
f instanceof ConversionConstructor and
result = "ConversionConstructor"
) or (
f instanceof CopyConstructor and
result = "CopyConstructor"
) or (
f instanceof MoveConstructor and
result = "MoveConstructor"
) or (
f instanceof NoArgConstructor and
result = "NoArgConstructor"
) or (
f instanceof ConversionOperator and
result = "ConversionOperator"
)
select c, ctype, f, ftype
}
from Class c, string ctype, MemberFunction f
where
f.getDeclaringType() = c and
if c instanceof Struct then ctype = "Struct" else ctype = "Class"
select
c, ctype, f, concat(describe(c, f), ", ")

View File

@@ -30,4 +30,12 @@ public:
bool insert(Name*);
};
class MyClass
{
public:
MyClass();
MyClass(int from);
MyClass(const MyClass &from);
MyClass(MyClass &&from);
operator int();
};

View File

@@ -1,20 +1,16 @@
| virtual_functions.cpp:4:15:4:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | 2 | 0 | <none> |
| virtual_functions.cpp:5:15:5:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | 2 | 0 | <none> |
| virtual_functions.cpp:11:15:11:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | 0 | 1 | A |
| virtual_functions.cpp:15:15:15:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | 0 | 1 | A |
| virtual_functions.cpp:24:15:24:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | 0 | 1 | A |
| virtual_functions.cpp:28:15:28:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | 0 | 1 | A |
| virtual_functions.cpp:34:26:34:26 | f | virtual_functions.cpp:34:8:34:9 | X1 | 2 | 0 | <none> |
| virtual_functions.cpp:36:23:36:23 | f | virtual_functions.cpp:36:8:36:9 | X3 | 1 | 1 | X1 |
| virtual_functions.cpp:37:23:37:23 | f | virtual_functions.cpp:37:8:37:9 | X4 | 1 | 1 | X1 |
| virtual_functions.cpp:38:27:38:27 | f | virtual_functions.cpp:38:8:38:9 | X5 | 1 | 2 | X3 |
| virtual_functions.cpp:38:27:38:27 | f | virtual_functions.cpp:38:8:38:9 | X5 | 1 | 2 | X4 |
| virtual_functions.cpp:40:23:40:23 | f | virtual_functions.cpp:40:8:40:9 | X7 | 0 | 1 | X5 |
| virtual_functions.cpp:42:26:42:26 | f | virtual_functions.cpp:42:8:42:9 | Y1 | 4 | 0 | <none> |
| virtual_functions.cpp:44:31:44:31 | f | virtual_functions.cpp:44:8:44:9 | Y3 | 1 | 1 | Y1 |
| virtual_functions.cpp:45:31:45:31 | f | virtual_functions.cpp:45:8:45:9 | Y4 | 1 | 1 | Y1 |
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | 1 | 3 | Y1 |
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | 1 | 3 | Y3 |
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | 1 | 3 | Y4 |
| virtual_functions.cpp:48:23:48:23 | f | virtual_functions.cpp:48:8:48:9 | Y7 | 0 | 2 | Y1 |
| virtual_functions.cpp:48:23:48:23 | f | virtual_functions.cpp:48:8:48:9 | Y7 | 0 | 2 | Y5 |
| virtual_functions.cpp:4:15:4:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | B1, B2 | | PureVirtualFunction |
| virtual_functions.cpp:5:15:5:28 | withunusedpara | virtual_functions.cpp:1:7:1:7 | A | B1, B2 | | PureVirtualFunction |
| virtual_functions.cpp:11:15:11:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | | A | |
| virtual_functions.cpp:15:15:15:28 | withunusedpara | virtual_functions.cpp:8:7:8:8 | B1 | | A | |
| virtual_functions.cpp:24:15:24:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | | A | |
| virtual_functions.cpp:28:15:28:28 | withunusedpara | virtual_functions.cpp:21:7:21:8 | B2 | | A | |
| virtual_functions.cpp:34:26:34:26 | f | virtual_functions.cpp:34:8:34:9 | X1 | X3, X4 | | |
| virtual_functions.cpp:36:23:36:23 | f | virtual_functions.cpp:36:8:36:9 | X3 | X5 | X1 | |
| virtual_functions.cpp:37:23:37:23 | f | virtual_functions.cpp:37:8:37:9 | X4 | X5 | X1 | |
| virtual_functions.cpp:38:27:38:27 | f | virtual_functions.cpp:38:8:38:9 | X5 | X7 | X3, X4 | |
| virtual_functions.cpp:40:23:40:23 | f | virtual_functions.cpp:40:8:40:9 | X7 | | X5 | |
| virtual_functions.cpp:42:26:42:26 | f | virtual_functions.cpp:42:8:42:9 | Y1 | Y3, Y4, Y5, Y7 | | |
| virtual_functions.cpp:44:31:44:31 | f | virtual_functions.cpp:44:8:44:9 | Y3 | Y5 | Y1 | |
| virtual_functions.cpp:45:31:45:31 | f | virtual_functions.cpp:45:8:45:9 | Y4 | Y5 | Y1 | |
| virtual_functions.cpp:46:27:46:27 | f | virtual_functions.cpp:46:8:46:9 | Y5 | Y7 | Y1, Y3, Y4 | |
| virtual_functions.cpp:48:23:48:23 | f | virtual_functions.cpp:48:8:48:9 | Y7 | | Y1, Y5 | |

View File

@@ -1,12 +1,15 @@
import cpp
from VirtualFunction f, string overriddenFunctionDeclaringType
where if exists(f.getAnOverriddenFunction().getDeclaringType())
then overriddenFunctionDeclaringType = f.getAnOverriddenFunction().getDeclaringType().toString()
else overriddenFunctionDeclaringType = "<none>"
select f,
f.getDeclaringType(),
count(f.getAnOverridingFunction()),
count(f.getAnOverriddenFunction()),
overriddenFunctionDeclaringType
string describe(VirtualFunction f)
{
f instanceof PureVirtualFunction and
result = "PureVirtualFunction"
}
from VirtualFunction f
select
f,
f.getDeclaringType(),
concat(f.getAnOverridingFunction().getDeclaringType().toString(), ", "),
concat(f.getAnOverriddenFunction().getDeclaringType().toString(), ", "),
concat(describe(f), ", ")

View File

@@ -1,5 +0,0 @@
| virtual_functions.cpp:34:8:34:9 | X1 | virtual_functions.cpp:36:8:36:9 | X3 |
| virtual_functions.cpp:34:8:34:9 | X1 | virtual_functions.cpp:37:8:37:9 | X4 |
| virtual_functions.cpp:36:8:36:9 | X3 | virtual_functions.cpp:38:8:38:9 | X5 |
| virtual_functions.cpp:37:8:37:9 | X4 | virtual_functions.cpp:38:8:38:9 | X5 |
| virtual_functions.cpp:38:8:38:9 | X5 | virtual_functions.cpp:40:8:40:9 | X7 |

View File

@@ -1,12 +0,0 @@
/**
* @name VirtualFunctions5
* @description Test of getAnOverridingFunction in a hierarchy with no virtual inheritance
* @kind table
*/
import cpp
from VirtualFunction f
where
f.getDeclaringType().getName().matches("X%")
select f.getDeclaringType(), f.getAnOverridingFunction().getDeclaringType()

View File

@@ -1,7 +0,0 @@
| virtual_functions.cpp:42:8:42:9 | Y1 | virtual_functions.cpp:44:8:44:9 | Y3 |
| virtual_functions.cpp:42:8:42:9 | Y1 | virtual_functions.cpp:45:8:45:9 | Y4 |
| virtual_functions.cpp:42:8:42:9 | Y1 | virtual_functions.cpp:46:8:46:9 | Y5 |
| virtual_functions.cpp:42:8:42:9 | Y1 | virtual_functions.cpp:48:8:48:9 | Y7 |
| virtual_functions.cpp:44:8:44:9 | Y3 | virtual_functions.cpp:46:8:46:9 | Y5 |
| virtual_functions.cpp:45:8:45:9 | Y4 | virtual_functions.cpp:46:8:46:9 | Y5 |
| virtual_functions.cpp:46:8:46:9 | Y5 | virtual_functions.cpp:48:8:48:9 | Y7 |

View File

@@ -1,12 +0,0 @@
/**
* @name VirtualFunctions6
* @description Test of getAnOverridingFunction in a hierarchy with virtual inheritance
* @kind table
*/
import cpp
from VirtualFunction f
where
f.getDeclaringType().getName().matches("Y%")
select f.getDeclaringType(), f.getAnOverridingFunction().getDeclaringType()