QL code and tests for C#/C++/JavaScript.

This commit is contained in:
Pavel Avgustinov
2018-08-02 17:53:23 +01:00
commit b55526aa58
10684 changed files with 581163 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
| 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 |

View File

@@ -0,0 +1,12 @@
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

View File

@@ -0,0 +1,5 @@
| 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

@@ -0,0 +1,12 @@
/**
* @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

@@ -0,0 +1,7 @@
| 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

@@ -0,0 +1,12 @@
/**
* @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()

View File

@@ -0,0 +1,18 @@
| file://:0:0:0:0 | __va_list_tag | 0 | 0 |
| virtual_functions.cpp:1:7:1:7 | A | 2 | 2 |
| virtual_functions.cpp:8:7:8:8 | B1 | 2 | 0 |
| virtual_functions.cpp:21:7:21:8 | B2 | 2 | 0 |
| virtual_functions.cpp:34:8:34:9 | X1 | 1 | 0 |
| virtual_functions.cpp:35:8:35:9 | X2 | 0 | 0 |
| virtual_functions.cpp:36:8:36:9 | X3 | 1 | 0 |
| virtual_functions.cpp:37:8:37:9 | X4 | 1 | 0 |
| virtual_functions.cpp:38:8:38:9 | X5 | 1 | 0 |
| virtual_functions.cpp:39:8:39:9 | X6 | 0 | 0 |
| virtual_functions.cpp:40:8:40:9 | X7 | 1 | 0 |
| virtual_functions.cpp:42:8:42:9 | Y1 | 1 | 0 |
| virtual_functions.cpp:43:8:43:9 | Y2 | 0 | 0 |
| virtual_functions.cpp:44:8:44:9 | Y3 | 1 | 0 |
| virtual_functions.cpp:45:8:45:9 | Y4 | 1 | 0 |
| virtual_functions.cpp:46:8:46:9 | Y5 | 1 | 0 |
| virtual_functions.cpp:47:8:47:9 | Y6 | 0 | 0 |
| virtual_functions.cpp:48:8:48:9 | Y7 | 1 | 0 |

View File

@@ -0,0 +1,7 @@
import cpp
from Class c
select c,
count(VirtualFunction f | f.getDeclaringType() = c),
count(PureVirtualFunction f | f.getDeclaringType() = c)

View File

@@ -0,0 +1 @@
| virtual_functions.cpp:1:7:1:7 | A |

View File

@@ -0,0 +1,4 @@
import cpp
from Interface i
select i

View File

@@ -0,0 +1,48 @@
class A
{
public:
virtual void withunusedpara(int * para1, int unusedpara) = 0;
virtual void withunusedpara(int * para1, int & para2) = 0;
};
class B1: public A
{
public:
virtual void withunusedpara(int * para1, int unusedpara)
{
*para1 = 1U;
}
virtual void withunusedpara(int * para1, int & para2)
{
*para1 = 1U;
}
};
class B2: public A
{
public:
virtual void withunusedpara(int * para1, int unusedpara)
{
*para1 = 1U;
}
virtual void withunusedpara(int * para1, int & para2)
{
para2 = 0;
}
};
struct X1 { virtual void f() {} };
struct X2 : X1 {};
struct X3 : X2 { void f() {} };
struct X4 : X2 { void f() {} };
struct X5 : X3, X4 { void f() {} };
struct X6 : X5 {};
struct X7 : X6 { void f() {} };
struct Y1 { virtual void f() {} };
struct Y2 : Y1 {};
struct Y3 : virtual Y2 { void f() {} };
struct Y4 : virtual Y2 { void f() {} };
struct Y5 : Y3, Y4 { void f() {} };
struct Y6 : Y5 {};
struct Y7 : Y6 { void f() {} };