/* * 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;