Some of this is still pretty rough (note the load of FIXMEs), but it is strictly an improvement and fixes various bugs that were related to macro processing but are also imporant in non-macro use cases. Specific fixes: - correctly puts espaced newlines at the end of the line - fixes counting of white space before a token when escaped newlines are present - fixes parsing of "trailing" tokens when eof() is hit - puts macro parsing orthogonal to parsing other structure - general support for parsing of macro definitions Due to the fix to format trailing tokens, this change also includes a bunch of fixes to the c-index tests. llvm-svn: 171556
100 lines
2.0 KiB
C
100 lines
2.0 KiB
C
// RUN: rm -rf %t
|
|
// RUN: mkdir %t
|
|
// RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng -target x86_64-apple-darwin10 %s \
|
|
// RUN: | FileCheck %s
|
|
|
|
/**
|
|
* \brief Aaa.
|
|
*/
|
|
int global_function();
|
|
// CHECK: <Declaration>int global_function()</Declaration>
|
|
|
|
/**
|
|
* \param x1 Aaa.
|
|
*/
|
|
extern void external_function(int x1);
|
|
// CHECK: <Declaration>extern void external_function(int x1)</Declaration>
|
|
|
|
/**
|
|
* \brief global variable;
|
|
*/
|
|
int global_variable;
|
|
// CHECK: <Declaration>int global_variable</Declaration>
|
|
|
|
/**
|
|
* \brief local variable;
|
|
*/
|
|
static int static_variable;
|
|
// CHECK: <Declaration>static int static_variable</Declaration>
|
|
|
|
/**
|
|
* \brief external variable
|
|
*/
|
|
extern int external_variable;
|
|
// CHECK: <Declaration>extern int external_variable</Declaration>
|
|
|
|
int global_function() {
|
|
/**
|
|
* \brief a local variable
|
|
*/
|
|
int local = 10;
|
|
return local;
|
|
}
|
|
// CHECK: <Declaration>int global_function()</Declaration>
|
|
// CHECK: <Declaration>int local = 10</Declaration>
|
|
|
|
/**
|
|
* \brief initialized decl.
|
|
*/
|
|
int initialized_global = 100;
|
|
// CHECK: <Declaration>int initialized_global = 100</Declaration>
|
|
|
|
/**
|
|
* \brief typedef example
|
|
*/
|
|
typedef int INT_T;
|
|
// CHECK: <Declaration>typedef int INT_T</Declaration>
|
|
|
|
/**
|
|
* \brief aggregate type example
|
|
*/
|
|
struct S {
|
|
/**
|
|
* \brief iS1;
|
|
*/
|
|
int iS1;
|
|
/**
|
|
* \brief dS1;
|
|
*/
|
|
double dS1;
|
|
};
|
|
// CHECK: <Declaration>struct S {\n}</Declaration>
|
|
// CHECK: <Declaration>int iS1</Declaration>
|
|
// CHECK: <Declaration>double dS1</Declaration>
|
|
|
|
/**
|
|
* \brief enum e;
|
|
*/
|
|
enum e {
|
|
One,
|
|
/**
|
|
* \brief Two;
|
|
*/
|
|
Two,
|
|
Three
|
|
};
|
|
// CHECK: <Declaration>enum e {\n}</Declaration>
|
|
// CHECK: <Declaration>Two</Declaration>
|
|
|
|
/**
|
|
*\brief block declaration
|
|
*/
|
|
int (^Block) (int i, int j);
|
|
// CHECK: <Declaration>int ( ^ Block) (int, int)</Declaration>
|
|
|
|
/**
|
|
*\brief block declaration
|
|
*/
|
|
int (^Block1) (int i, int j) = ^(int i, int j) { return i + j; };
|
|
// CHECK: <Declaration>int ( ^ Block1) (int, int) = ^ (int i, int j) {\n}</Declaration>
|