fix: impatient loading order
This commit is contained in:
committed by
Sidhanth Rathod
parent
20f45c3962
commit
aee1c8b830
178
tree-sitter-c/test/corpus/ambiguities.txt
Normal file
178
tree-sitter-c/test/corpus/ambiguities.txt
Normal file
@@ -0,0 +1,178 @@
|
||||
========================================================================
|
||||
pointer declarations vs multiplications
|
||||
========================================================================
|
||||
|
||||
int main() {
|
||||
// declare a function pointer
|
||||
T1 * b(T2 a);
|
||||
|
||||
// evaluate expressions
|
||||
c * d(5);
|
||||
e(f * g);
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit (function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(comment)
|
||||
(declaration
|
||||
(type_identifier)
|
||||
(pointer_declarator (function_declarator
|
||||
(identifier)
|
||||
(parameter_list (parameter_declaration (type_identifier) (identifier))))))
|
||||
(comment)
|
||||
(expression_statement (binary_expression
|
||||
(identifier)
|
||||
(call_expression (identifier) (argument_list (number_literal)))))
|
||||
(expression_statement (call_expression
|
||||
(identifier)
|
||||
(argument_list (binary_expression (identifier) (identifier))))))))
|
||||
|
||||
========================================================================
|
||||
casts vs multiplications
|
||||
========================================================================
|
||||
|
||||
/*
|
||||
* ambiguities
|
||||
*/
|
||||
|
||||
int main() {
|
||||
// cast
|
||||
a((B *)c);
|
||||
|
||||
// parenthesized product
|
||||
d((e * f));
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(comment)
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(comment)
|
||||
(expression_statement (call_expression
|
||||
(identifier)
|
||||
(argument_list (cast_expression (type_descriptor (type_identifier) (abstract_pointer_declarator)) (identifier)))))
|
||||
(comment)
|
||||
(expression_statement (call_expression
|
||||
(identifier)
|
||||
(argument_list (parenthesized_expression (binary_expression (identifier) (identifier)))))))))
|
||||
|
||||
========================================================================
|
||||
function-like type macros vs function calls
|
||||
========================================================================
|
||||
|
||||
// this is a macro
|
||||
GIT_INLINE(int *) x = 5;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(comment)
|
||||
(declaration
|
||||
(macro_type_specifier (identifier) (type_descriptor (primitive_type) (abstract_pointer_declarator)))
|
||||
(init_declarator (identifier) (number_literal))))
|
||||
|
||||
========================================================================
|
||||
function calls vs parenthesized declarators vs macro types
|
||||
========================================================================
|
||||
|
||||
int main() {
|
||||
/*
|
||||
* Could be either:
|
||||
* - function call
|
||||
* - declaration w/ parenthesized declarator
|
||||
* - declaration w/ macro type, no declarator
|
||||
*/
|
||||
ABC(d);
|
||||
|
||||
/*
|
||||
* Normal declaration
|
||||
*/
|
||||
efg hij;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(comment)
|
||||
(expression_statement (call_expression (identifier) (argument_list (identifier))))
|
||||
(comment)
|
||||
(declaration (type_identifier) (identifier)))))
|
||||
|
||||
========================================================================
|
||||
Call expressions vs empty declarations w/ macros as types
|
||||
========================================================================
|
||||
|
||||
int main() {
|
||||
int a = 1;
|
||||
b(a);
|
||||
A(A *);
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(declaration (primitive_type) (init_declarator (identifier) (number_literal)))
|
||||
(expression_statement (call_expression (identifier) (argument_list (identifier))))
|
||||
(macro_type_specifier
|
||||
(identifier)
|
||||
(type_descriptor (type_identifier) (abstract_pointer_declarator))))))
|
||||
|
||||
========================================================================
|
||||
Comments after for loops with ambiguities
|
||||
========================================================================
|
||||
|
||||
int main() {
|
||||
for (a *b = c; d; e) {
|
||||
aff;
|
||||
}
|
||||
|
||||
// a-comment
|
||||
|
||||
g;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit (function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(for_statement
|
||||
(declaration (type_identifier) (init_declarator
|
||||
(pointer_declarator (identifier))
|
||||
(identifier)))
|
||||
(identifier)
|
||||
(identifier)
|
||||
(compound_statement
|
||||
(expression_statement (identifier))))
|
||||
(comment)
|
||||
(expression_statement (identifier)))))
|
||||
|
||||
===============================================
|
||||
Top-level macro invocations
|
||||
===============================================
|
||||
|
||||
DEFINE_SOMETHING(THING_A, "this is a thing a");
|
||||
DEFINE_SOMETHING(THING_B, "this is a thing b", "thanks");
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(expression_statement (call_expression (identifier) (argument_list (identifier) (string_literal))))
|
||||
(expression_statement (call_expression (identifier) (argument_list (identifier) (string_literal) (string_literal)))))
|
||||
13
tree-sitter-c/test/corpus/crlf.txt
Normal file
13
tree-sitter-c/test/corpus/crlf.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
============================================
|
||||
Line comments with escaped CRLF line endings
|
||||
============================================
|
||||
|
||||
// hello \
|
||||
this is still a comment
|
||||
this_is_not a_comment;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(comment)
|
||||
(declaration (type_identifier) (identifier)))
|
||||
530
tree-sitter-c/test/corpus/declarations.txt
Normal file
530
tree-sitter-c/test/corpus/declarations.txt
Normal file
@@ -0,0 +1,530 @@
|
||||
============================================
|
||||
Struct declarations
|
||||
============================================
|
||||
|
||||
struct s1;
|
||||
|
||||
struct s2 {
|
||||
int x;
|
||||
float y : 5;
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(struct_specifier
|
||||
name: (type_identifier))
|
||||
(struct_specifier
|
||||
name: (type_identifier)
|
||||
body: (field_declaration_list
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (field_identifier))
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (field_identifier)
|
||||
(bitfield_clause (number_literal))))))
|
||||
|
||||
============================================
|
||||
Union declarations
|
||||
============================================
|
||||
|
||||
union u1;
|
||||
|
||||
union s2 {
|
||||
int x;
|
||||
float y;
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(union_specifier
|
||||
name: (type_identifier))
|
||||
(union_specifier
|
||||
name: (type_identifier)
|
||||
body: (field_declaration_list
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (field_identifier))
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (field_identifier)))))
|
||||
|
||||
============================================
|
||||
Enum declarations
|
||||
============================================
|
||||
|
||||
enum e1;
|
||||
|
||||
enum e2 {
|
||||
val1,
|
||||
val2 = 5,
|
||||
val3
|
||||
};
|
||||
|
||||
enum e3 {
|
||||
val1,
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(enum_specifier
|
||||
name: (type_identifier))
|
||||
(enum_specifier
|
||||
name: (type_identifier)
|
||||
body: (enumerator_list
|
||||
(enumerator name: (identifier))
|
||||
(enumerator name: (identifier) value: (number_literal))
|
||||
(enumerator name: (identifier))))
|
||||
(enum_specifier
|
||||
name: (type_identifier)
|
||||
body: (enumerator_list
|
||||
(enumerator name: (identifier)))))
|
||||
|
||||
======================================================
|
||||
Struct declarations containing preprocessor directives
|
||||
======================================================
|
||||
|
||||
struct s {
|
||||
#define A 5
|
||||
int b[a];
|
||||
#undef A
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(struct_specifier
|
||||
(type_identifier)
|
||||
(field_declaration_list
|
||||
(preproc_def (identifier) (preproc_arg))
|
||||
(field_declaration (primitive_type) (array_declarator (field_identifier) (identifier)))
|
||||
(preproc_call (preproc_directive) (preproc_arg)))))
|
||||
|
||||
============================================
|
||||
Primitive-typed variable declarations
|
||||
============================================
|
||||
|
||||
unsigned short int a;
|
||||
long int b, c = 5, d;
|
||||
float d, e;
|
||||
unsigned f;
|
||||
short g, h;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
type: (sized_type_specifier type: (primitive_type))
|
||||
declarator: (identifier))
|
||||
(declaration
|
||||
type: (sized_type_specifier type: (primitive_type))
|
||||
declarator: (identifier)
|
||||
declarator: (init_declarator
|
||||
declarator: (identifier)
|
||||
value: (number_literal))
|
||||
declarator: (identifier))
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
declarator: (identifier)
|
||||
declarator: (identifier))
|
||||
(declaration
|
||||
type: (sized_type_specifier)
|
||||
declarator: (identifier))
|
||||
(declaration
|
||||
type: (sized_type_specifier)
|
||||
declarator: (identifier)
|
||||
declarator: (identifier)))
|
||||
|
||||
============================================
|
||||
Variable storage classes
|
||||
============================================
|
||||
|
||||
int a;
|
||||
extern int b, c;
|
||||
auto int d;
|
||||
register int e;
|
||||
static int f;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (storage_class_specifier) (primitive_type) (identifier) (identifier))
|
||||
(declaration (storage_class_specifier) (primitive_type) (identifier))
|
||||
(declaration (storage_class_specifier) (primitive_type) (identifier))
|
||||
(declaration (storage_class_specifier) (primitive_type) (identifier)))
|
||||
|
||||
============================================
|
||||
Composite-typed variable declarations
|
||||
============================================
|
||||
|
||||
struct b c;
|
||||
union { int e; } f;
|
||||
enum { g, h } i;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
type: (struct_specifier name: (type_identifier))
|
||||
declarator: (identifier))
|
||||
(declaration
|
||||
type: (union_specifier
|
||||
body: (field_declaration_list
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (field_identifier))))
|
||||
declarator: (identifier))
|
||||
(declaration
|
||||
type: (enum_specifier body: (enumerator_list
|
||||
(enumerator name: (identifier))
|
||||
(enumerator name: (identifier))))
|
||||
declarator: (identifier)))
|
||||
|
||||
============================================
|
||||
Pointer variable declarations
|
||||
============================================
|
||||
|
||||
char *the_string;
|
||||
const char **the_strings;
|
||||
int const * const restrict x;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
declarator: (identifier)))
|
||||
(declaration
|
||||
(type_qualifier)
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
declarator: (pointer_declarator
|
||||
declarator: (identifier))))
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
(type_qualifier)
|
||||
declarator: (pointer_declarator
|
||||
(type_qualifier)
|
||||
(type_qualifier)
|
||||
declarator: (identifier))))
|
||||
|
||||
============================================
|
||||
Typedefs
|
||||
============================================
|
||||
|
||||
typedef int my_int;
|
||||
|
||||
typedef struct {
|
||||
int x;
|
||||
} *a;
|
||||
|
||||
typedef void my_callback(void *, size_t);
|
||||
|
||||
typedef struct A {
|
||||
int i;
|
||||
} a, b;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(type_definition
|
||||
type: (primitive_type)
|
||||
declarator: (type_identifier))
|
||||
(type_definition
|
||||
type: (struct_specifier
|
||||
body: (field_declaration_list
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (field_identifier))))
|
||||
declarator: (pointer_declarator
|
||||
declarator: (type_identifier)))
|
||||
(type_definition
|
||||
type: (primitive_type)
|
||||
declarator: (function_declarator
|
||||
declarator: (type_identifier)
|
||||
parameters: (parameter_list
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (abstract_pointer_declarator))
|
||||
(parameter_declaration
|
||||
type: (primitive_type)))))
|
||||
(type_definition
|
||||
type: (struct_specifier
|
||||
name: (type_identifier)
|
||||
body: (field_declaration_list
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (field_identifier))))
|
||||
declarator: (type_identifier)
|
||||
declarator: (type_identifier)))
|
||||
|
||||
============================================
|
||||
Function declarations
|
||||
============================================
|
||||
|
||||
int main(int argc, const char **argv);
|
||||
static foo bar();
|
||||
static baz quux(...);
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator
|
||||
(identifier)
|
||||
(parameter_list
|
||||
(parameter_declaration
|
||||
(primitive_type)
|
||||
(identifier))
|
||||
(parameter_declaration
|
||||
(type_qualifier)
|
||||
(primitive_type)
|
||||
(pointer_declarator (pointer_declarator (identifier)))))))
|
||||
|
||||
(declaration
|
||||
(storage_class_specifier)
|
||||
(type_identifier)
|
||||
(function_declarator (identifier) (parameter_list)))
|
||||
|
||||
(declaration
|
||||
(storage_class_specifier)
|
||||
(type_identifier)
|
||||
(function_declarator (identifier) (parameter_list (variadic_parameter)))))
|
||||
|
||||
============================================
|
||||
Function definitions
|
||||
============================================
|
||||
|
||||
void * do_stuff(int arg1) {
|
||||
return 5;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
declarator: (function_declarator
|
||||
declarator: (identifier)
|
||||
parameters: (parameter_list
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (identifier)))))
|
||||
body: (compound_statement
|
||||
(return_statement (number_literal)))))
|
||||
|
||||
============================================
|
||||
Function specifiers after types
|
||||
============================================
|
||||
|
||||
int static inline do_stuff(int arg1) {
|
||||
return 5;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(storage_class_specifier)
|
||||
(storage_class_specifier)
|
||||
(function_declarator
|
||||
(identifier)
|
||||
(parameter_list (parameter_declaration (primitive_type) (identifier))))
|
||||
(compound_statement (return_statement (number_literal)))))
|
||||
|
||||
============================================
|
||||
Linkage specifications
|
||||
============================================
|
||||
|
||||
extern "C" int foo();
|
||||
|
||||
extern "C" int foo() { return 0; }
|
||||
|
||||
extern "C" {
|
||||
int bar();
|
||||
int baz();
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(linkage_specification
|
||||
(string_literal)
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))))
|
||||
(linkage_specification
|
||||
(string_literal)
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement (return_statement (number_literal)))))
|
||||
(linkage_specification
|
||||
(string_literal)
|
||||
(declaration_list
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list)))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))))))
|
||||
|
||||
==========================
|
||||
Type qualifiers
|
||||
==========================
|
||||
|
||||
const _Atomic unsigned long int x = 5;
|
||||
restrict int y = 6;
|
||||
volatile int z = 7;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
(type_qualifier)
|
||||
(type_qualifier)
|
||||
(sized_type_specifier (primitive_type))
|
||||
(init_declarator (identifier) (number_literal)))
|
||||
(declaration
|
||||
(type_qualifier)
|
||||
(primitive_type)
|
||||
(init_declarator (identifier) (number_literal)))
|
||||
(declaration
|
||||
(type_qualifier)
|
||||
(primitive_type)
|
||||
(init_declarator (identifier) (number_literal))))
|
||||
|
||||
================================
|
||||
Local array declarations
|
||||
================================
|
||||
|
||||
int main() {
|
||||
char the_buffer[the_size];
|
||||
char the_other_buffer[*];
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(declaration (primitive_type) (array_declarator (identifier) (identifier)))
|
||||
(declaration (primitive_type) (array_declarator (identifier))))))
|
||||
|
||||
================================
|
||||
Attributes
|
||||
================================
|
||||
|
||||
extern __attribute__((visibility("hidden"))) int foo();
|
||||
extern int bar() __attribute__((const));
|
||||
void die(const char *format, ...) __attribute__((noreturn))
|
||||
__attribute__((format(printf,1,2)));
|
||||
extern __attribute__((visibility("default"), weak)) int print_status();
|
||||
|
||||
int f([[a::b(c), d]] int x) {}
|
||||
|
||||
[[gnu::always_inline]] [[gnu::hot]] [[gnu::const]] [[nodiscard]]
|
||||
int g(void);
|
||||
|
||||
[[gnu::always_inline, gnu::hot, gnu::const, nodiscard]]
|
||||
int g(void);
|
||||
|
||||
int i [[maybe_unused]];
|
||||
void f[[gnu::always_inline]]();
|
||||
|
||||
[[nodiscard("reason")]] int foo;
|
||||
|
||||
[[fallthrough]];
|
||||
|
||||
struct S {
|
||||
int a [[deprecated]];
|
||||
};
|
||||
|
||||
typedef int MyInt [[deprecated]];
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
(storage_class_specifier)
|
||||
(attribute_specifier
|
||||
(argument_list
|
||||
(call_expression
|
||||
(identifier) (argument_list (string_literal)))))
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list)))
|
||||
(declaration
|
||||
(storage_class_specifier)
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list) (attribute_specifier (argument_list (identifier)))))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator (identifier)
|
||||
(parameter_list (parameter_declaration (type_qualifier) (primitive_type) (pointer_declarator (identifier))) (variadic_parameter))
|
||||
(attribute_specifier (argument_list (identifier)))
|
||||
(attribute_specifier
|
||||
(argument_list (call_expression (identifier) (argument_list (identifier) (number_literal) (number_literal)))))))
|
||||
(declaration
|
||||
(storage_class_specifier)
|
||||
(attribute_specifier
|
||||
(argument_list (call_expression (identifier) (argument_list (string_literal))) (identifier)))
|
||||
(primitive_type) (function_declarator (identifier) (parameter_list)))
|
||||
(function_definition (primitive_type)
|
||||
(function_declarator (identifier) (parameter_list (parameter_declaration
|
||||
(attribute_declaration
|
||||
(attribute (identifier) (identifier) (argument_list (identifier)))
|
||||
(attribute (identifier)))
|
||||
(primitive_type) (identifier)))) (compound_statement))
|
||||
(declaration
|
||||
(attribute_declaration (attribute (identifier) (identifier)))
|
||||
(attribute_declaration (attribute (identifier) (identifier)))
|
||||
(attribute_declaration (attribute (identifier) (identifier)))
|
||||
(attribute_declaration (attribute (identifier)))
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list (parameter_declaration (primitive_type)))))
|
||||
(declaration
|
||||
(attribute_declaration
|
||||
(attribute (identifier) (identifier))
|
||||
(attribute (identifier) (identifier))
|
||||
(attribute (identifier) (identifier))
|
||||
(attribute (identifier)))
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list (parameter_declaration (primitive_type)))))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(attributed_declarator
|
||||
(identifier)
|
||||
(attribute_declaration (attribute (identifier)))))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator
|
||||
(attributed_declarator
|
||||
(identifier)
|
||||
(attribute_declaration (attribute (identifier) (identifier))))
|
||||
(parameter_list)))
|
||||
(declaration
|
||||
(attribute_declaration (attribute (identifier) (argument_list (string_literal))))
|
||||
(primitive_type) (identifier))
|
||||
(attributed_statement
|
||||
(attribute_declaration (attribute (identifier)))
|
||||
(expression_statement))
|
||||
(struct_specifier
|
||||
(type_identifier)
|
||||
(field_declaration_list (field_declaration (primitive_type)
|
||||
(attributed_declarator
|
||||
(field_identifier)
|
||||
(attribute_declaration (attribute (identifier)))))))
|
||||
(type_definition (primitive_type)
|
||||
(attributed_declarator
|
||||
(type_identifier)
|
||||
(attribute_declaration (attribute (identifier))))))
|
||||
518
tree-sitter-c/test/corpus/expressions.txt
Normal file
518
tree-sitter-c/test/corpus/expressions.txt
Normal file
@@ -0,0 +1,518 @@
|
||||
============================================
|
||||
Number literals
|
||||
============================================
|
||||
|
||||
double a = {
|
||||
0xAC00,
|
||||
0.123,
|
||||
0b1010001,
|
||||
0xabc00ull,
|
||||
-0.1f,
|
||||
1'000'000.000'001,
|
||||
24e-5,
|
||||
0.1E,
|
||||
58.,
|
||||
4e2,
|
||||
123.456e-67,
|
||||
.1E4f,
|
||||
0x10.1p0,
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(init_declarator
|
||||
(identifier)
|
||||
(initializer_list
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
(number_literal)
|
||||
))))
|
||||
|
||||
============================================
|
||||
Identifiers
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
_abc;
|
||||
d_EG123;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (identifier))
|
||||
(expression_statement (identifier)))))
|
||||
|
||||
============================================
|
||||
Common constants
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
true;
|
||||
false;
|
||||
NULL;
|
||||
|
||||
// regression test - identifiers starting w/ these strings should tokenize correctly.
|
||||
true_value;
|
||||
false_value;
|
||||
NULL_value;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (true))
|
||||
(expression_statement (false))
|
||||
(expression_statement (null))
|
||||
(comment)
|
||||
(expression_statement (identifier))
|
||||
(expression_statement (identifier))
|
||||
(expression_statement (identifier)))))
|
||||
|
||||
============================================
|
||||
Function calls
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
printf("hi! %d\n", x);
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (call_expression
|
||||
(identifier)
|
||||
(argument_list (string_literal (escape_sequence)) (identifier)))))))
|
||||
|
||||
============================================
|
||||
String literals
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
"a";
|
||||
"b" "c" "d";
|
||||
"\"hi\"";
|
||||
L"bonjour";
|
||||
u"guten morgen";
|
||||
U"buenos dias";
|
||||
u8"buongiorno";
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (string_literal))
|
||||
(expression_statement (concatenated_string (string_literal) (string_literal) (string_literal)))
|
||||
(expression_statement (string_literal (escape_sequence) (escape_sequence)))
|
||||
(expression_statement (string_literal))
|
||||
(expression_statement (string_literal))
|
||||
(expression_statement (string_literal))
|
||||
(expression_statement (string_literal)))))
|
||||
|
||||
============================================
|
||||
Character literals
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
'a';
|
||||
'\0';
|
||||
'\t';
|
||||
'\'';
|
||||
L'b';
|
||||
u'c';
|
||||
U'\xa1';
|
||||
u8'\x1A';
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (char_literal))
|
||||
(expression_statement (char_literal (escape_sequence)))
|
||||
(expression_statement (char_literal (escape_sequence)))
|
||||
(expression_statement (char_literal (escape_sequence)))
|
||||
(expression_statement (char_literal))
|
||||
(expression_statement (char_literal))
|
||||
(expression_statement (char_literal (escape_sequence)))
|
||||
(expression_statement (char_literal (escape_sequence))))))
|
||||
|
||||
============================================
|
||||
Field access
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
s.data1;
|
||||
p->data2;
|
||||
q[data3];
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (field_expression (identifier) (field_identifier)))
|
||||
(expression_statement (field_expression (identifier) (field_identifier)))
|
||||
(expression_statement (subscript_expression (identifier) (identifier))))))
|
||||
|
||||
============================================
|
||||
Boolean operators
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
!x || !y && !z;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (binary_expression
|
||||
(unary_expression (identifier))
|
||||
(binary_expression
|
||||
(unary_expression (identifier))
|
||||
(unary_expression (identifier))))))))
|
||||
|
||||
============================================
|
||||
Math operators
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
-a / b + c * -d;
|
||||
a++ - ++b + c-- + --d;
|
||||
++L;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (binary_expression
|
||||
(binary_expression
|
||||
(unary_expression (identifier))
|
||||
(identifier))
|
||||
(binary_expression
|
||||
(identifier)
|
||||
(unary_expression (identifier)))))
|
||||
(expression_statement
|
||||
(binary_expression
|
||||
(binary_expression
|
||||
(binary_expression
|
||||
(update_expression (identifier))
|
||||
(update_expression (identifier)))
|
||||
(update_expression (identifier)))
|
||||
(update_expression (identifier))))
|
||||
(expression_statement (update_expression (identifier))))))
|
||||
|
||||
============================================
|
||||
The comma operator
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
i--, j--;
|
||||
(i--, j--);
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement
|
||||
(comma_expression
|
||||
(update_expression (identifier))
|
||||
(update_expression (identifier))))
|
||||
(expression_statement
|
||||
(parenthesized_expression
|
||||
(comma_expression
|
||||
(update_expression (identifier))
|
||||
(update_expression (identifier))))))))
|
||||
|
||||
============================================
|
||||
Assignments
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
static int a = 1;
|
||||
b = *c = 2;
|
||||
d.e = 3;
|
||||
f->g = 4;
|
||||
h[i] = j;
|
||||
k += l;
|
||||
m -= o;
|
||||
n *= p;
|
||||
q /= r;
|
||||
*s++ = 1;
|
||||
(*t) = 1;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
type: (primitive_type)
|
||||
declarator: (function_declarator
|
||||
declarator: (identifier)
|
||||
parameters: (parameter_list))
|
||||
body: (compound_statement
|
||||
(declaration
|
||||
(storage_class_specifier)
|
||||
type: (primitive_type)
|
||||
declarator: (init_declarator
|
||||
declarator: (identifier)
|
||||
value: (number_literal)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (identifier)
|
||||
right: (assignment_expression
|
||||
left: (pointer_expression
|
||||
argument: (identifier))
|
||||
right: (number_literal))))
|
||||
(expression_statement (assignment_expression
|
||||
left: (field_expression
|
||||
argument: (identifier)
|
||||
field: (field_identifier))
|
||||
right: (number_literal)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (field_expression
|
||||
argument: (identifier)
|
||||
field: (field_identifier))
|
||||
right: (number_literal)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (subscript_expression
|
||||
argument: (identifier)
|
||||
index: (identifier))
|
||||
right: (identifier)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (identifier)
|
||||
right: (identifier)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (identifier)
|
||||
right: (identifier)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (identifier)
|
||||
right: (identifier)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (identifier)
|
||||
right: (identifier)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (pointer_expression
|
||||
argument: (update_expression
|
||||
argument: (identifier)))
|
||||
right: (number_literal)))
|
||||
(expression_statement (assignment_expression
|
||||
left: (parenthesized_expression (pointer_expression
|
||||
argument: (identifier)))
|
||||
right: (number_literal))))))
|
||||
|
||||
============================================
|
||||
Pointer operations
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
doSomething(&x, *x);
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (call_expression
|
||||
(identifier)
|
||||
(argument_list
|
||||
(pointer_expression (identifier))
|
||||
(pointer_expression (identifier))))))))
|
||||
|
||||
============================================
|
||||
Type-casts
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
x = (const SomeType *)thing;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
type: (primitive_type)
|
||||
declarator: (function_declarator
|
||||
declarator: (identifier)
|
||||
parameters: (parameter_list))
|
||||
body: (compound_statement
|
||||
(expression_statement (assignment_expression
|
||||
left: (identifier)
|
||||
right: (cast_expression
|
||||
type: (type_descriptor
|
||||
(type_qualifier)
|
||||
type: (type_identifier)
|
||||
declarator: (abstract_pointer_declarator))
|
||||
value: (identifier)))))))
|
||||
|
||||
============================================
|
||||
Sizeof expressions
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
sizeof x.a;
|
||||
sizeof(x.a);
|
||||
sizeof(const char **);
|
||||
sizeof(char * ());
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (sizeof_expression (field_expression (identifier) (field_identifier))))
|
||||
(expression_statement (sizeof_expression (parenthesized_expression (field_expression (identifier) (field_identifier)))))
|
||||
(expression_statement (sizeof_expression
|
||||
(type_descriptor (type_qualifier) (primitive_type) (abstract_pointer_declarator (abstract_pointer_declarator)))))
|
||||
(expression_statement (sizeof_expression
|
||||
(type_descriptor (primitive_type) (abstract_pointer_declarator (abstract_function_declarator (parameter_list)))))))))
|
||||
|
||||
============================================
|
||||
Compound literals
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
x = (SomeType) {
|
||||
.f1.f2[f3] = 5,
|
||||
.f4 = {}
|
||||
};
|
||||
y = (struct SomeStruct) {
|
||||
7,
|
||||
8
|
||||
};
|
||||
z = (char const []) {'a', 'b'};
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (assignment_expression
|
||||
(identifier)
|
||||
(compound_literal_expression
|
||||
(type_descriptor (type_identifier))
|
||||
(initializer_list
|
||||
(initializer_pair
|
||||
(field_designator (field_identifier))
|
||||
(field_designator (field_identifier))
|
||||
(subscript_designator (identifier))
|
||||
(number_literal))
|
||||
(initializer_pair
|
||||
(field_designator (field_identifier))
|
||||
(initializer_list))))))
|
||||
(expression_statement (assignment_expression
|
||||
(identifier)
|
||||
(compound_literal_expression
|
||||
(type_descriptor (struct_specifier (type_identifier)))
|
||||
(initializer_list
|
||||
(number_literal)
|
||||
(number_literal)))))
|
||||
(expression_statement
|
||||
(assignment_expression
|
||||
(identifier)
|
||||
(compound_literal_expression
|
||||
(type_descriptor (primitive_type) (type_qualifier) (abstract_array_declarator))
|
||||
(initializer_list (char_literal) (char_literal))))))))
|
||||
|
||||
============================================
|
||||
Compound literals with trailing commas
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
y = (struct SomeStruct) { 7, 8, };
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(expression_statement (assignment_expression
|
||||
(identifier)
|
||||
(compound_literal_expression
|
||||
(type_descriptor (struct_specifier (type_identifier)))
|
||||
(initializer_list
|
||||
(number_literal)
|
||||
(number_literal))))))))
|
||||
|
||||
====================================
|
||||
Comments with escaped newlines
|
||||
====================================
|
||||
|
||||
// one \
|
||||
two
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(comment))
|
||||
|
||||
==============================================
|
||||
Comments with escaped chars and newlines
|
||||
==============================================
|
||||
|
||||
// one \a \b \
|
||||
two
|
||||
// one \c \d
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(comment)
|
||||
(comment))
|
||||
187
tree-sitter-c/test/corpus/microsoft.txt
Normal file
187
tree-sitter-c/test/corpus/microsoft.txt
Normal file
@@ -0,0 +1,187 @@
|
||||
================================
|
||||
declaration specs
|
||||
================================
|
||||
|
||||
struct __declspec(dllexport) s2
|
||||
{
|
||||
};
|
||||
|
||||
union __declspec(noinline) u2 {
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(struct_specifier
|
||||
(ms_declspec_modifier
|
||||
(identifier))
|
||||
name: (type_identifier)
|
||||
body: (field_declaration_list))
|
||||
(union_specifier
|
||||
(ms_declspec_modifier
|
||||
(identifier))
|
||||
name: (type_identifier)
|
||||
body: (field_declaration_list)))
|
||||
|
||||
================================
|
||||
pointers
|
||||
================================
|
||||
|
||||
struct s2
|
||||
{
|
||||
int * __restrict x;
|
||||
int * __sptr psp;
|
||||
int * __uptr pup;
|
||||
int * __unaligned pup;
|
||||
};
|
||||
|
||||
void sum2(int n, int * __restrict a, int * __restrict b,
|
||||
int * c, int * d) {
|
||||
int i;
|
||||
for (i = 0; i < n; i++) {
|
||||
a[i] = b[i] + c[i];
|
||||
c[i] = b[i] + d[i];
|
||||
}
|
||||
}
|
||||
|
||||
void MyFunction(char * __uptr myValue);
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(struct_specifier
|
||||
name: (type_identifier)
|
||||
body: (field_declaration_list
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
(ms_pointer_modifier
|
||||
(ms_restrict_modifier))
|
||||
declarator: (field_identifier)))
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
(ms_pointer_modifier
|
||||
(ms_signed_ptr_modifier))
|
||||
declarator: (field_identifier)))
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
(ms_pointer_modifier
|
||||
(ms_unsigned_ptr_modifier))
|
||||
declarator: (field_identifier)))
|
||||
(field_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
(ms_pointer_modifier
|
||||
(ms_unaligned_ptr_modifier))
|
||||
declarator: (field_identifier)))))
|
||||
(function_definition
|
||||
type: (primitive_type)
|
||||
declarator: (function_declarator
|
||||
declarator: (identifier)
|
||||
parameters: (parameter_list
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (identifier))
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
(ms_pointer_modifier
|
||||
(ms_restrict_modifier))
|
||||
declarator: (identifier)))
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
(ms_pointer_modifier
|
||||
(ms_restrict_modifier))
|
||||
declarator: (identifier)))
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
declarator: (identifier)))
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
declarator: (identifier)))))
|
||||
body: (compound_statement
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
declarator: (identifier))
|
||||
(for_statement
|
||||
initializer: (assignment_expression
|
||||
left: (identifier)
|
||||
right: (number_literal))
|
||||
condition: (binary_expression
|
||||
left: (identifier)
|
||||
right: (identifier))
|
||||
update: (update_expression
|
||||
argument: (identifier))
|
||||
body: (compound_statement
|
||||
(expression_statement
|
||||
(assignment_expression
|
||||
left: (subscript_expression
|
||||
argument: (identifier)
|
||||
index: (identifier))
|
||||
right: (binary_expression
|
||||
left: (subscript_expression
|
||||
argument: (identifier)
|
||||
index: (identifier))
|
||||
right: (subscript_expression
|
||||
argument: (identifier)
|
||||
index: (identifier)))))
|
||||
(expression_statement
|
||||
(assignment_expression
|
||||
left: (subscript_expression
|
||||
argument: (identifier)
|
||||
index: (identifier))
|
||||
right: (binary_expression
|
||||
left: (subscript_expression
|
||||
argument: (identifier)
|
||||
index: (identifier))
|
||||
right: (subscript_expression
|
||||
argument: (identifier)
|
||||
index: (identifier)))))))))
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
declarator: (function_declarator
|
||||
declarator: (identifier)
|
||||
parameters: (parameter_list
|
||||
(parameter_declaration
|
||||
type: (primitive_type)
|
||||
declarator: (pointer_declarator
|
||||
(ms_pointer_modifier
|
||||
(ms_unsigned_ptr_modifier))
|
||||
declarator: (identifier)))))))
|
||||
|
||||
================================
|
||||
call modifiers
|
||||
================================
|
||||
|
||||
__cdecl void mymethod(){
|
||||
return;
|
||||
}
|
||||
|
||||
__fastcall void mymethod(){
|
||||
return;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(ms_call_modifier)
|
||||
type: (primitive_type)
|
||||
declarator: (function_declarator
|
||||
declarator: (identifier)
|
||||
parameters: (parameter_list))
|
||||
body: (compound_statement
|
||||
(return_statement)))
|
||||
(function_definition
|
||||
(ms_call_modifier)
|
||||
type: (primitive_type)
|
||||
declarator: (function_declarator
|
||||
declarator: (identifier)
|
||||
parameters: (parameter_list))
|
||||
body: (compound_statement
|
||||
(return_statement))))
|
||||
274
tree-sitter-c/test/corpus/preprocessor.txt
Normal file
274
tree-sitter-c/test/corpus/preprocessor.txt
Normal file
@@ -0,0 +1,274 @@
|
||||
============================================
|
||||
Include directives
|
||||
============================================
|
||||
|
||||
#include "some/path.h"
|
||||
#include <stdint.h>
|
||||
#include MACRO
|
||||
#include MACRO(arg1, arg2)
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(preproc_include path: (string_literal))
|
||||
(preproc_include path: (system_lib_string))
|
||||
(preproc_include path: (identifier))
|
||||
(preproc_include path:
|
||||
(call_expression
|
||||
function: (identifier)
|
||||
arguments: (argument_list (identifier) (identifier)))))
|
||||
|
||||
============================================
|
||||
Object-like macro definitions
|
||||
============================================
|
||||
|
||||
#define ONE
|
||||
#define TWO int a = b;
|
||||
#define THREE \
|
||||
c == d ? \
|
||||
e : \
|
||||
f
|
||||
#define FOUR (mno * pq)
|
||||
#define FIVE(a,b) x \
|
||||
+ y
|
||||
#define SIX(a, \
|
||||
b) x \
|
||||
+ y
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(preproc_def name: (identifier))
|
||||
(preproc_def name: (identifier) value: (preproc_arg))
|
||||
(preproc_def name: (identifier) value: (preproc_arg))
|
||||
(preproc_def name: (identifier) value: (preproc_arg))
|
||||
(preproc_function_def name: (identifier) parameters: (preproc_params (identifier) (identifier)) value: (preproc_arg))
|
||||
(preproc_function_def name: (identifier) parameters: (preproc_params (identifier) (identifier)) value: (preproc_arg)))
|
||||
|
||||
============================================
|
||||
Function-like macro definitions
|
||||
============================================
|
||||
|
||||
#define ONE() a
|
||||
#define TWO(b) c
|
||||
#define THREE(d, e) f
|
||||
#define FOUR(...) g
|
||||
#define FIVE(h, i, ...) j
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(preproc_function_def
|
||||
name: (identifier)
|
||||
parameters: (preproc_params)
|
||||
value: (preproc_arg))
|
||||
(preproc_function_def
|
||||
name: (identifier)
|
||||
parameters: (preproc_params (identifier))
|
||||
value: (preproc_arg))
|
||||
(preproc_function_def
|
||||
name: (identifier)
|
||||
parameters: (preproc_params (identifier) (identifier))
|
||||
value: (preproc_arg))
|
||||
(preproc_function_def
|
||||
name: (identifier)
|
||||
parameters: (preproc_params)
|
||||
value: (preproc_arg))
|
||||
(preproc_function_def
|
||||
name: (identifier)
|
||||
parameters: (preproc_params (identifier) (identifier))
|
||||
value: (preproc_arg)))
|
||||
|
||||
============================================
|
||||
Ifdefs
|
||||
============================================
|
||||
|
||||
#ifndef DEFINE1
|
||||
int j;
|
||||
#endif
|
||||
|
||||
#ifdef DEFINE2
|
||||
ssize_t b;
|
||||
#define c 32
|
||||
#elif defined DEFINE3
|
||||
#else
|
||||
int b;
|
||||
#define c 16
|
||||
#endif
|
||||
|
||||
#ifdef DEFINE2
|
||||
#else
|
||||
# ifdef DEFINE3
|
||||
# else
|
||||
# endif
|
||||
#endif
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(preproc_ifdef
|
||||
name: (identifier)
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
declarator: (identifier)))
|
||||
|
||||
(preproc_ifdef
|
||||
name: (identifier)
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
declarator: (identifier))
|
||||
(preproc_def
|
||||
name: (identifier)
|
||||
value: (preproc_arg))
|
||||
alternative: (preproc_elif
|
||||
condition: (preproc_defined (identifier))
|
||||
alternative: (preproc_else
|
||||
(declaration
|
||||
type: (primitive_type)
|
||||
declarator: (identifier))
|
||||
(preproc_def
|
||||
name: (identifier)
|
||||
value: (preproc_arg)))))
|
||||
|
||||
(preproc_ifdef
|
||||
name: (identifier)
|
||||
alternative: (preproc_else
|
||||
(preproc_ifdef
|
||||
name: (identifier)
|
||||
alternative: (preproc_else)))))
|
||||
|
||||
===============================================================
|
||||
General if blocks
|
||||
==========================================
|
||||
|
||||
#if defined(__GNUC__) && defined(__PIC__)
|
||||
#define inline inline __attribute__((always_inline))
|
||||
#elif defined(_WIN32)
|
||||
#define something
|
||||
#elif !defined(SOMETHING_ELSE)
|
||||
#define SOMETHING_ELSE
|
||||
#else
|
||||
#include <something>
|
||||
#endif
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(preproc_if
|
||||
condition: (binary_expression
|
||||
left: (preproc_defined (identifier))
|
||||
right: (preproc_defined (identifier)))
|
||||
(preproc_def
|
||||
name: (identifier)
|
||||
value: (preproc_arg))
|
||||
alternative: (preproc_elif
|
||||
condition: (preproc_defined (identifier))
|
||||
(preproc_def
|
||||
name: (identifier))
|
||||
alternative: (preproc_elif
|
||||
condition: (unary_expression
|
||||
argument: (preproc_defined (identifier)))
|
||||
(preproc_def
|
||||
name: (identifier))
|
||||
alternative: (preproc_else
|
||||
(preproc_include path: (system_lib_string)))))))
|
||||
|
||||
============================================
|
||||
Preprocessor conditionals in functions
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
#if d
|
||||
puts("1");
|
||||
#else
|
||||
puts("2");
|
||||
#endif
|
||||
|
||||
#if a
|
||||
return 0;
|
||||
#elif b
|
||||
return 1;
|
||||
#elif c
|
||||
return 2;
|
||||
#else
|
||||
return 3;
|
||||
#endif
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(preproc_if
|
||||
(identifier)
|
||||
(expression_statement (call_expression (identifier) (argument_list (string_literal))))
|
||||
(preproc_else
|
||||
(expression_statement (call_expression (identifier) (argument_list (string_literal))))))
|
||||
(preproc_if
|
||||
(identifier)
|
||||
(return_statement (number_literal))
|
||||
(preproc_elif
|
||||
(identifier)
|
||||
(return_statement (number_literal))
|
||||
(preproc_elif
|
||||
(identifier)
|
||||
(return_statement (number_literal))
|
||||
(preproc_else
|
||||
(return_statement (number_literal)))))))))
|
||||
|
||||
=================================================
|
||||
Preprocessor conditionals in struct/union bodies
|
||||
=================================================
|
||||
|
||||
struct S {
|
||||
#ifdef _WIN32
|
||||
LONG f2;
|
||||
#else
|
||||
uint32_t f2;
|
||||
#endif
|
||||
};
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(struct_specifier (type_identifier) (field_declaration_list
|
||||
(preproc_ifdef (identifier)
|
||||
(field_declaration (type_identifier) (field_identifier))
|
||||
(preproc_else
|
||||
(field_declaration (primitive_type) (field_identifier)))))))
|
||||
|
||||
====================================
|
||||
Unknown preprocessor directives
|
||||
====================================
|
||||
|
||||
#pragma mark - UIViewController
|
||||
|
||||
---
|
||||
|
||||
(translation_unit (preproc_call
|
||||
directive: (preproc_directive)
|
||||
argument: (preproc_arg)))
|
||||
|
||||
======================================
|
||||
Preprocessor expressions
|
||||
======================================
|
||||
|
||||
#if A(B || C) && \
|
||||
!D(F)
|
||||
|
||||
uint32_t a;
|
||||
|
||||
#endif
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(preproc_if
|
||||
(binary_expression
|
||||
(call_expression (identifier) (argument_list (binary_expression (identifier) (identifier))))
|
||||
(unary_expression
|
||||
(call_expression (identifier) (argument_list (identifier)))))
|
||||
(declaration (primitive_type) (identifier))))
|
||||
326
tree-sitter-c/test/corpus/statements.txt
Normal file
326
tree-sitter-c/test/corpus/statements.txt
Normal file
@@ -0,0 +1,326 @@
|
||||
============================================
|
||||
If statements
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
if (a)
|
||||
1;
|
||||
|
||||
if (!a) {
|
||||
2;
|
||||
} else {
|
||||
3;
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(if_statement (parenthesized_expression (identifier))
|
||||
(expression_statement (number_literal)))
|
||||
(if_statement (parenthesized_expression (unary_expression (identifier)))
|
||||
(compound_statement
|
||||
(expression_statement (number_literal)))
|
||||
(compound_statement
|
||||
(expression_statement (number_literal)))))))
|
||||
|
||||
============================================
|
||||
For loops
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
for (;;)
|
||||
1;
|
||||
|
||||
for (int i = 0; i < 5; next(), i++) {
|
||||
2;
|
||||
}
|
||||
|
||||
for (start(); check(); step())
|
||||
3;
|
||||
|
||||
for (i = 0, j = 0, k = 0, l = 0; i < 1, j < 1; i++, j++, k++, l++)
|
||||
1;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(for_statement
|
||||
(expression_statement (number_literal)))
|
||||
(for_statement
|
||||
(declaration (primitive_type) (init_declarator (identifier) (number_literal)))
|
||||
(binary_expression (identifier) (number_literal))
|
||||
(comma_expression
|
||||
(call_expression (identifier) (argument_list))
|
||||
(update_expression (identifier)))
|
||||
(compound_statement (expression_statement (number_literal))))
|
||||
(for_statement
|
||||
(call_expression (identifier) (argument_list))
|
||||
(call_expression (identifier) (argument_list))
|
||||
(call_expression (identifier) (argument_list))
|
||||
(expression_statement (number_literal)))
|
||||
(for_statement
|
||||
(comma_expression
|
||||
(assignment_expression (identifier) (number_literal))
|
||||
(comma_expression
|
||||
(assignment_expression (identifier) (number_literal))
|
||||
(comma_expression
|
||||
(assignment_expression (identifier) (number_literal))
|
||||
(assignment_expression (identifier) (number_literal)))))
|
||||
(comma_expression
|
||||
(binary_expression
|
||||
(identifier)
|
||||
(number_literal))
|
||||
(binary_expression
|
||||
(identifier)
|
||||
(number_literal)))
|
||||
(comma_expression
|
||||
(update_expression (identifier))
|
||||
(comma_expression
|
||||
(update_expression (identifier))
|
||||
(comma_expression
|
||||
(update_expression (identifier))
|
||||
(update_expression (identifier)))))
|
||||
(expression_statement (number_literal))))))
|
||||
|
||||
============================================
|
||||
While loops
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
while (x)
|
||||
printf("hi");
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(while_statement (parenthesized_expression (identifier))
|
||||
(expression_statement (call_expression
|
||||
(identifier)
|
||||
(argument_list (string_literal))))))))
|
||||
|
||||
============================================
|
||||
Labeled statements
|
||||
============================================
|
||||
|
||||
void foo(T *t) {
|
||||
recur:
|
||||
t = t->next();
|
||||
if (t) goto recur;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list
|
||||
(parameter_declaration (type_identifier) (pointer_declarator (identifier)))))
|
||||
(compound_statement
|
||||
(labeled_statement (statement_identifier)
|
||||
(expression_statement (assignment_expression
|
||||
(identifier)
|
||||
(call_expression (field_expression (identifier) (field_identifier)) (argument_list)))))
|
||||
(if_statement (parenthesized_expression (identifier)) (goto_statement (statement_identifier))))))
|
||||
|
||||
============================================
|
||||
Switch statements
|
||||
============================================
|
||||
|
||||
void foo(int a) {
|
||||
switch (a) {
|
||||
puts("entered switch!");
|
||||
|
||||
case 3:
|
||||
case 5:
|
||||
if (b) {
|
||||
c();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
c();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list
|
||||
(parameter_declaration (primitive_type) (identifier))))
|
||||
(compound_statement
|
||||
(switch_statement
|
||||
(parenthesized_expression (identifier))
|
||||
(compound_statement
|
||||
(expression_statement (call_expression (identifier) (argument_list (string_literal))))
|
||||
(case_statement (number_literal))
|
||||
(case_statement (number_literal)
|
||||
(if_statement
|
||||
(parenthesized_expression (identifier))
|
||||
(compound_statement (expression_statement (call_expression (identifier) (argument_list)))))
|
||||
(break_statement))
|
||||
(case_statement
|
||||
(expression_statement (call_expression (identifier) (argument_list)))
|
||||
(break_statement)))))))
|
||||
|
||||
============================================
|
||||
Case statements separate from switch statements
|
||||
============================================
|
||||
|
||||
int main() {
|
||||
switch (count % 8) {
|
||||
case 0:
|
||||
do {
|
||||
*to = *from++;
|
||||
case 2: *to = *from++;
|
||||
case 1: *to = *from++;
|
||||
} while (--n > 0);
|
||||
}
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(switch_statement
|
||||
(parenthesized_expression (binary_expression (identifier) (number_literal)))
|
||||
(compound_statement
|
||||
(case_statement (number_literal)
|
||||
(do_statement
|
||||
(compound_statement
|
||||
(expression_statement (assignment_expression
|
||||
(pointer_expression (identifier))
|
||||
(pointer_expression (update_expression (identifier)))))
|
||||
(case_statement (number_literal)
|
||||
(expression_statement (assignment_expression
|
||||
(pointer_expression (identifier))
|
||||
(pointer_expression (update_expression (identifier))))))
|
||||
(case_statement (number_literal)
|
||||
(expression_statement (assignment_expression
|
||||
(pointer_expression (identifier))
|
||||
(pointer_expression (update_expression (identifier)))))))
|
||||
(parenthesized_expression (binary_expression (update_expression (identifier)) (number_literal))))))))))
|
||||
|
||||
============================================
|
||||
Return statements
|
||||
============================================
|
||||
|
||||
void foo() {
|
||||
return;
|
||||
return a;
|
||||
return a, b;
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition
|
||||
(primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(return_statement)
|
||||
(return_statement (identifier))
|
||||
(return_statement (comma_expression (identifier) (identifier))))))
|
||||
|
||||
============================================
|
||||
Comments with asterisks
|
||||
============================================
|
||||
|
||||
/*************************
|
||||
* odd number of asterisks
|
||||
*************************/
|
||||
int a;
|
||||
|
||||
/**************************
|
||||
* even number of asterisks
|
||||
**************************/
|
||||
int b;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(comment)
|
||||
(declaration (primitive_type) (identifier))
|
||||
(comment)
|
||||
(declaration (primitive_type) (identifier)))
|
||||
|
||||
============================================
|
||||
Attributes
|
||||
============================================
|
||||
|
||||
void f() {
|
||||
[[a]] switch (b) {
|
||||
[[c]] case 1: {}
|
||||
case 2:
|
||||
[[fallthrough]];
|
||||
default:
|
||||
}
|
||||
[[a]] while (true) {}
|
||||
[[a]] if (true) {}
|
||||
[[a]] for (;;) {}
|
||||
[[a]] return;
|
||||
[[a]] a;
|
||||
[[a]];
|
||||
[[a]] label: {}
|
||||
[[a]] goto label;
|
||||
|
||||
// these are c++ specific, but their bind locations should be c-compatible
|
||||
if (true) [[likely]] {} else [[unlikely]] {}
|
||||
do [[likely]] {} while (true);
|
||||
}
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(function_definition (primitive_type)
|
||||
(function_declarator (identifier) (parameter_list))
|
||||
(compound_statement
|
||||
(attributed_statement
|
||||
(attribute_declaration (attribute (identifier)))
|
||||
(switch_statement
|
||||
(parenthesized_expression (identifier))
|
||||
(compound_statement
|
||||
(attributed_statement
|
||||
(attribute_declaration (attribute (identifier)))
|
||||
(case_statement (number_literal) (compound_statement)))
|
||||
(case_statement (number_literal)
|
||||
(attributed_statement
|
||||
(attribute_declaration (attribute (identifier)))
|
||||
(expression_statement)))
|
||||
(case_statement))))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (while_statement (parenthesized_expression (true)) (compound_statement)))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (if_statement (parenthesized_expression (true)) (compound_statement)))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (for_statement (compound_statement)))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (return_statement))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (expression_statement (identifier)))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (expression_statement))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (labeled_statement (statement_identifier) (compound_statement)))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (goto_statement (statement_identifier)))
|
||||
(comment)
|
||||
(if_statement
|
||||
(parenthesized_expression (true))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (compound_statement))
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (compound_statement)))
|
||||
(do_statement
|
||||
(attributed_statement (attribute_declaration (attribute (identifier))) (compound_statement))
|
||||
(parenthesized_expression (true))))))
|
||||
80
tree-sitter-c/test/corpus/types.txt
Normal file
80
tree-sitter-c/test/corpus/types.txt
Normal file
@@ -0,0 +1,80 @@
|
||||
========================================
|
||||
Primitive types
|
||||
========================================
|
||||
|
||||
int a;
|
||||
uint8_t a;
|
||||
uint16_t a;
|
||||
uint32_t a;
|
||||
uint64_t a;
|
||||
uintptr_t a;
|
||||
|
||||
int8_t a;
|
||||
int16_t a;
|
||||
int32_t a;
|
||||
int64_t a;
|
||||
intptr_t a;
|
||||
|
||||
char16_t a;
|
||||
char32_t a;
|
||||
|
||||
size_t a;
|
||||
ssize_t a;
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier))
|
||||
(declaration (primitive_type) (identifier)))
|
||||
|
||||
========================================
|
||||
Type modifiers
|
||||
========================================
|
||||
|
||||
void f(unsigned);
|
||||
void f(unsigned int);
|
||||
void f(signed long int);
|
||||
void f(unsigned v1);
|
||||
void f(unsigned long v2);
|
||||
|
||||
---
|
||||
|
||||
(translation_unit
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator
|
||||
(identifier)
|
||||
(parameter_list (parameter_declaration (sized_type_specifier)))))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator
|
||||
(identifier)
|
||||
(parameter_list (parameter_declaration (sized_type_specifier (primitive_type))))))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator
|
||||
(identifier)
|
||||
(parameter_list (parameter_declaration (sized_type_specifier (primitive_type))))))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator
|
||||
(identifier)
|
||||
(parameter_list (parameter_declaration (sized_type_specifier) (identifier)))))
|
||||
(declaration
|
||||
(primitive_type)
|
||||
(function_declarator
|
||||
(identifier)
|
||||
(parameter_list (parameter_declaration (sized_type_specifier) (identifier))))))
|
||||
Reference in New Issue
Block a user