mirror of
https://github.com/github/codeql.git
synced 2025-12-17 09:13:20 +01:00
This commit sets initial dbschemes for cpp, csharp, java, javascript, and python so that automated testing for upgrade scripts would also cover legacy upgrades.
1112 lines
33 KiB
Plaintext
1112 lines
33 KiB
Plaintext
/*
|
|
* External artifacts
|
|
*/
|
|
|
|
externalDefects(
|
|
unique int id : @externalDefect,
|
|
varchar(900) queryPath : string ref,
|
|
int location : @location_default ref,
|
|
varchar(900) message : string ref,
|
|
float severity : float ref
|
|
);
|
|
|
|
externalMetrics(
|
|
unique int id : @externalMetric,
|
|
varchar(900) queryPath : string ref,
|
|
int location : @location_default ref,
|
|
float value : float ref
|
|
);
|
|
|
|
externalData(
|
|
int id : @externalDataElement,
|
|
varchar(900) path : string ref,
|
|
int column: int ref,
|
|
varchar(900) value : string ref
|
|
);
|
|
|
|
snapshotDate(unique date snapshotDate : date ref);
|
|
|
|
sourceLocationPrefix(varchar(900) prefix : string ref);
|
|
|
|
/*
|
|
* Duplicate code
|
|
*/
|
|
|
|
duplicateCode(
|
|
unique int id : @duplication,
|
|
varchar(900) relativePath : string ref,
|
|
int equivClass : int ref);
|
|
|
|
similarCode(
|
|
unique int id : @similarity,
|
|
varchar(900) relativePath : string ref,
|
|
int equivClass : int ref);
|
|
|
|
@duplication_or_similarity = @duplication | @similarity
|
|
|
|
tokens(
|
|
int id : @duplication_or_similarity ref,
|
|
int offset : int ref,
|
|
int beginLine : int ref,
|
|
int beginColumn : int ref,
|
|
int endLine : int ref,
|
|
int endColumn : int ref);
|
|
|
|
/*
|
|
* Version history
|
|
*/
|
|
|
|
svnentries(
|
|
int id : @svnentry,
|
|
varchar(500) revision : string ref,
|
|
varchar(500) author : string ref,
|
|
date revisionDate : date ref,
|
|
int changeSize : int ref
|
|
)
|
|
|
|
svnaffectedfiles(
|
|
int id : @svnentry ref,
|
|
int file : @file ref,
|
|
varchar(500) action : string ref
|
|
)
|
|
|
|
svnentrymsg(
|
|
int id : @svnentry ref,
|
|
varchar(500) message : string ref
|
|
)
|
|
|
|
svnchurn(
|
|
int commit : @svnentry ref,
|
|
int file : @file ref,
|
|
int churnedLines : int ref
|
|
)
|
|
|
|
/*
|
|
* C++ dbscheme
|
|
*/
|
|
|
|
@location = @location_stmt | @location_expr | @location_default ;
|
|
|
|
locations_default(unique int id: @location_default,
|
|
int file: @file ref,
|
|
int beginLine: int ref,
|
|
int beginColumn: int ref,
|
|
int endLine: int ref,
|
|
int endColumn: int ref);
|
|
|
|
locations_stmt(unique int id: @location_stmt,
|
|
int file: @file ref,
|
|
int beginLine: int ref,
|
|
int beginColumn: int ref,
|
|
int endLine: int ref,
|
|
int endColumn: int ref);
|
|
|
|
locations_expr(unique int id: @location_expr,
|
|
int file: @file ref,
|
|
int beginLine: int ref,
|
|
int beginColumn: int ref,
|
|
int endLine: int ref,
|
|
int endColumn: int ref);
|
|
|
|
@sourceline = @file | @function | @variable | @enumconstant;
|
|
|
|
numlines(unique int element_id: @sourceline ref,
|
|
int num_lines: int ref,
|
|
int num_code: int ref,
|
|
int num_comment: int ref
|
|
);
|
|
|
|
diagnostics(unique int id: @diagnostic,
|
|
int severity: int ref,
|
|
varchar(900) error_tag: string ref,
|
|
varchar(900) error_message: string ref,
|
|
int location: @location_default ref);
|
|
|
|
/*
|
|
fromSource(0) = unknown,
|
|
fromSource(1) = from source,
|
|
fromSource(2) = from library
|
|
*/
|
|
files(unique int id: @file,
|
|
varchar(900) name: string ref,
|
|
varchar(900) simple: string ref,
|
|
varchar(900) ext: string ref,
|
|
int fromSource: int ref);
|
|
|
|
folders(unique int id: @folder,
|
|
varchar(900) name: string ref,
|
|
varchar(900) simple: string ref);
|
|
|
|
@container = @folder | @file
|
|
|
|
containerparent(int parent: @container ref,
|
|
unique int child: @container ref);
|
|
|
|
fileannotations(int id: @file ref,
|
|
int kind: int ref,
|
|
varchar(900) name: string ref,
|
|
varchar(900) value: string ref);
|
|
|
|
inmacroexpansion(int id: @element ref,
|
|
int inv: @macroinvocation ref);
|
|
|
|
macroinvocations(unique int id: @macroinvocation,
|
|
int macro_id: @ppd_define ref,
|
|
int location: @location_default ref);
|
|
|
|
macroparent(unique int id: @macroinvocation ref,
|
|
int parent_id: @macroinvocation ref);
|
|
|
|
// a macroinvocation may be part of another location
|
|
// the way to find a constant expression that uses a macro
|
|
// is thus to find a constant expression that has a location
|
|
// to which a macro invocation is bound
|
|
macrolocationbind(int id: @macroinvocation ref,
|
|
int location: @location ref);
|
|
|
|
/*
|
|
case @function.kind of
|
|
1 = normal
|
|
| 2 = constructor
|
|
| 3 = destructor
|
|
| 4 = conversion
|
|
| 5 = operator
|
|
| 6 = builtin // GCC built-in functions, e.g. __builtin___memcpy_chk
|
|
;
|
|
*/
|
|
functions(unique int id: @function,
|
|
varchar(900) name: string ref,
|
|
int kind: int ref);
|
|
|
|
function_return_type(int id: @function ref, int return_type: @type ref);
|
|
|
|
purefunctions(unique int id: @function ref);
|
|
|
|
|
|
|
|
fun_decls(unique int id: @fun_decl,
|
|
int function: @function ref,
|
|
int type_id: @type ref,
|
|
varchar(900) name: string ref,
|
|
int location: @location_default ref);
|
|
fun_def(unique int id: @fun_decl ref);
|
|
fun_decl_specifiers(int id: @fun_decl ref,
|
|
varchar(900) name: string ref)
|
|
fun_decl_throws(int fun_decl: @fun_decl ref,
|
|
int index: int ref,
|
|
int type_id: @type ref);
|
|
/* an empty throw specification is different from none */
|
|
fun_decl_empty_throws(unique int fun_decl: @fun_decl ref);
|
|
fun_decl_noexcept(int fun_decl: @fun_decl ref,
|
|
int constant: @expr ref);
|
|
fun_decl_empty_noexcept(int fun_decl: @fun_decl ref);
|
|
fun_decl_typedef_type(unique int fun_decl: @fun_decl ref,
|
|
int typedeftype_id: @usertype ref);
|
|
|
|
param_decl_bind(unique int id: @var_decl ref,
|
|
int index: int ref,
|
|
int fun_decl: @fun_decl ref);
|
|
|
|
var_decls(unique int id: @var_decl,
|
|
int variable: @variable ref,
|
|
int type_id: @type ref,
|
|
varchar(900) name: string ref,
|
|
int location: @location_default ref);
|
|
var_def(unique int id: @var_decl ref);
|
|
var_decl_specifiers(int id: @var_decl ref,
|
|
varchar(900) name: string ref)
|
|
|
|
type_decls(unique int id: @type_decl,
|
|
int type_id: @type ref,
|
|
int location: @location_default ref);
|
|
type_def(unique int id: @type_decl ref);
|
|
type_decl_specifiers(int id: @type_decl ref,
|
|
varchar(900) name: string ref)
|
|
|
|
namespace_decls(unique int id: @namespace_decl,
|
|
int namespace_id: @namespace ref,
|
|
int location: @location_default ref,
|
|
int bodylocation: @location_default ref);
|
|
|
|
usings(unique int id: @using,
|
|
int element_id: @element ref,
|
|
int container: @element ref,
|
|
int location: @location_default ref);
|
|
|
|
// each function has an ordered list of parameters
|
|
params(unique int id: @parameter,
|
|
int function: @functionorblock ref,
|
|
int index: int ref,
|
|
int type_id: @type ref);
|
|
|
|
overrides(int new: @function ref, int old: @function ref);
|
|
|
|
membervariables(unique int id: @membervariable,
|
|
int type_id: @type ref,
|
|
varchar(900) name: string ref);
|
|
|
|
properties(unique int id: @property,
|
|
int type_id: @type ref,
|
|
varchar(900) name: string ref,
|
|
int getter: @function ref);
|
|
|
|
property_setter(int prop: @property ref, int setter: @function ref);
|
|
property_synthesis(int prop: @property ref, int ivar: @membervariable ref);
|
|
property_attribute(int prop: @property ref, int attr: @attribute ref);
|
|
property_decl_location(int prop: @property ref, int loc: @location_default ref);
|
|
|
|
globalvariables(unique int id: @globalvariable,
|
|
int type_id: @type ref,
|
|
varchar(900) name: string ref);
|
|
|
|
localvariables(unique int id: @localvariable,
|
|
int type_id: @type ref,
|
|
varchar(900) name: string ref);
|
|
|
|
autoderivation(unique int var: @variable ref,
|
|
int derivation_type: @type ref);
|
|
|
|
enumconstants(unique int id: @enumconstant,
|
|
int parent: @usertype ref,
|
|
int index: int ref,
|
|
int type_id: @type ref,
|
|
varchar(900) name: string ref,
|
|
int location: @location_default ref);
|
|
|
|
@variable = @localvariable | @globalvariable | @membervariable | @parameter;
|
|
|
|
|
|
/*
|
|
Built-in types are the fundamental types, i.e., integral, floating, and void.
|
|
kind(1) = error, kind(2) = unknown, kind(3) = void, kind(4) = boolean,
|
|
kind(5) = char, kind(6) = unsigned char, kind(7) = signed char
|
|
kind(8) = short, kind(9) = unsigned short, kind(10) = signed short
|
|
kind(11) = int, kind(12) = unsigned int, kind(13) = signed int,
|
|
kind(14) = long, kind(15) = unsigned long, kind(16) = signed long,
|
|
kind(17) = long long, kind(18) = unsigned long long, kind(19) = signed long long,
|
|
kind(20) = __int8, kind(21) = __int16, kind(22) = __int32, kind(23) = __int64, // Microsoft specific
|
|
kind(24) = float, kind(25) = double, kind(26) = long double,
|
|
kind(27) = _Complex float, kind(28) = _Complex double, kind(29) = _Complex long double, //C99 specific
|
|
kind(30) = _Imaginary float, kind(31) = _Imaginary double, kind(32) = _Imaginary long double, //C99 specific
|
|
kind(33) = wchar_t, // MS specific
|
|
kind(34) = decltype(nullptr), // C++11
|
|
*/
|
|
builtintypes(unique int id: @builtintype,
|
|
varchar(900) name: string ref,
|
|
int kind: int ref,
|
|
int size: int ref,
|
|
int sign: int ref);
|
|
|
|
pointersize(unique int size: int ref);
|
|
|
|
/*
|
|
Derived types are types that are directly derived from existing types and
|
|
point to, refer to, transform type data to return a new type.
|
|
|
|
case @derivedtype.kind of
|
|
1 = pointer
|
|
| 2 = reference
|
|
| 3 = type_with_specifiers
|
|
| 4 = array
|
|
| 5 = gnu_vector
|
|
| 6 = routineptr
|
|
| 7 = routinereference
|
|
| 8 = rvalue_reference // C++11
|
|
| 9 = type_conforming_to_protocols // ObjC
|
|
| 10 = block
|
|
;
|
|
*/
|
|
derivedtypes(unique int id: @derivedtype,
|
|
varchar(900) name: string ref,
|
|
int kind: int ref,
|
|
int type_id: @type ref);
|
|
|
|
arraysizes(unique int id: @derivedtype ref,
|
|
int num_elements: int ref,
|
|
int bytesize: int ref,
|
|
int alignment: int ref);
|
|
|
|
typedefbase(unique int id: @usertype ref,
|
|
int type_id: @type ref);
|
|
|
|
decltypes(unique int id: @decltype,
|
|
int expr: @expr ref,
|
|
int base_type: @type ref,
|
|
boolean parentheses_would_change_meaning: boolean ref);
|
|
|
|
/*
|
|
case @usertype.kind of
|
|
1 = struct
|
|
| 2 = class
|
|
| 3 = union
|
|
| 4 = enum
|
|
| 5 = typedef
|
|
| 6 = template
|
|
| 7 = template_parameter
|
|
| 8 = template_template_parameter
|
|
| 9 = proxy_class // a proxy class associated with a template parameter
|
|
| 10 = objc_class
|
|
| 11 = objc_protocol
|
|
| 12 = objc_category
|
|
;
|
|
*/
|
|
usertypes(unique int id: @usertype,
|
|
varchar(900) name: string ref,
|
|
int kind: int ref);
|
|
|
|
usertypesize(unique int id: @usertype ref,
|
|
int size: int ref,
|
|
int alignment: int ref);
|
|
|
|
usertype_final(unique int id: @usertype ref);
|
|
|
|
is_class_template(unique int id: @usertype ref);
|
|
class_instantiation(unique int to: @usertype ref,
|
|
int from: @usertype ref);
|
|
class_template_argument(int type_id: @usertype ref,
|
|
int index: int ref,
|
|
int arg_type: @type ref);
|
|
|
|
is_proxy_class_for(unique int id: @usertype ref,
|
|
unique int templ_param_id: @usertype ref);
|
|
|
|
is_function_template(unique int id: @function ref);
|
|
function_instantiation(unique int to: @function ref,
|
|
int from: @function ref);
|
|
function_template_argument(int function_id: @function ref,
|
|
int index: int ref,
|
|
int arg_type: @type ref);
|
|
|
|
/*
|
|
Fixed point types
|
|
precision(1) = short, precision(2) = default, precision(3) = long
|
|
is_unsigned(1) = unsigned is_unsigned(2) = signed
|
|
is_fract_type(1) = declared with _Fract
|
|
saturating(1) = declared with _Sat
|
|
*/
|
|
/* TODO
|
|
fixedpointtypes(unique int id: @fixedpointtype,
|
|
int precision: int ref,
|
|
int is_unsigned: int ref,
|
|
int is_fract_type: int ref,
|
|
int saturating: int ref);
|
|
*/
|
|
|
|
routinetypes(unique int id: @routinetype,
|
|
int return_type: @type ref);
|
|
|
|
routinetypeargs(int routine: @routinetype ref,
|
|
int index: int ref,
|
|
int type_id: @type ref);
|
|
|
|
ptrtomembers(unique int id: @ptrtomember,
|
|
int type_id: @type ref,
|
|
int class_id: @type ref);
|
|
|
|
/*
|
|
specifiers for types, functions, and variables
|
|
|
|
"public",
|
|
"protected",
|
|
"private",
|
|
|
|
"const",
|
|
"volatile",
|
|
"static",
|
|
|
|
"pure",
|
|
"virtual",
|
|
"sealed", // Microsoft
|
|
"__interface", // Microsoft
|
|
"inline",
|
|
"explicit",
|
|
|
|
"near", // near far extension
|
|
"far", // near far extension
|
|
"__ptr32", // Microsoft
|
|
"__ptr64", // Microsoft
|
|
"__sptr", // Microsoft
|
|
"__uptr", // Microsoft
|
|
"dllimport", // Microsoft
|
|
"dllexport", // Microsoft
|
|
"thread", // Microsoft
|
|
"naked", // Microsoft
|
|
"microsoft_inline", // Microsoft
|
|
"forceinline", // Microsoft
|
|
"selectany", // Microsoft
|
|
"nothrow", // Microsoft
|
|
"novtable", // Microsoft
|
|
"noreturn", // Microsoft
|
|
"noinline", // Microsoft
|
|
"noalias", // Microsoft
|
|
"restrict", // Microsoft
|
|
*/
|
|
|
|
/* REMOVE
|
|
typerefs(unique int id: @typeref,
|
|
int type_id: @type ref);
|
|
*/
|
|
|
|
specifiers(unique int id: @specifier,
|
|
unique varchar(900) str: string ref);
|
|
|
|
typespecifiers(int type_id: @type ref,
|
|
int spec_id: @specifier ref);
|
|
|
|
/* REMOVE
|
|
typerefspecs(int type_ref_id: @typeref ref,
|
|
int spec_id: @specifier ref);
|
|
*/
|
|
|
|
funspecifiers(int func_id: @function ref,
|
|
int spec_id: @specifier ref);
|
|
|
|
varspecifiers(int var_id: @accessible ref,
|
|
int spec_id: @specifier ref);
|
|
|
|
@specifiable = /* REMOVE @typeref |*/ @type | @function | @variable | @enumconstant | @frienddecl;
|
|
|
|
attributes(unique int id: @attribute,
|
|
int kind: int ref,
|
|
varchar(100) name: string ref,
|
|
varchar(100) name_space: string ref,
|
|
int location: @location_default ref);
|
|
|
|
case @attribute.kind of
|
|
0 = @gnuattribute
|
|
| 1 = @stdattribute
|
|
| 2 = @declspec
|
|
| 3 = @msattribute
|
|
| 4 = @alignas
|
|
| 5 = @objc_propertyattribute
|
|
;
|
|
|
|
attribute_args(unique int id: @attribute_arg,
|
|
int kind: int ref,
|
|
int attribute: @attribute ref,
|
|
int index: int ref,
|
|
int location: @location_default ref);
|
|
|
|
case @attribute_arg.kind of
|
|
0 = @attribute_arg_empty
|
|
| 1 = @attribute_arg_token
|
|
| 2 = @attribute_arg_constant
|
|
| 3 = @attribute_arg_type
|
|
;
|
|
|
|
attribute_arg_value(unique int arg: @attribute_arg ref, varchar(100) value: string ref);
|
|
attribute_arg_type(unique int arg: @attribute_arg ref, int type_id: @type ref);
|
|
attribute_arg_name(unique int arg: @attribute_arg ref, varchar(100) name: string ref);
|
|
|
|
typeattributes(int type_id: @type ref,
|
|
int spec_id: @attribute ref);
|
|
|
|
funcattributes(int func_id: @function ref,
|
|
int spec_id: @attribute ref);
|
|
|
|
varattributes(int var_id: @accessible ref,
|
|
int spec_id: @attribute ref);
|
|
|
|
stmtattributes(int stmt_id: @stmt ref,
|
|
int spec_id: @attribute ref);
|
|
|
|
@type = @builtintype | @derivedtype | @usertype /* TODO | @fixedpointtype */ | @routinetype | @ptrtomember | @decltype;
|
|
|
|
member(int parent: @type ref,
|
|
int index: int ref,
|
|
int child: @member ref);
|
|
|
|
enclosingfunction(unique int child: @usertype ref,
|
|
int parent: @function ref);
|
|
|
|
derivations(unique int derivation: @derivation,
|
|
int sub: @type ref,
|
|
int index: int ref,
|
|
int super: @type ref,
|
|
int location: @location_default ref);
|
|
|
|
derspecifiers(int der_id: @derivation ref,
|
|
int spec_id: @specifier ref);
|
|
|
|
frienddecls(unique int id: @frienddecl,
|
|
int type_id: @type ref,
|
|
int decl_id: @declaration ref,
|
|
int location: @location_default ref);
|
|
|
|
conforming_to_protocols(int type_id: @type ref,
|
|
int protocol: @usertype ref);
|
|
|
|
@declaredtype = @usertype ;
|
|
|
|
@declaration = @function | @declaredtype | @variable | @enumconstant | @frienddecl | @property;
|
|
|
|
@member = @membervariable | @function | @declaredtype | @enumconstant | @property;
|
|
|
|
@locatable = @diagnostic | @declaration | @ppd_include | @ppd_define | @macroinvocation /*| @funcall*/ | @xmllocatable | @attribute | @attribute_arg;
|
|
|
|
@scope = @stmt | @function | @namedscope;
|
|
@namedscope = @namespace | @usertype;
|
|
|
|
@element = @locatable | @file | @folder | @specifier | @type | @expr /* | @typeref */ | @namespace | @initialiser | @stmt | @derivation | @comment | @preprocdirect | @fun_decl | @var_decl | @type_decl | @namespace_decl | @using | @namequalifier | @specialnamequalifyingelement | @externalDefect | @externalMetric;
|
|
|
|
@exprparent = @element;
|
|
|
|
comments(unique int id: @comment,
|
|
varchar(900) contents: string ref,
|
|
int location: @location_default ref);
|
|
|
|
commentbinding(unique int id: @comment ref,
|
|
int element: @element ref);
|
|
|
|
exprconv(int converted: @expr ref,
|
|
unique int conversion: @expr ref);
|
|
|
|
compgenerated(unique int id: @element ref);
|
|
|
|
|
|
namespaces(unique int id: @namespace,
|
|
varchar(900) name: string ref);
|
|
|
|
namespacembrs(int parentid: @namespace ref,
|
|
unique int memberid: @namespacembr ref);
|
|
|
|
@namespacembr = @declaration | @namespace;
|
|
|
|
exprparents(int expr_id: @expr ref,
|
|
int child_index: int ref,
|
|
int parent_id: @exprparent ref);
|
|
|
|
/*
|
|
case @funbindexpr.kind of
|
|
0 = @normal_call // a normal call
|
|
| 1 = @virtual_call // a virtual call
|
|
| 2 = @adl_call // a call whose target is only found by ADL
|
|
;
|
|
*/
|
|
iscall(unique int caller: @funbindexpr ref, int kind: int ref);
|
|
|
|
numtemplatearguments(unique int expr_id: @expr ref,
|
|
int num: int ref);
|
|
|
|
specialnamequalifyingelements(unique int id: @specialnamequalifyingelement,
|
|
unique varchar(900) name: string ref);
|
|
|
|
@namequalifiableelement = @expr | @namequalifier;
|
|
@namequalifyingelement = @namespace | @specialnamequalifyingelement | @usertype;
|
|
|
|
namequalifiers(unique int id: @namequalifier,
|
|
unique int qualifiableelement: @namequalifiableelement ref,
|
|
int qualifyingelement: @namequalifyingelement ref,
|
|
int location: @location_default ref);
|
|
|
|
varbind(unique int expr: @varbindexpr ref,
|
|
int var: @accessible ref);
|
|
|
|
funbind(unique int expr: @funbindexpr ref,
|
|
int fun: @function ref);
|
|
|
|
// the second field is a string representation of the value
|
|
// the third field is the actual text in the source or the same as the second field
|
|
values(unique int id: @value,
|
|
varchar(900) str: string ref,
|
|
varchar(900) text: string ref);
|
|
|
|
valuebind(int val: @value ref,
|
|
unique int expr: @expr ref);
|
|
|
|
objc_string(int lit: @literal ref);
|
|
|
|
fieldoffsets(unique int id: @variable ref,
|
|
int byteoffset: int ref,
|
|
int bitoffset: int ref);
|
|
|
|
bitfield(unique int id: @variable ref,
|
|
int bits: int ref,
|
|
int declared_bits: int ref);
|
|
|
|
/* REMOVE
|
|
varrefbind(int var: @variable ref,
|
|
int expr: @varref ref);
|
|
*/
|
|
|
|
/* REMOVE
|
|
funrefbind(int fun: @function ref,
|
|
int expr: @funref ref);
|
|
*/
|
|
|
|
/* TODO
|
|
memberprefix(int member: @expr ref,
|
|
int prefix: @expr ref);
|
|
*/
|
|
|
|
/*
|
|
kind(1) = mbrcallexpr
|
|
kind(2) = mbrptrcallexpr
|
|
kind(3) = mbrptrmbrcallexpr
|
|
kind(4) = ptrmbrptrmbrcallexpr
|
|
kind(5) = mbrreadexpr // x.y
|
|
kind(6) = mbrptrreadexpr // p->y
|
|
kind(7) = mbrptrmbrreadexpr // x.*pm
|
|
kind(8) = mbrptrmbrptrreadexpr // x->*pm
|
|
kind(9) = staticmbrreadexpr // static x.y
|
|
kind(10) = staticmbrptrreadexpr // static p->y
|
|
*/
|
|
/* TODO
|
|
memberaccess(int member: @expr ref,
|
|
int kind: int ref);
|
|
*/
|
|
|
|
initialisers(unique int init: @initialiser,
|
|
int var: @accessible ref,
|
|
unique int expr: @expr ref,
|
|
int location: @location_expr ref);
|
|
|
|
exprcontainers(int exp: @expr ref,
|
|
int container: @exprcontainer ref);
|
|
|
|
@exprcontainer = @function | @variable | @enumconstant | @usertype;
|
|
|
|
exprs(unique int id: @expr,
|
|
int kind: int ref,
|
|
int typeid: @type ref,
|
|
int location: @location_expr ref);
|
|
|
|
case @expr.kind of
|
|
1 = @errorexpr
|
|
| 2 = @address_of // & AddressOfExpr
|
|
| 3 = @reference_to // ReferenceToExpr (implicit?)
|
|
| 4 = @indirect // * PointerDereferenceExpr
|
|
| 5 = @ref_indirect // ReferenceDereferenceExpr (implicit?)
|
|
// ...
|
|
| 8 = @array_to_pointer // (???)
|
|
| 9 = @vacuous_destructor_call // VacuousDestructorCall
|
|
// ...
|
|
| 11 = @assume // Microsoft
|
|
| 12 = @parexpr
|
|
| 13 = @arithnegexpr
|
|
| 14 = @unaryplusexpr
|
|
| 15 = @complementexpr
|
|
| 16 = @notexpr
|
|
| 17 = @conjugation // GNU ~ operator
|
|
| 18 = @realpartexpr // GNU __real
|
|
| 19 = @imagpartexpr // GNU __imag
|
|
| 20 = @postincrexpr
|
|
| 21 = @postdecrexpr
|
|
| 22 = @preincrexpr
|
|
| 23 = @predecrexpr
|
|
| 24 = @conditionalexpr
|
|
| 25 = @addexpr
|
|
| 26 = @subexpr
|
|
| 27 = @mulexpr
|
|
| 28 = @divexpr
|
|
| 29 = @remexpr
|
|
| 30 = @jmulexpr // C99 mul imaginary
|
|
| 31 = @jdivexpr // C99 div imaginary
|
|
| 32 = @fjaddexpr // C99 add real + imaginary
|
|
| 33 = @jfaddexpr // C99 add imaginary + real
|
|
| 34 = @fjsubexpr // C99 sub real - imaginary
|
|
| 35 = @jfsubexpr // C99 sub imaginary - real
|
|
| 36 = @paddexpr // pointer add (pointer + int or int + pointer)
|
|
| 37 = @psubexpr // pointer sub (pointer - integer)
|
|
| 38 = @pdiffexpr // difference between two pointers
|
|
| 39 = @lshiftexpr
|
|
| 40 = @rshiftexpr
|
|
| 41 = @andexpr
|
|
| 42 = @orexpr
|
|
| 43 = @xorexpr
|
|
| 44 = @eqexpr
|
|
| 45 = @neexpr
|
|
| 46 = @gtexpr
|
|
| 47 = @ltexpr
|
|
| 48 = @geexpr
|
|
| 49 = @leexpr
|
|
| 50 = @minexpr // GNU minimum
|
|
| 51 = @maxexpr // GNU maximum
|
|
| 52 = @assignexpr
|
|
| 53 = @assignaddexpr
|
|
| 54 = @assignsubexpr
|
|
| 55 = @assignmulexpr
|
|
| 56 = @assigndivexpr
|
|
| 57 = @assignremexpr
|
|
| 58 = @assignlshiftexpr
|
|
| 59 = @assignrshiftexpr
|
|
| 60 = @assignandexpr
|
|
| 61 = @assignorexpr
|
|
| 62 = @assignxorexpr
|
|
| 63 = @assignpaddexpr // assign pointer add
|
|
| 64 = @assignpsubexpr // assign pointer sub
|
|
| 65 = @andlogicalexpr
|
|
| 66 = @orlogicalexpr
|
|
| 67 = @commaexpr
|
|
| 68 = @subscriptexpr // access to member of an array, e.g., a[5]
|
|
| 69 = @objc_subscriptexpr // ObjC custom subscripting
|
|
// ...
|
|
| 73 = @virtfunptrexpr
|
|
| 74 = @callexpr
|
|
| 75 = @msgexpr_normal // Objective C
|
|
| 76 = @msgexpr_super // Objective C
|
|
| 77 = @atselectorexpr // Objective C
|
|
| 78 = @atprotocolexpr // Objective C
|
|
| 79 = @vastartexpr
|
|
| 80 = @vaargexpr
|
|
| 81 = @vaendexpr
|
|
| 82 = @vacopyexpr
|
|
| 83 = @atencodeexpr // Objective C
|
|
| 84 = @varaccess
|
|
| 85 = @thisaccess
|
|
| 86 = @objc_box_expr // Objective C
|
|
| 87 = @new_expr
|
|
| 88 = @delete_expr
|
|
| 89 = @throw_expr
|
|
| 90 = @condition_decl // a variable declared in a condition, e.g., if(int x = y > 2)
|
|
// ...
|
|
| 92 = @type_id
|
|
| 93 = @runtime_sizeof
|
|
| 94 = @runtime_alignof
|
|
// ...
|
|
| 96 = @expr_stmt // GNU extension
|
|
| 97 = @routineexpr
|
|
| 98 = @type_operand // used to access a type in certain contexts (haven't found any examples yet....)
|
|
| 99 = @offsetofexpr // offsetof ::= type and field
|
|
| 100 = @hasassignexpr // __has_assign ::= type
|
|
| 101 = @hascopyexpr // __has_copy ::= type
|
|
| 102 = @hasnothrowassign // __has_nothrow_assign ::= type
|
|
| 103 = @hasnothrowconstr // __has_nothrow_constructor ::= type
|
|
| 104 = @hasnothrowcopy // __has_nothrow_copy ::= type
|
|
| 105 = @hastrivialassign // __has_trivial_assign ::= type
|
|
| 106 = @hastrivialconstr // __has_trivial_constructor ::= type
|
|
| 107 = @hastrivialcopy // __has_trivial_copy ::= type
|
|
| 108 = @hasuserdestr // __has_user_destructor ::= type
|
|
| 109 = @hasvirtualdestr // __has_virtual_desctructor ::= type
|
|
| 110 = @isabstractexpr // __is_abstract ::= type
|
|
| 111 = @isbaseofexpr // __is_base_of ::= type type
|
|
| 112 = @isclassexpr // __is_class ::= type
|
|
| 113 = @isconvtoexpr // __is_convertible_to ::= type type
|
|
| 114 = @isemptyexpr // __is_empty ::= type
|
|
| 115 = @isenumexpr // __is_enum ::= type
|
|
| 116 = @ispodexpr // __is_pod ::= type
|
|
| 117 = @ispolyexpr // __is_polymorphic ::= type
|
|
| 118 = @isunionexpr // __is_union ::= type
|
|
| 119 = @typescompexpr // GNU __builtin_types_compatible ::= type type
|
|
| 120 = @intaddrexpr // EDG internal builtin, used to implement offsetof
|
|
// ...
|
|
| 122 = @hastrivialdestructor // __has_trivial_destructor ::= type
|
|
| 123 = @literal
|
|
| 127 = @aggregateliteral
|
|
| 128 = @delete_array_expr
|
|
| 129 = @new_array_expr
|
|
| 130 = @objc_array_literal
|
|
| 131 = @objc_dictionary_literal
|
|
// ...
|
|
| 200 = @ctordirectinit
|
|
| 201 = @ctorvirtualinit
|
|
| 202 = @ctorfieldinit
|
|
| 203 = @ctordelegatinginit
|
|
| 204 = @dtordirectdestruct
|
|
| 205 = @dtorvirtualdestruct
|
|
| 206 = @dtorfielddestruct
|
|
// ...
|
|
| 210 = @static_cast
|
|
| 211 = @reinterpret_cast
|
|
| 212 = @const_cast
|
|
| 213 = @dynamic_cast
|
|
| 214 = @c_style_cast
|
|
| 215 = @lambdaexpr
|
|
| 216 = @param_ref
|
|
| 217 = @noopexpr
|
|
// ...
|
|
| 294 = @istriviallyconstructibleexpr
|
|
| 295 = @isdestructibleexpr
|
|
| 296 = @isnothrowdestructibleexpr
|
|
| 297 = @istriviallydestructibleexpr
|
|
| 298 = @istriviallyassignableexpr
|
|
| 299 = @isnothrowassignableexpr
|
|
| 300 = @istrivialexpr
|
|
| 301 = @isstandardlayoutexpr
|
|
| 302 = @istriviallycopyableexpr
|
|
| 303 = @isliteraltypeexpr
|
|
| 304 = @hastrivialmoveconstructorexpr
|
|
| 305 = @hastrivialmoveassignexpr
|
|
| 306 = @hasnothrowmoveassignexpr
|
|
| 307 = @isconstructibleexpr
|
|
| 308 = @isnothrowconstructibleexpr
|
|
| 309 = @hasfinalizerexpr
|
|
| 310 = @isdelegateexpr
|
|
| 311 = @isinterfaceclassexpr
|
|
| 312 = @isrefarrayexpr
|
|
| 313 = @isrefclassexpr
|
|
| 314 = @issealedexpr
|
|
| 315 = @issimplevalueclassexpr
|
|
| 316 = @isvalueclassexpr
|
|
| 317 = @isfinalexpr
|
|
| 319 = @noexceptexpr
|
|
;
|
|
|
|
@ctorinit = @ctordirectinit | @ctorvirtualinit | @ctorfieldinit | @ctordelegatinginit;
|
|
@dtordestruct = @dtordirectdestruct | @dtorvirtualdestruct | @dtorfielddestruct;
|
|
|
|
@msgexpr = @msgexpr_normal | @msgexpr_super;
|
|
msgexpr_selector(unique int expr: @msgexpr ref, varchar(64) selector : string ref);
|
|
msgexpr_receiver_type(unique int expr: @msgexpr_normal ref, int receiver : @type ref);
|
|
msgexpr_for_property(unique int expr: @msgexpr_normal ref);
|
|
|
|
atselectorexpr_selector(unique int expr: @atselectorexpr ref, varchar(64) selector : string ref);
|
|
|
|
atprotocolexpr_protocol(unique int expr: @atprotocolexpr ref, int protocol : @usertype ref);
|
|
|
|
atencodeexpr_type(unique int expr: @atencodeexpr ref, int the_type : @type ref);
|
|
|
|
condition_decl_bind(unique int expr: @condition_decl ref,
|
|
unique int decl: @declaration ref);
|
|
|
|
typeid_bind(unique int expr: @type_id ref,
|
|
int type_id: @type ref);
|
|
|
|
@runtime_sizeof_or_alignof = @runtime_sizeof | @runtime_alignof;
|
|
|
|
sizeof_bind(unique int expr: @runtime_sizeof_or_alignof ref,
|
|
int type_id: @type ref);
|
|
|
|
code_block(unique int block: @literal ref,
|
|
unique int routine: @function ref);
|
|
|
|
lambdas(unique int expr: @lambdaexpr ref,
|
|
varchar(1) default_capture: string ref,
|
|
boolean has_explicit_return_type: boolean ref);
|
|
|
|
lambda_capture(unique int id: @lambdacapture,
|
|
int lambda: @lambdaexpr ref,
|
|
int index: int ref,
|
|
boolean captured_by_reference: boolean ref,
|
|
boolean is_implicit: boolean ref,
|
|
int location: @location_default ref);
|
|
|
|
@funbindexpr = @routineexpr | @new_expr | @delete_expr | @delete_array_expr | @ctordirectinit | @ctorvirtualinit | @ctordelegatinginit | @dtordirectdestruct | @dtorvirtualdestruct | @msgexpr;
|
|
|
|
@varbindexpr = @varaccess | @ctorfieldinit | @dtorfielddestruct;
|
|
@addressable = @function | @variable ;
|
|
@accessible = @addressable | @enumconstant ;
|
|
@callable = @function | @variable; // only for variables with routine types
|
|
|
|
|
|
stmts(unique int id: @stmt,
|
|
int kind: int ref,
|
|
int location: @location_stmt ref);
|
|
|
|
case @stmt.kind of
|
|
1 = @stmt_expr
|
|
| 2 = @stmt_if
|
|
| 3 = @stmt_while
|
|
| 4 = @stmt_goto
|
|
| 5 = @stmt_label
|
|
| 6 = @stmt_return
|
|
| 7 = @stmt_block
|
|
| 8 = @stmt_end_test_while // do { ... } while ( ... )
|
|
| 9 = @stmt_for
|
|
| 10 = @stmt_switch_case
|
|
| 11 = @stmt_switch
|
|
| 13 = @stmt_asm // "asm" statement or the body of an asm function
|
|
| 15 = @stmt_try_block
|
|
| 16 = @stmt_microsoft_try // Microsoft
|
|
| 17 = @stmt_decl
|
|
| 18 = @stmt_set_vla_size // C99
|
|
| 19 = @stmt_vla_decl // C99
|
|
| 25 = @stmt_assigned_goto // GNU
|
|
| 26 = @stmt_empty
|
|
| 27 = @stmt_continue
|
|
| 28 = @stmt_break
|
|
| 29 = @stmt_range_based_for // C++11
|
|
| 30 = @stmt_at_autoreleasepool_block // Objective C
|
|
| 31 = @stmt_objc_for_in // Objective C
|
|
| 32 = @stmt_at_synchronized // Objective C
|
|
;
|
|
|
|
objc_for_in(unique int loop: @stmt_objc_for_in ref,
|
|
int collection: @expr ref,
|
|
int condition: @expr ref,
|
|
int body: @stmt ref);
|
|
|
|
@stmtparent = @stmt | @expr_stmt ;
|
|
stmtparents(unique int id: @stmt ref,
|
|
int index: int ref,
|
|
int parent: @stmtparent ref);
|
|
|
|
ishandler(unique int block: @stmt_block ref);
|
|
isfinally(unique int block: @stmt_block ref);
|
|
|
|
is_objc_try_stmt(unique int try: @stmt ref);
|
|
is_objc_throw(unique int throw: @throw_expr ref);
|
|
|
|
@cfgnode = @stmt | @expr | @function | @initialiser ;
|
|
successors(int from: @cfgnode ref,
|
|
int to: @cfgnode ref);
|
|
|
|
truecond(unique int from: @cfgnode ref,
|
|
int to: @cfgnode ref);
|
|
|
|
falsecond(unique int from: @cfgnode ref,
|
|
int to: @cfgnode ref);
|
|
|
|
stmtfunction(unique int stmt: @stmt ref,
|
|
int fun: @function ref);
|
|
|
|
stmt_decl_bind(int stmt: @stmt_decl ref,
|
|
int decl: @declaration ref);
|
|
|
|
@functionorblock = @function | @stmt_block;
|
|
|
|
blockscope(int block: @stmt_block ref,
|
|
int enclosing: @functionorblock ref);
|
|
|
|
@jump = @stmt_goto | @stmt_break | @stmt_continue;
|
|
|
|
@jumporlabel = @jump | @stmt_label | @literal;
|
|
|
|
jumpinfo(unique int id: @jumporlabel ref,
|
|
varchar(900) str: string ref,
|
|
int target: @stmt ref);
|
|
|
|
preprocdirects(unique int id: @preprocdirect,
|
|
int kind: int ref,
|
|
int location: @location_default ref);
|
|
case @preprocdirect.kind of
|
|
0 = @ppd_if
|
|
| 1 = @ppd_ifdef
|
|
| 2 = @ppd_ifndef
|
|
| 3 = @ppd_elif
|
|
| 4 = @ppd_else
|
|
| 5 = @ppd_endif
|
|
| 6 = @ppd_plain_include
|
|
| 7 = @ppd_define
|
|
| 8 = @ppd_undef
|
|
| 9 = @ppd_line
|
|
| 10 = @ppd_error
|
|
| 11 = @ppd_pragma
|
|
| 12 = @ppd_objc_import
|
|
| 13 = @ppd_include_next
|
|
| 18 = @ppd_warning
|
|
;
|
|
|
|
@ppd_include = @ppd_plain_include | @ppd_objc_import | @ppd_include_next;
|
|
|
|
@ppd_branch = @ppd_if | @ppd_ifdef | @ppd_ifndef | @ppd_elif;
|
|
|
|
preprocpair(int begin : @ppd_branch ref,
|
|
int end : @ppd_endif ref);
|
|
|
|
preproctrue(int branch : @ppd_branch ref);
|
|
preprocfalse(int branch : @ppd_branch ref);
|
|
|
|
preproctext(unique int id: @preprocdirect ref,
|
|
varchar(900) head: string ref,
|
|
varchar(900) body: string ref);
|
|
|
|
includes(unique int id: @ppd_include ref,
|
|
int included: @file ref);
|
|
|
|
/* Definitions and uses */
|
|
|
|
#computed
|
|
definitionUsePair(
|
|
int var : @variable ref,
|
|
int def : @cfgnode ref,
|
|
int use : @expr ref);
|
|
|
|
#computed
|
|
definitionReaches(
|
|
int def : @cfgnode ref,
|
|
int node : @cfgnode ref);
|
|
|
|
#computed
|
|
useUsePair(
|
|
int v : @variable ref,
|
|
int first : @expr ref,
|
|
int second : @expr ref);
|
|
|
|
#computed
|
|
directUseUsePair(
|
|
int v : @variable ref,
|
|
int first : @expr ref,
|
|
int second : @expr ref);
|
|
|
|
/* Nullness information */
|
|
|
|
#computed
|
|
nullCheckExpr(
|
|
int e : @expr ref,
|
|
int var : @variable ref);
|
|
|
|
#computed
|
|
validCheckExpr(
|
|
int e : @expr ref,
|
|
int var : @variable ref);
|
|
|
|
#computed
|
|
checkedNull(
|
|
int var : @variable ref,
|
|
int node : @cfgnode ref);
|
|
|
|
#computed
|
|
checkedValid(
|
|
int var : @variable ref,
|
|
int node : @cfgnode ref);
|
|
|
|
/* compilation dependencies taking #include directives into account */
|
|
|
|
#computed
|
|
fileDepends(
|
|
int src : @file ref,
|
|
int tgt : @file ref);
|
|
|
|
/* XML Files */
|
|
|
|
xmlEncoding (unique int id: @file ref, varchar(900) encoding: string ref);
|
|
|
|
xmlDTDs (unique int id: @xmldtd,
|
|
varchar(900) root: string ref,
|
|
varchar(900) publicId: string ref,
|
|
varchar(900) systemId: string ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlElements (unique int id: @xmlelement,
|
|
varchar(900) name: string ref,
|
|
int parentid: @xmlparent ref,
|
|
int idx: int ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlAttrs (unique int id: @xmlattribute,
|
|
int elementid: @xmlelement ref,
|
|
varchar(900) name: string ref,
|
|
varchar(3600) value: string ref,
|
|
int idx: int ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlNs (int id: @xmlnamespace,
|
|
varchar(900) prefixName: string ref,
|
|
varchar(900) URI: string ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlHasNs (int elementId: @xmlnamespaceable ref,
|
|
int nsId: @xmlnamespace ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlComments (unique int id: @xmlcomment,
|
|
varchar(3600) text: string ref,
|
|
int parentid: @xmlparent ref,
|
|
int fileid: @file ref);
|
|
|
|
xmlChars (unique int id: @xmlcharacters,
|
|
varchar(3600) text: string ref,
|
|
int parentid: @xmlparent ref,
|
|
int idx: int ref,
|
|
int isCDATA: int ref,
|
|
int fileid: @file ref);
|
|
|
|
@xmlparent = @file | @xmlelement;
|
|
@xmlnamespaceable = @xmlelement | @xmlattribute;
|
|
|
|
xmllocations(int xmlElement: @xmllocatable ref,
|
|
int location: @location_default ref);
|
|
|
|
@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace;
|