Merge branch '0.9.1-beta'

This commit is contained in:
con
2008-12-03 15:12:55 +01:00
36 changed files with 633 additions and 116 deletions

View File

@@ -236,13 +236,21 @@ bool CheckDeclaration::visit(FunctionDefinitionAST *ast)
_scope->enterSymbol(fun); _scope->enterSymbol(fun);
if (ast->ctor_initializer && (ty.isValid() || (fun->identity() && ! fun->identity()->isNameId()))) { if (ast->ctor_initializer) {
translationUnit()->error(ast->ctor_initializer->firstToken(), bool looksLikeCtor = false;
"only constructors take base initializers"); if (ty.isValid() || ! fun->identity())
looksLikeCtor = false;
else if (fun->identity()->isNameId() || fun->identity()->isTemplateNameId())
looksLikeCtor = true;
if (! looksLikeCtor) {
translationUnit()->error(ast->ctor_initializer->firstToken(),
"only constructors take base initializers");
}
} }
int previousVisibility = semantic()->switchVisibility(Symbol::Public); const int previousVisibility = semantic()->switchVisibility(Symbol::Public);
int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod); const int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
semantic()->check(ast->function_body, fun->members()); semantic()->check(ast->function_body, fun->members());

View File

@@ -221,7 +221,7 @@ void Lexer::scan_helper(Token *tok)
return; return;
} }
char ch = _yychar; unsigned char ch = _yychar;
yyinp(); yyinp();
switch (ch) { switch (ch) {

View File

@@ -132,7 +132,7 @@ private:
const char *_currentChar; const char *_currentChar;
const char *_lastChar; const char *_lastChar;
const char *_tokenStart; const char *_tokenStart;
char _yychar; unsigned char _yychar;
int _state; int _state;
union { union {
unsigned _flags; unsigned _flags;

View File

@@ -146,7 +146,7 @@ unsigned TranslationUnit::matchingBrace(unsigned index) const
MemoryPool *TranslationUnit::memoryPool() const MemoryPool *TranslationUnit::memoryPool() const
{ return _pool; } { return _pool; }
TranslationUnitAST *TranslationUnit::ast() const AST *TranslationUnit::ast() const
{ return _ast; } { return _ast; }
bool TranslationUnit::isTokenized() const bool TranslationUnit::isTokenized() const
@@ -218,17 +218,49 @@ bool TranslationUnit::skipFunctionBody() const
void TranslationUnit::setSkipFunctionBody(bool skipFunctionBody) void TranslationUnit::setSkipFunctionBody(bool skipFunctionBody)
{ _skipFunctionBody = skipFunctionBody; } { _skipFunctionBody = skipFunctionBody; }
void TranslationUnit::parse() bool TranslationUnit::parse(ParseMode mode)
{ {
if (isParsed()) if (isParsed())
return; return false;
if (! isTokenized()) if (! isTokenized())
tokenize(); tokenize();
Parser parser(this); Parser parser(this);
parser.setQtMocRunEnabled(_qtMocRunEnabled); parser.setQtMocRunEnabled(_qtMocRunEnabled);
parser.parseTranslationUnit(_ast);
bool parsed = false;
switch (mode) {
case ParseTranlationUnit: {
TranslationUnitAST *node = 0;
parsed = parser.parseTranslationUnit(node);
_ast = node;
} break;
case ParseDeclaration: {
DeclarationAST *node = 0;
parsed = parser.parseDeclaration(node);
_ast = node;
} break;
case ParseExpression: {
ExpressionAST *node = 0;
parsed = parser.parseExpression(node);
_ast = node;
} break;
case ParseStatement: {
StatementAST *node = 0;
parsed = parser.parseStatement(node);
_ast = node;
} break;
default:
break;
} // switch
return parsed;
} }
void TranslationUnit::pushLineOffset(unsigned offset) void TranslationUnit::pushLineOffset(unsigned offset)

View File

@@ -95,7 +95,7 @@ public:
NumericLiteral *numericLiteral(unsigned index) const; NumericLiteral *numericLiteral(unsigned index) const;
MemoryPool *memoryPool() const; MemoryPool *memoryPool() const;
TranslationUnitAST *ast() const; AST *ast() const;
bool blockErrors(bool block); bool blockErrors(bool block);
@@ -113,7 +113,15 @@ public:
void setSkipFunctionBody(bool skipFunctionBody); void setSkipFunctionBody(bool skipFunctionBody);
bool isParsed() const; bool isParsed() const;
void parse();
enum ParseMode {
ParseTranlationUnit,
ParseDeclaration,
ParseExpression,
ParseStatement
};
bool parse(ParseMode mode = ParseTranlationUnit);
void resetAST(); void resetAST();
void release(); void release();
@@ -169,7 +177,7 @@ private:
std::vector<unsigned> _lineOffsets; std::vector<unsigned> _lineOffsets;
std::vector<PPLine> _ppLines; std::vector<PPLine> _ppLines;
MemoryPool *_pool; MemoryPool *_pool;
TranslationUnitAST *_ast; AST *_ast;
TranslationUnit *_previousTranslationUnit; TranslationUnit *_previousTranslationUnit;
union { union {
unsigned _flags; unsigned _flags;

View File

@@ -251,9 +251,31 @@ QSet<QByteArray> Document::macroNames() const
return _macroNames; return _macroNames;
} }
void Document::parse() bool Document::parse(ParseMode mode)
{ {
_translationUnit->parse(); TranslationUnit::ParseMode m = TranslationUnit::ParseTranlationUnit;
switch (mode) {
case ParseTranlationUnit:
m = TranslationUnit::ParseTranlationUnit;
break;
case ParseDeclaration:
m = TranslationUnit::ParseDeclaration;
break;
case ParseExpression:
m = TranslationUnit::ParseExpression;
break;
case ParseStatement:
m = TranslationUnit::ParseStatement;
break;
default:
break;
}
return _translationUnit->parse(m);
} }
void Document::check() void Document::check()
@@ -264,7 +286,10 @@ void Document::check()
_globalNamespace = _control->newNamespace(0); _globalNamespace = _control->newNamespace(0);
Scope *globals = _globalNamespace->members(); Scope *globals = _globalNamespace->members();
if (TranslationUnitAST *ast = _translationUnit->ast()) { if (! _translationUnit->ast())
return; // nothing to do.
if (TranslationUnitAST *ast = _translationUnit->ast()->asTranslationUnit()) {
for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) { for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) {
semantic.check(decl, globals); semantic.check(decl, globals);
} }

View File

@@ -85,7 +85,14 @@ public:
void startSkippingBlocks(unsigned offset); void startSkippingBlocks(unsigned offset);
void stopSkippingBlocks(unsigned offset); void stopSkippingBlocks(unsigned offset);
void parse(); // ### remove enum ParseMode { // ### keep in sync with CPlusPlus::TranslationUnit
ParseTranlationUnit,
ParseDeclaration,
ParseExpression,
ParseStatement
};
bool parse(ParseMode mode = ParseTranlationUnit);
void check(); void check();
void releaseTranslationUnit(); void releaseTranslationUnit();

View File

@@ -81,34 +81,18 @@ ExpressionAST *TypeOfExpression::expressionAST() const
ExpressionAST *TypeOfExpression::extractExpressionAST(Document::Ptr doc) const ExpressionAST *TypeOfExpression::extractExpressionAST(Document::Ptr doc) const
{ {
TranslationUnitAST *translationUnitAST = doc->translationUnit()->ast(); if (! doc->translationUnit()->ast())
return 0;
// ### evaluate the expression return doc->translationUnit()->ast()->asExpression();
ExpressionAST *expressionAST = 0;
if (translationUnitAST) {
DeclarationAST *declaration = translationUnitAST->declarations;
SimpleDeclarationAST *simpleDecl = 0;
if (declaration)
simpleDecl = declaration->asSimpleDeclaration();
if (simpleDecl && simpleDecl->decl_specifier_seq) {
if (TypeofSpecifierAST *typeOfSpec = simpleDecl->decl_specifier_seq->asTypeofSpecifier())
expressionAST = typeOfSpec->expression;
}
}
return expressionAST;
} }
Document::Ptr TypeOfExpression::documentForExpression(const QString &expression) const Document::Ptr TypeOfExpression::documentForExpression(const QString &expression) const
{ {
// create a __typeof__ specifier
QByteArray declaration;
declaration += "__typeof__ ";
declaration += expression.toLatin1(); // C++ code needs to be in latin1
declaration += ";";
// create the expression's AST. // create the expression's AST.
Document::Ptr doc = Document::create(QLatin1String("<completion>")); Document::Ptr doc = Document::create(QLatin1String("<completion>"));
doc->setSource(declaration); const QByteArray bytes = expression.toUtf8();
doc->parse(); doc->setSource(bytes);
doc->parse(Document::ParseExpression);
return doc; return doc;
} }

View File

@@ -0,0 +1,91 @@
#include "cmakestep.h"
#include "cmakeprojectconstants.h"
#include "cmakeproject.h"
using namespace CMakeProjectManager;
using namespace CMakeProjectManager::Internal;
CMakeStep::CMakeStep(CMakeProject *pro)
: BuildStep(pro), m_pro(pro)
{
}
CMakeStep::~CMakeStep()
{
}
bool CMakeStep::init(const QString &buildConfiguration)
{
// TODO
return true;
}
void CMakeStep::run(QFutureInterface<bool> &fi)
{
// TODO
fi.reportResult(true);
}
QString CMakeStep::name()
{
return "CMake";
}
QString CMakeStep::displayName()
{
return Constants::CMAKESTEP;
}
ProjectExplorer::BuildStepConfigWidget *CMakeStep::createConfigWidget()
{
return new CMakeBuildStepConfigWidget();
}
bool CMakeStep::immutable() const
{
return true;
}
//
// CMakeBuildStepConfigWidget
//
QString CMakeBuildStepConfigWidget::displayName() const
{
return "CMake";
}
void CMakeBuildStepConfigWidget::init(const QString &buildConfiguration)
{
// TODO
}
//
// CMakeBuildStepFactory
//
bool CMakeBuildStepFactory::canCreate(const QString &name) const
{
return (Constants::CMAKESTEP == name);
}
ProjectExplorer::BuildStep *CMakeBuildStepFactory::create(ProjectExplorer::Project *project, const QString &name) const
{
Q_ASSERT(name == Constants::CMAKESTEP);
CMakeProject *pro = qobject_cast<CMakeProject *>(project);
Q_ASSERT(pro);
return new CMakeStep(pro);
}
QStringList CMakeBuildStepFactory::canCreateForProject(ProjectExplorer::Project *pro) const
{
return QStringList();
}
QString CMakeBuildStepFactory::displayNameForName(const QString &name) const
{
return "CMake";
}

View File

@@ -0,0 +1,48 @@
#ifndef CMAKESTEP_H
#define CMAKESTEP_H
#include <projectexplorer/buildstep.h>
namespace CMakeProjectManager {
namespace Internal {
class CMakeProject;
class CMakeBuildStepConfigWidget;
class CMakeStep : public ProjectExplorer::BuildStep
{
public:
CMakeStep(CMakeProject *pro);
~CMakeStep();
virtual bool init(const QString &buildConfiguration);
virtual void run(QFutureInterface<bool> &fi);
virtual QString name();
virtual QString displayName();
virtual ProjectExplorer::BuildStepConfigWidget *createConfigWidget();
virtual bool immutable() const;
private:
CMakeProject *m_pro;
};
class CMakeBuildStepConfigWidget :public ProjectExplorer::BuildStepConfigWidget
{
public:
virtual QString displayName() const;
virtual void init(const QString &buildConfiguration);
};
class CMakeBuildStepFactory : public ProjectExplorer::IBuildStepFactory
{
virtual bool canCreate(const QString &name) const;
virtual ProjectExplorer::BuildStep *create(ProjectExplorer::Project *pro, const QString &name) const;
virtual QStringList canCreateForProject(ProjectExplorer::Project *pro) const;
virtual QString displayNameForName(const QString &name) const;
};
}
}
#endif // CMAKESTEP_H

View File

@@ -342,13 +342,6 @@ EditorManager::EditorManager(ICore *core, QWidget *parent) :
updateActions(); updateActions();
m_d->m_windowPopup = new OpenEditorsWindow(this); m_d->m_windowPopup = new OpenEditorsWindow(this);
#ifdef Q_OS_MAC
m_d->m_externalEditor = m_d->m_core->resourcePath()
+QLatin1String("/runInTerminal.command vi %f %l %c %W %H %x %y");
#elif defined(Q_OS_UNIX)
m_d->m_externalEditor = QLatin1String("xterm -geom %Wx%H+%x+%y -e vi %f +%l +\"normal %c|\"");
#endif
} }
EditorManager::~EditorManager() EditorManager::~EditorManager()
@@ -381,6 +374,20 @@ QSize EditorManager::minimumSizeHint() const
return QSize(400, 300); return QSize(400, 300);
} }
QString EditorManager::defaultExternalEditor() const
{
#ifdef Q_OS_MAC
return m_d->m_core->resourcePath()
+QLatin1String("/runInTerminal.command vi %f %l %c %W %H %x %y");
#elif defined(Q_OS_UNIX)
return QLatin1String("xterm -geom %Wx%H+%x+%y -e vi %f +%l +\"normal %c|\"");
#elif defined (Q_OS_WIN)
return QLatin1String("notepad %f");
#else
return QString();
#endif
}
EditorSplitter *EditorManager::editorSplitter() const EditorSplitter *EditorManager::editorSplitter() const
{ {
return m_d->m_splitter; return m_d->m_splitter;
@@ -1153,7 +1160,7 @@ void EditorManager::updateActions()
m_d->m_duplicateAction->setEnabled(curEditor != 0 && curEditor->duplicateSupported()); m_d->m_duplicateAction->setEnabled(curEditor != 0 && curEditor->duplicateSupported());
m_d->m_openInExternalEditorAction->setEnabled(curEditor != 0 && !m_d->m_externalEditor.isEmpty()); m_d->m_openInExternalEditorAction->setEnabled(curEditor != 0);
} }
QList<IEditor*> EditorManager::openedEditors() const QList<IEditor*> EditorManager::openedEditors() const
@@ -1364,7 +1371,7 @@ void EditorManager::saveSettings(QSettings *settings)
m_d->m_splitter->saveSettings(settings); m_d->m_splitter->saveSettings(settings);
settings->setValue(QLatin1String("EditorManager/DocumentStates"), settings->setValue(QLatin1String("EditorManager/DocumentStates"),
m_d->m_editorStates); m_d->m_editorStates);
settings->setValue(QLatin1String("EditorManager/ExternalEditor"), settings->setValue(QLatin1String("EditorManager/ExternalEditorCommand"),
m_d->m_externalEditor); m_d->m_externalEditor);
} }
@@ -1375,7 +1382,7 @@ void EditorManager::readSettings(QSettings *settings)
m_d->m_editorStates = settings->value(QLatin1String("EditorManager/DocumentStates")) m_d->m_editorStates = settings->value(QLatin1String("EditorManager/DocumentStates"))
.value<QMap<QString, QVariant> >(); .value<QMap<QString, QVariant> >();
if (settings->contains(QLatin1String("EditorManager/ExternalEditor"))) if (settings->contains(QLatin1String("EditorManager/ExternalEditor")))
m_d->m_externalEditor = settings->value(QLatin1String("EditorManager/ExternalEditor")).toString(); m_d->m_externalEditor = settings->value(QLatin1String("EditorManager/ExternalEditorCommand")).toString();
} }
QByteArray EditorManager::saveOpenEditorList() const QByteArray EditorManager::saveOpenEditorList() const
@@ -1489,7 +1496,11 @@ QString EditorManager::externalEditorHelpText() const
void EditorManager::openInExternalEditor() void EditorManager::openInExternalEditor()
{ {
if (m_d->m_externalEditor.isEmpty()) QString command = m_d->m_externalEditor;
if (command.isEmpty())
command = defaultExternalEditor();
if (command.isEmpty())
return; return;
IEditor *editor = currentEditor(); IEditor *editor = currentEditor();
@@ -1508,7 +1519,7 @@ void EditorManager::openInExternalEditor()
QFontMetrics fm(font); QFontMetrics fm(font);
rect.moveTo(editor->widget()->mapToGlobal(QPoint(0,0))); rect.moveTo(editor->widget()->mapToGlobal(QPoint(0,0)));
QString pre = m_d->m_externalEditor; QString pre = command;
QString cmd; QString cmd;
for (int i = 0; i < pre.size(); ++i) { for (int i = 0; i < pre.size(); ++i) {
QChar c = pre.at(i); QChar c = pre.at(i);
@@ -1551,11 +1562,16 @@ void EditorManager::openInExternalEditor()
void EditorManager::setExternalEditor(const QString &editor) void EditorManager::setExternalEditor(const QString &editor)
{ {
m_d->m_externalEditor = editor; if (editor.isEmpty() || editor == defaultExternalEditor())
m_d->m_externalEditor = defaultExternalEditor();
else
m_d->m_externalEditor = editor;
} }
QString EditorManager::externalEditor() const QString EditorManager::externalEditor() const
{ {
if (m_d->m_externalEditor.isEmpty())
return defaultExternalEditor();
return m_d->m_externalEditor; return m_d->m_externalEditor;
} }

View File

@@ -156,6 +156,7 @@ public:
void setExternalEditor(const QString &); void setExternalEditor(const QString &);
QString externalEditor() const; QString externalEditor() const;
QString defaultExternalEditor() const;
QString externalEditorHelpText() const; QString externalEditorHelpText() const;
signals: signals:

View File

@@ -72,6 +72,8 @@ QWidget* GeneralSettings::createPage(QWidget *parent)
connect(m_page->resetButton, SIGNAL(clicked()), connect(m_page->resetButton, SIGNAL(clicked()),
this, SLOT(resetInterfaceColor())); this, SLOT(resetInterfaceColor()));
connect(m_page->resetEditorButton, SIGNAL(clicked()),
this, SLOT(resetExternalEditor()));
connect(m_page->helpExternalEditorButton, SIGNAL(clicked()), connect(m_page->helpExternalEditorButton, SIGNAL(clicked()),
this, SLOT(showHelpForExternalEditor())); this, SLOT(showHelpForExternalEditor()));
@@ -95,6 +97,10 @@ void GeneralSettings::resetInterfaceColor()
m_page->colorButton->setColor(0x666666); m_page->colorButton->setColor(0x666666);
} }
void GeneralSettings::resetExternalEditor()
{
m_page->externalEditorEdit->setText(EditorManager::instance()->defaultExternalEditor());
}
void GeneralSettings::showHelpForExternalEditor() void GeneralSettings::showHelpForExternalEditor()
{ {

View File

@@ -59,6 +59,7 @@ public:
private slots: private slots:
void resetInterfaceColor(); void resetInterfaceColor();
void resetExternalEditor();
void showHelpForExternalEditor(); void showHelpForExternalEditor();
private: private:

View File

@@ -108,6 +108,20 @@
<item> <item>
<widget class="QLineEdit" name="externalEditorEdit"/> <widget class="QLineEdit" name="externalEditorEdit"/>
</item> </item>
<item>
<widget class="QToolButton" name="resetEditorButton">
<property name="toolTip">
<string>Reset to default</string>
</property>
<property name="text">
<string>...</string>
</property>
<property name="icon">
<iconset resource="core.qrc">
<normaloff>:/qworkbench/images/reset.png</normaloff>:/qworkbench/images/reset.png</iconset>
</property>
</widget>
</item>
<item> <item>
<widget class="QToolButton" name="helpExternalEditorButton"> <widget class="QToolButton" name="helpExternalEditorButton">
<property name="text"> <property name="text">

View File

@@ -585,15 +585,19 @@ void pp::operator()(const QByteArray &source, QByteArray *result)
} else { } else {
if (! m->function_like) { if (! m->function_like) {
if (_dot->isNot(T_LPAREN)) { if (_dot->isNot(T_LPAREN)) {
m->hidden = true;
expand(m->definition.constBegin(), expand(m->definition.constBegin(),
m->definition.constEnd(), m->definition.constEnd(),
result); result);
m->hidden = false;
continue; continue;
} else { } else {
QByteArray tmp; QByteArray tmp;
m->hidden = true;
expand(m->definition.constBegin(), expand(m->definition.constBegin(),
m->definition.constEnd(), m->definition.constEnd(),
&tmp); &tmp);
m->hidden = false;
m = 0; // reset the active the macro m = 0; // reset the active the macro
@@ -636,7 +640,9 @@ void pp::operator()(const QByteArray &source, QByteArray *result)
const char *beginOfText = startOfToken(*identifierToken); const char *beginOfText = startOfToken(*identifierToken);
const char *endOfText = endOfToken(*_dot); const char *endOfText = endOfToken(*_dot);
++_dot; // skip T_RPAREN ++_dot; // skip T_RPAREN
//m->hidden = true;
expand(beginOfText, endOfText, result); expand(beginOfText, endOfText, result);
//m->hidden = false;
} }
} }
} }

View File

@@ -791,6 +791,11 @@ bool DebuggerManager::startNewDebugger(StartMode mode)
m_processArgs = QStringList(); m_processArgs = QStringList();
m_workingDir = QString(); m_workingDir = QString();
m_attachedPID = dlg.attachPID(); m_attachedPID = dlg.attachPID();
if (m_attachedPID == 0) {
QMessageBox::warning(mainWindow(), tr("Warning"),
tr("Cannot attach to PID 0"));
return false;
}
} else if (startMode() == startInternal) { } else if (startMode() == startInternal) {
if (m_executable.isEmpty()) { if (m_executable.isEmpty()) {
QString startDirectory = m_executable; QString startDirectory = m_executable;

View File

@@ -1650,16 +1650,15 @@ bool GdbEngine::startDebugger()
#ifdef Q_OS_MAC #ifdef Q_OS_MAC
sendCommand("-gdb-set inferior-auto-start-cfm off"); sendCommand("-gdb-set inferior-auto-start-cfm off");
sendCommand("-gdb-set sharedLibrary load-rules " sendCommand("-gdb-set sharedLibrary load-rules "
"dyld \".*libSystem.*\" " "dyld \".*libSystem.*\" all "
"all dyld \".*libauto.*\" " "dyld \".*libauto.*\" all "
"all dyld \".*AppKit.*\" " "dyld \".*AppKit.*\" all "
"all dyld \".*PBGDBIntrospectionSupport.*\" " "dyld \".*PBGDBIntrospectionSupport.*\" all "
"all dyld \".*Foundation.*\" " "dyld \".*Foundation.*\" all "
"all dyld \".*CFDataFormatters.*\" " "dyld \".*CFDataFormatters.*\" all "
"all dyld \".*libobjc.*\" " "dyld \".*libobjc.*\" all "
"all dyld \".*CarbonDataFormatters"); "dyld \".*CarbonDataFormatters.*\" all");
#endif #endif
if (q->startMode() == q->attachExternal) { if (q->startMode() == q->attachExternal) {
sendCommand("attach " + QString::number(q->m_attachedPID)); sendCommand("attach " + QString::number(q->m_attachedPID));
} }

View File

@@ -170,7 +170,7 @@ void GitClient::diff(const QString &workingDirectory, const QStringList &fileNam
if (Git::Constants::debug) if (Git::Constants::debug)
qDebug() << "diff" << workingDirectory << fileNames; qDebug() << "diff" << workingDirectory << fileNames;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("diff") << fileNames; arguments << QLatin1String("diff") << QLatin1String("--") << fileNames;
const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND); const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND);
const QString title = tr("Git Diff"); const QString title = tr("Git Diff");
@@ -187,7 +187,7 @@ void GitClient::diff(const QString &workingDirectory, const QString &fileName)
QStringList arguments; QStringList arguments;
arguments << QLatin1String("diff"); arguments << QLatin1String("diff");
if (!fileName.isEmpty()) if (!fileName.isEmpty())
arguments << fileName; arguments << QLatin1String("--") << fileName;
const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND); const QString kind = QLatin1String(Git::Constants::GIT_DIFF_EDITOR_KIND);
const QString title = tr("Git Diff %1").arg(fileName); const QString title = tr("Git Diff %1").arg(fileName);
@@ -246,7 +246,7 @@ void GitClient::blame(const QString &workingDirectory, const QString &fileName)
if (Git::Constants::debug) if (Git::Constants::debug)
qDebug() << "blame" << workingDirectory << fileName; qDebug() << "blame" << workingDirectory << fileName;
QStringList arguments(QLatin1String("blame")); QStringList arguments(QLatin1String("blame"));
arguments << fileName; arguments << QLatin1String("--") << fileName;
const QString kind = QLatin1String(Git::Constants::GIT_BLAME_EDITOR_KIND); const QString kind = QLatin1String(Git::Constants::GIT_BLAME_EDITOR_KIND);
const QString title = tr("Git Blame %1").arg(fileName); const QString title = tr("Git Blame %1").arg(fileName);
@@ -314,7 +314,7 @@ bool GitClient::synchronousReset(const QString &workingDirectory,
QByteArray outputText; QByteArray outputText;
QByteArray errorText; QByteArray errorText;
QStringList arguments; QStringList arguments;
arguments << QLatin1String("reset") << QLatin1String("HEAD") << files; arguments << QLatin1String("reset") << QLatin1String("HEAD") << QLatin1String("--") << files;
const bool rc = synchronousGit(workingDirectory, arguments, &outputText, &errorText); const bool rc = synchronousGit(workingDirectory, arguments, &outputText, &errorText);
const QString output = QString::fromLocal8Bit(outputText); const QString output = QString::fromLocal8Bit(outputText);
m_plugin->m_outputWindow->popup(false); m_plugin->m_outputWindow->popup(false);
@@ -643,9 +643,9 @@ GitCommand::~GitCommand()
{ {
} }
void GitCommand::execute(const QStringList &arguments void GitCommand::execute(const QStringList &arguments,
, const QString &workingDirectory const QString &workingDirectory,
, const ProjectExplorer::Environment &environment) const ProjectExplorer::Environment &environment)
{ {
if (Git::Constants::debug) if (Git::Constants::debug)
qDebug() << "GitCommand::execute" << workingDirectory << arguments; qDebug() << "GitCommand::execute" << workingDirectory << arguments;
@@ -663,9 +663,9 @@ void GitCommand::execute(const QStringList &arguments
, Core::ProgressManagerInterface::CloseOnSuccess); , Core::ProgressManagerInterface::CloseOnSuccess);
} }
void GitCommand::run(const QStringList &arguments void GitCommand::run(const QStringList &arguments,
, const QString &workingDirectory const QString &workingDirectory,
, const ProjectExplorer::Environment &environment) const ProjectExplorer::Environment &environment)
{ {
if (Git::Constants::debug) if (Git::Constants::debug)
qDebug() << "GitCommand::run" << workingDirectory << arguments; qDebug() << "GitCommand::run" << workingDirectory << arguments;

View File

@@ -57,9 +57,9 @@ GitSubmitEditorPanelData GitSubmitEditorWidget::panelData() const
rc.author = m_gitSubmitPanelUi.authorLineEdit->text(); rc.author = m_gitSubmitPanelUi.authorLineEdit->text();
rc.email = m_gitSubmitPanelUi.emailLineEdit->text(); rc.email = m_gitSubmitPanelUi.emailLineEdit->text();
return rc; return rc;
}; }
void GitSubmitEditorWidget::setPanelData(const GitSubmitEditorPanelData &data) void GitSubmitEditorWidget::setPanelData(const GitSubmitEditorPanelData &data)
{ {
m_gitSubmitPanelUi.authorLineEdit->setText(data.author); m_gitSubmitPanelUi.authorLineEdit->setText(data.author);
m_gitSubmitPanelUi.emailLineEdit->setText(data.email); m_gitSubmitPanelUi.emailLineEdit->setText(data.email);

View File

@@ -11,6 +11,9 @@
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout"> <layout class="QVBoxLayout" name="verticalLayout">
<property name="margin">
<number>0</number>
</property>
<item> <item>
<widget class="QGroupBox" name="infoGroup"> <widget class="QGroupBox" name="infoGroup">
<property name="title"> <property name="title">

View File

@@ -0,0 +1,104 @@
/***************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Qt Software Information (qt-info@nokia.com)
**
**
** Non-Open Source Usage
**
** Licensees may use this file in accordance with the Qt Beta Version
** License Agreement, Agreement version 2.2 provided with the Software or,
** alternatively, in accordance with the terms contained in a written
** agreement between you and Nokia.
**
** GNU General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU General
** Public License versions 2.0 or 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the packaging
** of this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
**
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
** http://www.gnu.org/copyleft/gpl.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt GPL Exception
** version 1.2, included in the file GPL_EXCEPTION.txt in this package.
**
***************************************************************************/
#include "gitversioncontrol.h"
#include "gitclient.h"
namespace Git {
namespace Internal {
GitVersionControl::GitVersionControl(GitClient *client) :
m_enabled(true),
m_client(client)
{
}
QString GitVersionControl::name() const
{
return QLatin1String("git");
}
bool GitVersionControl::isEnabled() const
{
return m_enabled;
}
void GitVersionControl::setEnabled(bool enabled)
{
if (m_enabled != enabled) {
m_enabled = enabled;
emit enabledChanged(m_enabled);
}
}
bool GitVersionControl::supportsOperation(Operation operation) const
{
bool rc = false;
switch (operation) {
case AddOperation:
case DeleteOperation:
case OpenOperation:
break;
}
return rc;
}
bool GitVersionControl::vcsOpen(const QString & /*fileName*/)
{
return false;
}
bool GitVersionControl::vcsAdd(const QString & /*fileName*/)
{
return false;
}
bool GitVersionControl::vcsDelete(const QString & /*fileName*/)
{
// TODO: implement using 'git rm'.
return false;
}
bool GitVersionControl::managesDirectory(const QString &directory) const
{
return !GitClient::findRepositoryForDirectory(directory).isEmpty();
}
QString GitVersionControl::findTopLevelForDirectory(const QString &directory) const
{
return GitClient::findRepositoryForDirectory(directory);
}
} // Internal
} // Git

View File

@@ -0,0 +1,75 @@
/***************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Qt Software Information (qt-info@nokia.com)
**
**
** Non-Open Source Usage
**
** Licensees may use this file in accordance with the Qt Beta Version
** License Agreement, Agreement version 2.2 provided with the Software or,
** alternatively, in accordance with the terms contained in a written
** agreement between you and Nokia.
**
** GNU General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU General
** Public License versions 2.0 or 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the packaging
** of this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
**
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
** http://www.gnu.org/copyleft/gpl.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt GPL Exception
** version 1.2, included in the file GPL_EXCEPTION.txt in this package.
**
***************************************************************************/
#ifndef GITVERSIONCONTROL_H
#define GITVERSIONCONTROL_H
#include <coreplugin/iversioncontrol.h>
namespace Git {
namespace Internal {
class GitClient;
// Just a proxy for GitPlugin
class GitVersionControl : public Core::IVersionControl
{
Q_OBJECT
public:
explicit GitVersionControl(GitClient *plugin);
virtual QString name() const;
virtual bool isEnabled() const;
virtual void setEnabled(bool enabled);
bool managesDirectory(const QString &directory) const;
virtual QString findTopLevelForDirectory(const QString &directory) const;
virtual bool supportsOperation(Operation operation) const;
virtual bool vcsOpen(const QString &fileName);
virtual bool vcsAdd(const QString &fileName);
virtual bool vcsDelete(const QString &filename);
signals:
void enabledChanged(bool);
private:
bool m_enabled;
GitClient *m_client;
};
} // Internal
} // Git
#endif // GITVERSIONCONTROL_H

View File

@@ -685,28 +685,19 @@ void ProjectExplorerPlugin::loadAction()
updateActions(); updateActions();
} }
bool ProjectExplorerPlugin::saveAction(Project *pro) void ProjectExplorerPlugin::unloadProject()
{ {
if (debug) if (debug)
qDebug() << "ProjectExplorerPlugin::saveAction"; qDebug() << "ProjectExplorerPlugin::unloadProject";
if (!pro) Core::IFile *fi = m_currentProject->file();
pro = m_currentProject;
Q_ASSERT(pro);
Core::IFile *fi = pro->file();
if (!fi) // TODO Why saving the session here????
fi = m_session->file();
if (!fi || fi->fileName().isEmpty()) //nothing to save? if (!fi || fi->fileName().isEmpty()) //nothing to save?
return false; return;
QList<Core::IFile*> filesToSave; QList<Core::IFile*> filesToSave;
filesToSave << fi; filesToSave << fi;
if (pro) filesToSave << m_currentProject->dependencies();
filesToSave << pro->dependencies();
// check the number of modified files // check the number of modified files
int readonlycount = 0; int readonlycount = 0;
@@ -721,20 +712,10 @@ bool ProjectExplorerPlugin::saveAction(Project *pro)
else else
success = m_core->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty(); success = m_core->fileManager()->saveModifiedFilesSilently(filesToSave).isEmpty();
if (success) if (!success)
addToRecentProjects(fi->fileName());
updateActions();
return success;
}
void ProjectExplorerPlugin::unloadProject()
{
if (debug)
qDebug() << "ProjectExplorerPlugin::unloadProject";
if (!saveAction(m_currentProject))
return; return;
addToRecentProjects(fi->fileName());
m_session->removeProject(m_currentProject); m_session->removeProject(m_currentProject);
updateActions(); updateActions();
} }

View File

@@ -139,7 +139,6 @@ private slots:
void cancelBuild(); void cancelBuild();
void debugProject(); void debugProject();
void editDependencies(); void editDependencies();
bool saveAction(ProjectExplorer::Project *pro = 0);
void loadAction(); void loadAction();
void unloadProject(); void unloadProject();
void clearSession(); void clearSession();

View File

@@ -939,6 +939,7 @@ void SessionManager::removeProjects(QList<Project *> remove)
// Delete projects // Delete projects
foreach (Project *pro, remove) { foreach (Project *pro, remove) {
pro->saveSettings();
m_file->m_projects.removeOne(pro); m_file->m_projects.removeOne(pro);
if (pro == m_file->m_startupProject) if (pro == m_file->m_startupProject)

View File

@@ -69,7 +69,7 @@ bool ProFileReader::readProFile(const QString &fileName)
// return false; // return false;
// } // }
// } // }
QString fn = QFileInfo(fileName).filePath(); QString fn = QFileInfo(fileName).filePath();
ProFile *pro = new ProFile(fn); ProFile *pro = new ProFile(fn);
if (!queryProFile(pro)) { if (!queryProFile(pro)) {
delete pro; delete pro;

View File

@@ -33,7 +33,6 @@
#include "proeditormodel.h" #include "proeditormodel.h"
#include "profilecache.h"
#include "profilereader.h" #include "profilereader.h"
#include "prowriter.h" #include "prowriter.h"
#include "qt4nodes.h" #include "qt4nodes.h"
@@ -884,12 +883,12 @@ QStringList Qt4ProFileNode::subDirsPaths(ProFileReader *reader) const
QString realFile; QString realFile;
const QString subDirKey = subDirVar + QLatin1String(".subdir"); const QString subDirKey = subDirVar + QLatin1String(".subdir");
if (reader->contains(subDirKey)) if (reader->contains(subDirKey))
realDir = reader->value(subDirKey); realDir = QFileInfo(reader->value(subDirKey)).filePath();
else else
realDir = subDirVar; realDir = subDirVar;
QFileInfo info(realDir); QFileInfo info(realDir);
if (!info.isAbsolute()) if (!info.isAbsolute())
realDir = QString("%1/%2").arg(m_projectDir, realDir); realDir = m_projectDir + "/" + realDir;
#ifdef QTEXTENDED_QBUILD_SUPPORT #ifdef QTEXTENDED_QBUILD_SUPPORT
// QBuild only uses project files named qbuild.pro, and subdirs are implied // QBuild only uses project files named qbuild.pro, and subdirs are implied

View File

@@ -69,7 +69,7 @@ void BaseAnnotationHighlighter::setChangeNumbers(const ChangeNumbers &changeNumb
// Assign a color gradient to annotation change numbers. Give // Assign a color gradient to annotation change numbers. Give
// each change number a unique color. // each change number a unique color.
const double oneThird = 1.0 / 3.0; const double oneThird = 1.0 / 3.0;
const int step = qRound(ceil(pow(changeNumbers.count(), oneThird))); const int step = qRound(ceil(pow(double(changeNumbers.count()), oneThird)));
QList<QColor> colors; QList<QColor> colors;
const int factor = 255 / step; const int factor = 255 / step;
for (int i=0; i<step; ++i) for (int i=0; i<step; ++i)

View File

@@ -240,7 +240,7 @@ bool VCSBaseSubmitEditor::restoreState(const QByteArray &/*state*/)
return true; return true;
} }
QStringList VCSBaseSubmitEditor::checkedFiles() const QStringList VCSBaseSubmitEditor::checkedFiles() const
{ {
return vcsFileListToFileList(m_d->m_widget->checkedFiles()); return vcsFileListToFileList(m_d->m_widget->checkedFiles());
} }
@@ -255,7 +255,7 @@ void VCSBaseSubmitEditor::addFiles(const QStringList& list, bool checked, bool u
m_d->m_widget->addFiles(list, checked, userCheckable); m_d->m_widget->addFiles(list, checked, userCheckable);
} }
void VCSBaseSubmitEditor::slotDiffSelectedVCSFiles(const QStringList &rawList) void VCSBaseSubmitEditor::slotDiffSelectedVCSFiles(const QStringList &rawList)
{ {
emit diffSelectedFiles(vcsFileListToFileList(rawList)); emit diffSelectedFiles(vcsFileListToFileList(rawList));
} }
@@ -299,4 +299,4 @@ QIcon VCSBaseSubmitEditor::submitIcon()
return QIcon(QLatin1String(":/vcsbase/images/submit.png")); return QIcon(QLatin1String(":/vcsbase/images/submit.png"));
} }
} } // namespace VCSBase

View File

@@ -39,3 +39,14 @@ DEPENDPATH += \
$$IDE_SOURCE_TREE/tools \ $$IDE_SOURCE_TREE/tools \
LIBS += -L$$IDE_LIBRARY_PATH LIBS += -L$$IDE_LIBRARY_PATH
unix {
debug:OBJECTS_DIR = $${OUT_PWD}/.obj/debug-shared
release:OBJECTS_DIR = $${OUT_PWD}/.obj/release-shared
debug:MOC_DIR = $${OUT_PWD}/.moc/debug-shared
release:MOC_DIR = $${OUT_PWD}/.moc/release-shared
RCC_DIR = $${OUT_PWD}/.rcc/
UI_DIR = $${OUT_PWD}/.uic/
}

View File

@@ -47,11 +47,4 @@ macx {
} }
unix {
OBJECTS_DIR = $${OUT_PWD}/.obj/
MOC_DIR = $${OUT_PWD}/.moc/
RCC_DIR = $${OUT_PWD}/.rcc/
UI_DIR = $${OUT_PWD}/.uic/
}
contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols

3
tests/manual/cplusplus/c++ Executable file
View File

@@ -0,0 +1,3 @@
#!/bin/sh
me=$(dirname $0)
${CPP-gcc} -xc++ -E -include $me/conf.c++ $* | $me/cplusplus0

View File

@@ -0,0 +1,7 @@
#define __extension__
#define __context__
#define __range__
#define __asm(a...)
#define __asm__(a...)
#define restrict
#define __restrict

View File

@@ -0,0 +1,19 @@
QT = core
macx:CONFIG -= app_bundle
TARGET = cplusplus0
include(../../../shared/cplusplus/cplusplus.pri)
# Input
SOURCES += main.cpp
unix {
debug:OBJECTS_DIR = $${OUT_PWD}/.obj/debug-shared
release:OBJECTS_DIR = $${OUT_PWD}/.obj/release-shared
debug:MOC_DIR = $${OUT_PWD}/.moc/debug-shared
release:MOC_DIR = $${OUT_PWD}/.moc/release-shared
RCC_DIR = $${OUT_PWD}/.rcc/
UI_DIR = $${OUT_PWD}/.uic/
}

View File

@@ -0,0 +1,71 @@
/***************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Qt Software Information (qt-info@nokia.com)
**
**
** Non-Open Source Usage
**
** Licensees may use this file in accordance with the Qt Beta Version
** License Agreement, Agreement version 2.2 provided with the Software or,
** alternatively, in accordance with the terms contained in a written
** agreement between you and Nokia.
**
** GNU General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU General
** Public License versions 2.0 or 3.0 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the packaging
** of this file. Please review the following information to ensure GNU
** General Public Licensing requirements will be met:
**
** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
** http://www.gnu.org/copyleft/gpl.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights. These rights are described in the Nokia Qt GPL Exception
** version 1.2, included in the file GPL_EXCEPTION.txt in this package.
**
***************************************************************************/
#include <QFile>
#include <cstdio>
#include <cstdlib>
#include <TranslationUnit.h>
#include <Control.h>
#include <AST.h>
#include <Semantic.h>
#include <Scope.h>
int main(int, char *[])
{
Control control;
StringLiteral *fileId = control.findOrInsertFileName("<stdin>");
QFile in;
if (! in.open(stdin, QFile::ReadOnly))
return EXIT_FAILURE;
const QByteArray source = in.readAll();
TranslationUnit unit(&control, fileId);
unit.setSource(source.constData(), source.size());
unit.parse();
if (unit.ast()) {
TranslationUnitAST *ast = unit.ast()->asTranslationUnit();
Q_ASSERT(ast != 0);
Scope globalScope;
Semantic sem(&control);
for (DeclarationAST *decl = ast->declarations; decl; decl = decl->next) {
sem.check(decl, &globalScope);
}
}
return EXIT_SUCCESS;
}