summaryrefslogtreecommitdiff
path: root/tests/manual/cplusplus
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/cplusplus')
-rwxr-xr-xtests/manual/cplusplus/c++4
-rw-r--r--tests/manual/cplusplus/conf.c++2
-rw-r--r--tests/manual/cplusplus/cplusplus.pro4
-rw-r--r--tests/manual/cplusplus/main.cpp83
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;