diff options
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/manual/cplusplus/c++ | 4 | ||||
-rw-r--r-- | tests/manual/cplusplus/conf.c++ | 2 | ||||
-rw-r--r-- | tests/manual/cplusplus/cplusplus.pro | 4 | ||||
-rw-r--r-- | tests/manual/cplusplus/main.cpp | 83 |
4 files changed, 52 insertions, 41 deletions
diff --git a/tests/manual/cplusplus/c++ b/tests/manual/cplusplus/c++ index f4cbb4fe5c..a5908b79ff 100755 --- a/tests/manual/cplusplus/c++ +++ b/tests/manual/cplusplus/c++ @@ -1,3 +1,5 @@ #!/bin/sh me=$(dirname $0) -${CPP-gcc} -xc++ -E -include $me/conf.c++ $* | $me/cplusplus0 +${CPP-gcc} -U__BLOCKS__ -xc++ -E -include $me/conf.c++ $* > $me/file.i +$me/cplusplus0 $me/file.i + diff --git a/tests/manual/cplusplus/conf.c++ b/tests/manual/cplusplus/conf.c++ index 3cec3f4693..69bafe0459 100644 --- a/tests/manual/cplusplus/conf.c++ +++ b/tests/manual/cplusplus/conf.c++ @@ -6,7 +6,7 @@ #define restrict #define __restrict #define __restrict__ -#define __weak +// #define __weak #define __builtin_va_arg(a,b) ((b)0) #define __stdcall #define __fastcall diff --git a/tests/manual/cplusplus/cplusplus.pro b/tests/manual/cplusplus/cplusplus.pro index 11dd08f6fb..4964d9c5ea 100644 --- a/tests/manual/cplusplus/cplusplus.pro +++ b/tests/manual/cplusplus/cplusplus.pro @@ -1,8 +1,8 @@ -QT = core +QT = core gui macx:CONFIG -= app_bundle TARGET = cplusplus0 -include(../../../src/shared/cplusplus/cplusplus.pri) +include(../../../src/libs/cplusplus/cplusplus-lib.pri) # Input SOURCES += main.cpp diff --git a/tests/manual/cplusplus/main.cpp b/tests/manual/cplusplus/main.cpp index 6c2596eeee..a1054afee8 100644 --- a/tests/manual/cplusplus/main.cpp +++ b/tests/manual/cplusplus/main.cpp @@ -38,6 +38,7 @@ #include <Symbols.h> #include <Names.h> #include <CoreTypes.h> +#include <CppDocument.h> #include <QFile> #include <QList> @@ -50,54 +51,62 @@ #include <cstdio> #include <cstdlib> #include <iostream> -#include <sstream> using namespace CPlusPlus; -int main(int argc, char *argv[]) +class ForEachBinaryExpression: protected ASTVisitor { - QCoreApplication app(argc, argv); + Document::Ptr doc; + Document::Ptr pattern; - QStringList args = app.arguments(); - const QString appName = args.first(); - args.removeFirst(); +public: + ForEachBinaryExpression(Document::Ptr doc, Document::Ptr pattern) + : ASTVisitor(doc->control()), doc(doc), pattern(pattern) {} - foreach (const QString &arg, args) { - if (arg == QLatin1String("--help")) { - const QFileInfo appInfo(appName); - const QByteArray appFileName = QFile::encodeName(appInfo.fileName()); + void operator()() { accept(doc->translationUnit()->ast()); } - printf("Usage: %s [options]\n" - " --help Display this information\n", - appFileName.constData()); +protected: + using ASTVisitor::visit; - return EXIT_SUCCESS; + virtual bool visit(BinaryExpressionAST *ast) + { + ASTMatcher matcher(doc->translationUnit(), pattern->translationUnit()); + + if (ast->match(ast, pattern->translationUnit()->ast(), &matcher)) { + translationUnit()->warning(ast->binary_op_token, "binary expression"); } + + return true; } +}; + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + QStringList files = app.arguments(); + files.removeFirst(); + + Document::Ptr pattern = Document::create("<pattern>"); + pattern->setSource("__y < __x"); + pattern->parse(Document::ParseExpression); + + foreach (const QString &fileName, files) { + QFile file(fileName); + if (! file.open(QFile::ReadOnly)) + continue; + + const QByteArray source = file.readAll(); + file.close(); + + Document::Ptr doc = Document::create(fileName); + doc->control()->setDiagnosticClient(0); + doc->setSource(source); + doc->parse(); + + ForEachBinaryExpression forEachBinaryExpression(doc, pattern); - QFile in; - if (! in.open(stdin, QFile::ReadOnly)) - return EXIT_FAILURE; - - const QByteArray source = in.readAll(); - - Control control; - StringLiteral *fileId = control.findOrInsertStringLiteral("<stdin>"); - TranslationUnit unit(&control, fileId); - unit.setObjCEnabled(true); - unit.setSource(source.constData(), source.size()); - unit.parse(); - if (! unit.ast()) - return EXIT_FAILURE; - - TranslationUnitAST *ast = unit.ast()->asTranslationUnit(); - Q_ASSERT(ast != 0); - - Namespace *globalNamespace = control.newNamespace(0, 0); - Semantic sem(&control); - for (DeclarationListAST *it = ast->declaration_list; it; it = it->next) { - DeclarationAST *declaration = it->value; - sem.check(declaration, globalNamespace->members()); + forEachBinaryExpression(); } return EXIT_SUCCESS; |