[kdevelop-pg-qt] pull in upstream commits, .spec cleanup

Rex Dieter rdieter at fedoraproject.org
Wed Jun 11 03:21:47 UTC 2014


commit a5a6c56576f159636b37ed4ab088e8d759f30b85
Author: Rex Dieter <rdieter at math.unl.edu>
Date:   Tue Jun 10 22:21:47 2014 -0500

    pull in upstream commits, .spec cleanup

 ...t-LIB_INSTALL_DIR-even-with-no-KDE4-stuff.patch |   24 +
 0002-Some-std-string-support-in-iterators.patch    |  117 +
 0003-bugfix-inserting-user-generated-code.patch    |   27 +
 ...add-CTest-CDash-config-for-KDevelop-PG-Qt.patch |   80 +
 0005-force-building-of-unit-tests.patch            |   24 +
 ...it-array-implementation-and-replaced-vect.patch |  324 +++
 ...handling-of-overflows-in-TokenStream-read.patch |   62 +
 0009-Updated-generated-files.patch                 | 2327 ++++++++++++++++++++
 0010-version-strings.patch                         |   50 +
 0011-fix-some-warnings.patch                       |   53 +
 0012-updated-generated-files.patch                 |   39 +
 0013-Fix-some-clang-compiler-warnings.patch        |   48 +
 ...e-with-clang-also-enable-exceptions-there.patch |   29 +
 ...11-std-c-0x-to-fix-build-on-build.kde.org.patch |   26 +
 0016-Make-it-possible-to-build-without-tests.patch |   26 +
 0017-CMake-Fix-printing-of-empty-lines.patch       |   29 +
 kdevelop-pg-qt.spec                                |   37 +-
 17 files changed, 3308 insertions(+), 14 deletions(-)
---
diff --git a/0001-set-LIB_INSTALL_DIR-even-with-no-KDE4-stuff.patch b/0001-set-LIB_INSTALL_DIR-even-with-no-KDE4-stuff.patch
new file mode 100644
index 0000000..7ee6ddb
--- /dev/null
+++ b/0001-set-LIB_INSTALL_DIR-even-with-no-KDE4-stuff.patch
@@ -0,0 +1,24 @@
+From f9d0d07970535d58d14b437930174163a6d5df1f Mon Sep 17 00:00:00 2001
+From: Pino Toscano <pino at kde.org>
+Date: Tue, 27 Mar 2012 13:02:50 +0200
+Subject: [PATCH 01/17] set LIB_INSTALL_DIR even with no KDE4 stuff
+
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 6edf2d7..28f256c 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -15,6 +15,7 @@ if(NOT KDE4_FOUND)
+     cmake_policy(SET CMP0002 OLD)
+     find_package(Qt4)
+     set(DATA_INSTALL_DIR share)
++    set(LIB_INSTALL_DIR lib)
+ endif(NOT KDE4_FOUND)
+ 
+ # Use colored output (since cmake 2.4.0)
+-- 
+1.9.3
+
diff --git a/0002-Some-std-string-support-in-iterators.patch b/0002-Some-std-string-support-in-iterators.patch
new file mode 100644
index 0000000..c970f07
--- /dev/null
+++ b/0002-Some-std-string-support-in-iterators.patch
@@ -0,0 +1,117 @@
+From 4de3db2b1ea17ee75cec08bdde92f8923e6a55d3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonathan=20Schmidt-Domin=C3=A9?= <git at the-user.org>
+Date: Thu, 12 Apr 2012 18:26:18 +0200
+Subject: [PATCH 02/17] Some std::string support in iterators
+
+---
+ include/kdev-pg-char-sets.h | 30 ++++++++++++++++++++----------
+ kdev-pg/kdev-pg-regexp.h    |  2 --
+ 2 files changed, 20 insertions(+), 12 deletions(-)
+
+diff --git a/include/kdev-pg-char-sets.h b/include/kdev-pg-char-sets.h
+index 79be3ad..5b2b428 100644
+--- a/include/kdev-pg-char-sets.h
++++ b/include/kdev-pg-char-sets.h
+@@ -21,6 +21,7 @@
+ #ifndef KDEV_PG_CHAR_SETS
+ #define KDEV_PG_CHAR_SETS
+ 
++#include <string>
+ #include <iostream>
+ #include <vector>
+ #include <set>
+@@ -242,14 +243,15 @@ public:
+   }
+ };
+ 
+-class QByteArrayIterator
++template<typename String>
++class ByteStringIterator
+ {
+-  QByteArray::const_iterator _begin, iter, end;
++  typename String::const_iterator _begin, iter, end;
+ public:
+   typedef uchar Int;
+   typedef uchar InputInt;
+-  typedef QByteArray::const_iterator PlainIterator;
+-  QByteArrayIterator(const QByteArray& str) : _begin(str.begin()), iter(str.begin()), end(str.end())
++  typedef typename String::const_iterator PlainIterator;
++  ByteStringIterator(const String& str) : _begin(str.begin()), iter(str.begin()), end(str.end())
+   {
+     
+   }
+@@ -261,7 +263,7 @@ public:
+   {
+     return iter != end;
+   }
+-  ptrdiff_t operator-(const QByteArrayIterator& other) const
++  ptrdiff_t operator-(const ByteStringIterator& other) const
+   {
+     return iter - other.iter;
+   }
+@@ -275,6 +277,9 @@ public:
+   }
+ };
+ 
++typedef ByteStringIterator<QByteArray> QByteArrayIterator;
++typedef ByteStringIterator<string> StdStringIterator;
++
+ class QUtf16ToUcs4Iterator
+ {
+   union { QChar const *ptr; quint16 const *raw; };
+@@ -313,14 +318,17 @@ public:
+   }
+ };
+ 
+-class QUtf8ToUcs4Iterator
++template<typename String>
++class Utf8ToUcs4Iterator
+ {
+-  uchar const *_begin, *ptr, *end;
++public:
++  typedef typename String::const_iterator PlainIterator;
++private:
++  PlainIterator _begin, ptr, end;
+ public:
+   typedef quint32 Int;
+   typedef uchar InputInt;
+-  typedef InputInt const* PlainIterator;
+-  QUtf8ToUcs4Iterator(const QByteArray& qba) : _begin(reinterpret_cast<uchar const*>(qba.data())), ptr(_begin), end(ptr + qba.size())
++  Utf8ToUcs4Iterator(const String& str) : _begin(str.begin()), ptr(_begin), end(ptr + str.size())
+   {
+     
+   }
+@@ -391,7 +399,7 @@ public:
+   {
+     return ptr != end;
+   }
+-  ptrdiff_t operator-(const QUtf8ToUcs4Iterator& other) const
++  ptrdiff_t operator-(const String& other) const
+   {
+     return ptr - other.ptr;
+   }
+@@ -401,6 +409,8 @@ public:
+   }
+ };
+ 
++typedef Utf8ToUcs4Iterator<QByteArray> QUtf8ToUcs4Iterator;
++typedef Utf8ToUcs4Iterator<string> StdStringUtf8ToUcs4Iterator;
+ 
+ class QUtf8ToUcs2Iterator
+ {
+diff --git a/kdev-pg/kdev-pg-regexp.h b/kdev-pg/kdev-pg-regexp.h
+index 4c7e1dd..a3749fc 100644
+--- a/kdev-pg/kdev-pg-regexp.h
++++ b/kdev-pg/kdev-pg-regexp.h
+@@ -23,8 +23,6 @@
+ #include <kdev-pg-char-sets.h>
+ 
+ #include <vector>
+-#include <set>
+-#include <map>
+ #include <algorithm>
+ #include <stack>
+ #include <string>
+-- 
+1.9.3
+
diff --git a/0003-bugfix-inserting-user-generated-code.patch b/0003-bugfix-inserting-user-generated-code.patch
new file mode 100644
index 0000000..3f5d16f
--- /dev/null
+++ b/0003-bugfix-inserting-user-generated-code.patch
@@ -0,0 +1,27 @@
+From 19bead3c2e202c6c5b6ce4def64a1ba1286f0b80 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonathan=20Schmidt-Domin=C3=A9?= <git at the-user.org>
+Date: Thu, 12 Apr 2012 18:36:18 +0200
+Subject: [PATCH 03/17] bugfix: inserting user generated code
+
+---
+ kdev-pg/kdev-pg-generate.cpp | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+diff --git a/kdev-pg/kdev-pg-generate.cpp b/kdev-pg/kdev-pg-generate.cpp
+index d53f0e3..97dfd1c 100644
+--- a/kdev-pg/kdev-pg-generate.cpp
++++ b/kdev-pg/kdev-pg-generate.cpp
+@@ -608,7 +608,9 @@ void generateLexer()
+       s << "\n// user defined code:" << endl; \
+       GenerateMemberCode gen(s, Settings::MemberItem::PublicDeclaration \
+                                 | Settings::MemberItem::ProtectedDeclaration \
+-                                | Settings::MemberItem::PrivateDeclaration); \
++                                | Settings::MemberItem::PrivateDeclaration \
++                                | Settings::MemberItem::ConstructorCode \
++                                | Settings::MemberItem::DestructorCode); \
+       for( auto it = globalSystem.lexerclassMembers.name.begin(); \
+       it != globalSystem.lexerclassMembers.name.end(); ++it ) \
+       { \
+-- 
+1.9.3
+
diff --git a/0004-add-CTest-CDash-config-for-KDevelop-PG-Qt.patch b/0004-add-CTest-CDash-config-for-KDevelop-PG-Qt.patch
new file mode 100644
index 0000000..6da7371
--- /dev/null
+++ b/0004-add-CTest-CDash-config-for-KDevelop-PG-Qt.patch
@@ -0,0 +1,80 @@
+From a07bf1d9961f37cf17f2479c5aca6f2e155815e3 Mon Sep 17 00:00:00 2001
+From: Milian Wolff <mail at milianw.de>
+Date: Mon, 16 Apr 2012 14:54:47 +0200
+Subject: [PATCH 04/17] add CTest/CDash config for KDevelop-PG-Qt
+
+---
+ CMakeLists.txt    |  6 ++++++
+ CTestConfig.cmake | 13 +++++++++++++
+ CTestCustom.cmake | 25 +++++++++++++++++++++++++
+ 3 files changed, 44 insertions(+)
+ create mode 100644 CTestConfig.cmake
+ create mode 100644 CTestCustom.cmake
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 28f256c..121ad3d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -49,3 +49,9 @@ if(KDE4_FOUND)
+     enable_testing()
+     add_subdirectory(tests)
+ endif(KDE4_FOUND)
++
++include(CTest)
++
++# CTestCustom.cmake has to be in the CTEST_BINARY_DIR.
++# in the KDE build system, this is the same as CMAKE_BINARY_DIR.
++configure_file(${CMAKE_SOURCE_DIR}/CTestCustom.cmake ${CMAKE_BINARY_DIR}/CTestCustom.cmake)
+diff --git a/CTestConfig.cmake b/CTestConfig.cmake
+new file mode 100644
+index 0000000..308388b
+--- /dev/null
++++ b/CTestConfig.cmake
+@@ -0,0 +1,13 @@
++## This file should be placed in the root directory of your project.
++## Then modify the CMakeLists.txt file in the root directory of your
++## project to incorporate the testing dashboard.
++## # The following are required to uses Dart and the Cdash dashboard
++##   ENABLE_TESTING()
++##   INCLUDE(CTest)
++set(CTEST_PROJECT_NAME "KDevelop-PG-Qt")
++set(CTEST_NIGHTLY_START_TIME "00:05:00 EST")
++
++set(CTEST_DROP_METHOD "http")
++set(CTEST_DROP_SITE "my.cdash.org")
++set(CTEST_DROP_LOCATION "/submit.php?project=KDevelop-PG-Qt")
++set(CTEST_DROP_SITE_CDASH TRUE)
+diff --git a/CTestCustom.cmake b/CTestCustom.cmake
+new file mode 100644
+index 0000000..a1b0a23
+--- /dev/null
++++ b/CTestCustom.cmake
+@@ -0,0 +1,25 @@
++# This file contains all the specific settings that will be used
++# when running 'make Experimental'
++
++# Change the maximum warnings that will be displayed
++# on the report page (default 50)
++set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS 1000)
++
++# Warnings that will be ignored
++set(CTEST_CUSTOM_WARNING_EXCEPTION
++  ${CTEST_CUSTOM_WARNING_EXCEPTION}
++#  "/path/to/subfolder/"
++)
++
++# Errors that will be ignored
++set(CTEST_CUSTOM_ERROR_EXCEPTION
++  ${CTEST_CUSTOM_ERROR_EXCEPTION}
++#  "ICECC"
++#  "Segmentation fault"
++#  "GConf Error"
++#  "Client failed to connect to the D-BUS daemon"
++#  "Failed to connect to socket"
++  )
++
++# No coverage for these files
++set(CTEST_CUSTOM_COVERAGE_EXCLUDE ".moc$" "moc_" "ui_")
+-- 
+1.9.3
+
diff --git a/0005-force-building-of-unit-tests.patch b/0005-force-building-of-unit-tests.patch
new file mode 100644
index 0000000..e5fa94e
--- /dev/null
+++ b/0005-force-building-of-unit-tests.patch
@@ -0,0 +1,24 @@
+From 5e74eb9335fbfaa84323e173d081afcfdbf39800 Mon Sep 17 00:00:00 2001
+From: Milian Wolff <mail at milianw.de>
+Date: Mon, 16 Apr 2012 15:01:58 +0200
+Subject: [PATCH 05/17] force building of unit tests
+
+---
+ CMakeLists.txt | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 121ad3d..0ed26eb 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -47,6 +47,7 @@ add_subdirectory(examples EXCLUDE_FROM_ALL)
+ 
+ if(KDE4_FOUND)
+     enable_testing()
++    set(KDE4_BUILD_TESTS "ON" CACHE "BOOL" "Enable building of tests" FORCE )
+     add_subdirectory(tests)
+ endif(KDE4_FOUND)
+ 
+-- 
+1.9.3
+
diff --git a/0007-Fixed-the-bit-array-implementation-and-replaced-vect.patch b/0007-Fixed-the-bit-array-implementation-and-replaced-vect.patch
new file mode 100644
index 0000000..fcfd3f7
--- /dev/null
+++ b/0007-Fixed-the-bit-array-implementation-and-replaced-vect.patch
@@ -0,0 +1,324 @@
+From 2d403c527a697e91441d2ecb94a947d04c55bafb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonathan=20Schmidt-Domin=C3=A9?= <git at the-user.org>
+Date: Sat, 13 Oct 2012 23:10:58 +0200
+Subject: [PATCH 07/17] Fixed the bit array implementation and replaced
+ vector<bool>, now it should build with gcc4.4
+
+---
+ kdev-pg/kdev-pg-bit-array.h  | 104 +++++++++++++++++++++++++++++--------------
+ kdev-pg/kdev-pg-generate.cpp |   2 +-
+ kdev-pg/kdev-pg-lexer.cc     |   8 ++++
+ kdev-pg/kdev-pg-lexer.ll     |   8 ++++
+ kdev-pg/kdev-pg-regexp.cpp   |  14 +++---
+ 5 files changed, 97 insertions(+), 39 deletions(-)
+
+diff --git a/kdev-pg/kdev-pg-bit-array.h b/kdev-pg/kdev-pg-bit-array.h
+index fd4c311..9e8c773 100644
+--- a/kdev-pg/kdev-pg-bit-array.h
++++ b/kdev-pg/kdev-pg-bit-array.h
+@@ -22,16 +22,39 @@
+ 
+ #include <iostream>
+ #include <cstring>
+-#include <tr1/unordered_set>
+-
+-using namespace std;
+-using namespace tr1;
++#include <unordered_set>
+ 
+ class BitArray
+ {
++  typedef std::size_t size_t;
+   size_t mSize;
+-  unsigned char *mData;
+-  friend struct ::std::tr1::hash<BitArray>;
++  union
++  {
++    unsigned char *mByte;
++    size_t *mWord;
++  };
++  friend struct ::std::hash<BitArray>;
++  enum { BPW = sizeof(size_t) * 8 }; // Bits per word
++  static inline size_t words(size_t n)
++  {
++    return (n + BPW - 1) / BPW;
++  }
++  inline size_t words() const
++  {
++    return words(mSize);
++  }
++  static inline size_t bytes(size_t n)
++  {
++    return words(n) * sizeof(size_t);
++  }
++  inline size_t bytes() const
++  {
++    return bytes(mSize);
++  }
++  inline void setZerosAtEnd()
++  {
++    mWord[words() - 1] &= ((~size_t(0)) << (BPW - mSize % BPW));
++  }
+ public:
+   struct BitRef
+   {
+@@ -41,7 +64,7 @@ public:
+     {}
+     inline operator bool() const
+     {
+-      return byte & (1 << bit);
++      return (byte & (1 << bit)) == (1 << bit);
+     }
+     inline BitRef& operator=(bool val)
+     {
+@@ -51,22 +74,23 @@ public:
+         byte &= ~(1 << bit);
+       return *this;
+     }
+-    inline BitRef& operator=(BitRef val)
++    inline BitRef& operator=(const BitRef& val)
+     {
+       return *this = (bool)val;
+     }
+   };
+-  inline BitArray(size_t size, bool val = false) : mSize(size), mData(reinterpret_cast<unsigned char*>(malloc((size + 8 * sizeof(size_t) - 1) / 8)))
++  inline BitArray(size_t size, bool val = false) : mSize(size), mByte(reinterpret_cast<unsigned char*>(malloc(bytes())))
+   {
+-    memset(mData, (val ? (~(size_t(0))) : 0), (size + 8 * sizeof(size_t) - 1) / 8);
++    memset(mByte, (val ? (~(size_t(0))) : 0), bytes());
++    setZerosAtEnd();
+   }
+-  inline BitArray() : mSize(0), mData((unsigned char*)malloc(0))
++  inline BitArray() : mSize(0), mByte((unsigned char*)malloc(0))
+   {
+   }
+-  inline BitArray(const BitArray& o) : mSize(o.mSize), mData(reinterpret_cast<unsigned char*>(malloc((mSize + 8 * sizeof(size_t) - 1) / 8)))
++  inline BitArray(const BitArray& o) : mSize(o.mSize), mByte(reinterpret_cast<unsigned char*>(malloc(bytes())))
+   {
+-    for(size_t *i = reinterpret_cast<size_t*>(mData), *j = reinterpret_cast<size_t*>(o.mData); i != reinterpret_cast<size_t*>(mData) + (mSize + 8 * sizeof(size_t) - 1) / 8 / sizeof(size_t); ++i, ++j)
+-        *i = *j;
++    for(size_t *i = mWord, *j = o.mWord; i != mWord + words(); ++i, ++j)
++      *i = *j;
+   }
+   inline bool operator<(const BitArray& o) const
+   {
+@@ -77,18 +101,18 @@ public:
+     if(size() == 0)
+       return false;
+     size_t *i, *j;
+-    for(i = reinterpret_cast<size_t*>(mData), j = reinterpret_cast<size_t*>(o.mData); i != reinterpret_cast<size_t*>(mData) + (mSize + 8 * sizeof(size_t) - 1) / 8 / sizeof(size_t) - 1; ++i, ++j)
++    for(i = mWord, j = o.mWord; i != mWord + words(); ++i, ++j)
+     {
+       if(*i < *j)
+         return true;
+       if(*j < *i)
+         return false;
+     }
+-    return (*i & (1 << (8 * sizeof(size_t) - size() % (8 * sizeof(size_t))))) < (*j & (1 << (8 * sizeof(size_t) - size() % (8 * sizeof(size_t)))));
++    return false;
+   }
+   inline ~BitArray()
+   {
+-    free(mData);
++    free(mByte);
+   }
+   inline bool operator==(const BitArray& o) const
+   {
+@@ -97,12 +121,14 @@ public:
+     if(size() == 0)
+       return true;
+     size_t *i, *j;
+-    for(i = reinterpret_cast<size_t*>(mData), j = reinterpret_cast<size_t*>(o.mData); i != reinterpret_cast<size_t*>(mData) + (mSize + 8 * sizeof(size_t) - 1) / 8 / sizeof(size_t) - 1; ++i, ++j)
++    for(i = mWord, j = o.mWord; i != mWord + words(); ++i, ++j)
++    {
+       if(*i != *j)
+         return false;
+-    return (*i & (1 << (8 * sizeof(size_t) - size() % (8 * sizeof(size_t))))) == (*j & (1 << (8 * sizeof(size_t) - size() % (8 * sizeof(size_t)))));
++    }
++    return true;
+   }
+-  inline BitArray& operator[](const BitArray& o)
++  inline BitArray& operator=(const BitArray& o)
+   {
+     if(&o != this)
+     {
+@@ -113,19 +139,22 @@ public:
+   }
+   inline bool operator[](size_t x) const
+   {
+-    return size_t(mData[x >> 3]) & (1 << (x & 7));
++    if(x > size())
++      cerr << "out of bounds" << endl;
++    return (mByte[x >> 3] & (1 << (x & 7))) == (1 << (x & 7));
+   }
+   inline BitRef operator[](size_t x)
+   {
+-    return BitRef(mData[x >> 3], x & 7);
++    if(x > size())
++      cerr << "out of bounds" << endl;
++    return BitRef(mByte[x >> 3], x & 7);
+   }
+   inline void resize(size_t size)
+   {
+-    mData = reinterpret_cast<unsigned char*>(realloc(mData, size / 8));
++    mByte = reinterpret_cast<unsigned char*>(realloc(mByte, bytes(size)));
+     if(size > mSize)
+     {
+-      memset(reinterpret_cast<size_t*>(mData) + (mSize + 8 * sizeof(size_t) - 1) / 8 / sizeof(size_t), 0,  (size + 8 * sizeof(size_t) - 1) / 8 / sizeof(size_t) - (mSize + 8 * sizeof(size_t) - 1) / 8 / sizeof(size_t));
+-      mData[(mSize - 1) / 8 / sizeof(size_t)] &= ((~size_t(0)) << (sizeof(size_t) * 8 - mSize % (sizeof(size_t) * 8)));
++      memset(mWord + words(), 0, bytes(size) - bytes());
+     }
+     mSize = size;
+   }
+@@ -137,19 +166,28 @@ public:
+ 
+ namespace std
+ {
+-  namespace tr1
++  template<> struct hash<BitArray>
+   {
+-    template<> struct hash<BitArray>
++    inline size_t operator()(const BitArray &x) const
+     {
+-      inline size_t operator()(const BitArray &x) const
++      size_t ret = 0;
++      for(size_t *i = x.mWord; i != x.mWord + x.words(); ++i)
+       {
+-        size_t ret = 0;
+-        for(size_t *i = reinterpret_cast<size_t*>(x.mData); i != reinterpret_cast<size_t*>(x.mData) + (x.mSize + 8 * sizeof(size_t) - 1) / 8 / sizeof(size_t); ++i)
+-          ret ^= *i;
+-        return ret;
++        ret ^= *i;
++        ret = (ret >> (sizeof(size_t)*8 - 17)) | (ret << 17);
+       }
+-    };
++      return ret;
++    }
++  };
++}
++
++std::ostream& operator<<(std::ostream &o, const BitArray &a)
++{
++  for(size_t i = 0; i != a.size(); ++i)
++  {
++    o << (int)a[i];
+   }
++  return o;
+ }
+ 
+ #endif
+diff --git a/kdev-pg/kdev-pg-generate.cpp b/kdev-pg/kdev-pg-generate.cpp
+index 97dfd1c..2af2b98 100644
+--- a/kdev-pg/kdev-pg-generate.cpp
++++ b/kdev-pg/kdev-pg-generate.cpp
+@@ -659,7 +659,7 @@ void generateLexer()
+     LEXER_EXTRA_CODE_GEN(destructorCode)
+     s << "}" << endl << endl
+             
+-      << "#define PP_CONCAT_IMPL(x, y) x ## y\n" // necesarry, otherwise CURRENT_RULE_SET would not get resolved
++      << "#define PP_CONCAT_IMPL(x, y) x ## y\n" // necessary, otherwise CURRENT_RULE_SET would not get resolved
+          "#define PP_CONCAT(x, y) PP_CONCAT_IMPL(x, y)\n\n"
+          
+          "#define lxCURR_POS (Iterator::plain())\n"
+diff --git a/kdev-pg/kdev-pg-lexer.cc b/kdev-pg/kdev-pg-lexer.cc
+index 2a84b4c..0009ccb 100644
+--- a/kdev-pg/kdev-pg-lexer.cc
++++ b/kdev-pg/kdev-pg-lexer.cc
+@@ -3391,6 +3391,14 @@ void clearLineBuffer()
+   endOfLine = false;
+ }
+ 
++struct InitLineBuffer
++{
++  InitLineBuffer()
++  {
++    clearLineBuffer();
++  }
++} _initLineBuffer;
++
+  /* add the current token to the current line */
+ void appendLineBuffer()
+ {
+diff --git a/kdev-pg/kdev-pg-lexer.ll b/kdev-pg/kdev-pg-lexer.ll
+index e5138aa..a0864af 100644
+--- a/kdev-pg/kdev-pg-lexer.ll
++++ b/kdev-pg/kdev-pg-lexer.ll
+@@ -393,6 +393,14 @@ void clearLineBuffer()
+   endOfLine = false;
+ }
+ 
++struct InitLineBuffer
++{
++  InitLineBuffer()
++  {
++    clearLineBuffer();
++  }
++} _initLineBuffer;
++
+  /* add the current token to the current line */
+ void appendLineBuffer()
+ {
+diff --git a/kdev-pg/kdev-pg-regexp.cpp b/kdev-pg/kdev-pg-regexp.cpp
+index 1066360..33293ff 100644
+--- a/kdev-pg/kdev-pg-regexp.cpp
++++ b/kdev-pg/kdev-pg-regexp.cpp
+@@ -21,9 +21,12 @@
+ #include "kdev-pg-regexp.h"
+ #include "kdev-pg.h"
+ #include "kdev-pg-regexp-helper.h"
++#include "kdev-pg-bit-array.h"
+ #include <iostream>
+ #include <queue>
+ #include <stack>
++#include <QHash>
++#include <QSet>
+ #include <unordered_set>
+ #include <unordered_map>
+ 
+@@ -50,11 +53,10 @@ namespace std                                               \
+ 
+ q_Hash_to_tr1_hash(QBitArray)
+ 
+-
+ namespace KDevPG
+ {
+ 
+-typedef vector<bool> UsedBitArray;
++typedef BitArray UsedBitArray;
+ typedef QUtf8ToUcs4Iterator Iterator;
+ // typedef TableCharSet<Ascii> CharSet;
+ 
+@@ -533,8 +535,9 @@ public:
+         rules.resize(nstates);
+         return *this;
+     }
+-    UsedBitArray closure(UsedBitArray s)
++    UsedBitArray closure(const UsedBitArray& states)
+     {
++        UsedBitArray s(states);
+         assert(s.size() == nstates);
+         stack<size_t> todo;
+         for(size_t i = 0; i != nstates; ++i)
+@@ -562,8 +565,9 @@ public:
+             res[i] = res[i] || b[i];
+         return res;
+     }
+-    vector< pair<CharSet, UsedBitArray > > follow(UsedBitArray s)
++    vector< pair<CharSet, UsedBitArray > > follow(const UsedBitArray& states)
+     {
++        UsedBitArray s(states);
+         vector<pair<CharSet, UsedBitArray > > pr(nstates);
+         for(size_t i = 0; i != nstates; ++i)
+         {
+@@ -630,7 +634,7 @@ public:
+     }
+     DFA<CharSet> dfa()
+     {
+-        unordered_set<UsedBitArray > states;
++        unordered_set<UsedBitArray> states;
+         unordered_map<UsedBitArray, vector<pair<CharSet, UsedBitArray > > > rules;
+         stack<UsedBitArray > todo;
+         UsedBitArray start(nstates);
+-- 
+1.9.3
+
diff --git a/0008-Fixed-handling-of-overflows-in-TokenStream-read.patch b/0008-Fixed-handling-of-overflows-in-TokenStream-read.patch
new file mode 100644
index 0000000..36ac6e0
--- /dev/null
+++ b/0008-Fixed-handling-of-overflows-in-TokenStream-read.patch
@@ -0,0 +1,62 @@
+From a3e6e709ea23e5ce1ab1c9749695ac0d0a496a58 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonathan=20Schmidt-Domin=C3=A9?= <git at the-user.org>
+Date: Mon, 29 Oct 2012 18:09:07 +0100
+Subject: [PATCH 08/17] Fixed handling of overflows in TokenStream::read() see
+ https://git.reviewboard.kde.org/r/107071/
+
+---
+ include/kdev-pg-token-stream.h     |  4 ++++
+ kdev-pg/kdev-pg-token-type-gen.cpp | 15 ++++++++++++---
+ 2 files changed, 16 insertions(+), 3 deletions(-)
+
+diff --git a/include/kdev-pg-token-stream.h b/include/kdev-pg-token-stream.h
+index 8e59d1a..0168aad 100644
+--- a/include/kdev-pg-token-stream.h
++++ b/include/kdev-pg-token-stream.h
+@@ -188,6 +188,10 @@ public:
+    */
+   inline T &read()
+   {
++    if(mIndex == size())
++    {
++      push().kind = 1000;
++    }
+     return mTokenBuffer[mIndex++];
+   }
+   
+diff --git a/kdev-pg/kdev-pg-token-type-gen.cpp b/kdev-pg/kdev-pg-token-type-gen.cpp
+index 7e83174..d126ec5 100644
+--- a/kdev-pg/kdev-pg-token-type-gen.cpp
++++ b/kdev-pg/kdev-pg-token-type-gen.cpp
+@@ -31,7 +31,7 @@ public:
+   int mTokenValue;
+ 
+ public:
+-  GenerateToken(QTextStream& o): out(o), mTokenValue(1000)
++  GenerateToken(QTextStream& o): out(o), mTokenValue(1001)
+   {}
+ 
+   void operator()(QPair<QString, Model::TerminalItem*> const &__it);
+@@ -40,8 +40,17 @@ public:
+ void GenerateToken::operator()(QPair<QString, Model::TerminalItem*> const &__it)
+ {
+   Model::TerminalItem *t = __it.second;
+-  out << "Token_" << t->mName << " = " << mTokenValue << "," << endl;
+-  ++mTokenValue;
++  out << "Token_" << t->mName << " = ";
++  if(t->mName == "EOF")
++  {
++    out << 1000;
++  }
++  else
++  {
++    out << mTokenValue;
++    ++mTokenValue;
++  }
++  out << "," << endl;
+ }
+ 
+ void GenerateTokenType::operator()()
+-- 
+1.9.3
+
diff --git a/0009-Updated-generated-files.patch b/0009-Updated-generated-files.patch
new file mode 100644
index 0000000..7c6855a
--- /dev/null
+++ b/0009-Updated-generated-files.patch
@@ -0,0 +1,2327 @@
+From a045f1060153318d5664bd3c68a3fb38cb3a7a56 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonathan=20Schmidt-Domin=C3=A9?= <git at the-user.org>
+Date: Mon, 29 Oct 2012 18:13:56 +0100
+Subject: [PATCH 09/17] Updated generated files.
+
+---
+ kdev-pg/kdev-pg-parser.cc | 1097 +++++++++++++++++++++++----------------------
+ kdev-pg/kdev-pg-parser.hh |   14 +-
+ 2 files changed, 579 insertions(+), 532 deletions(-)
+
+diff --git a/kdev-pg/kdev-pg-parser.cc b/kdev-pg/kdev-pg-parser.cc
+index 5bf574a..4636927 100644
+--- a/kdev-pg/kdev-pg-parser.cc
++++ b/kdev-pg/kdev-pg-parser.cc
+@@ -1,10 +1,8 @@
++/* A Bison parser, made by GNU Bison 2.5.  */
+ 
+-/* A Bison parser, made by GNU Bison 2.4.1.  */
+-
+-/* Skeleton implementation for Bison's Yacc-like parsers in C
++/* Bison implementation for Yacc-like parsers in C
+    
+-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+-   Free Software Foundation, Inc.
++      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+    
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+@@ -46,7 +44,7 @@
+ #define YYBISON 1
+ 
+ /* Bison version.  */
+-#define YYBISON_VERSION "2.4.1"
++#define YYBISON_VERSION "2.5"
+ 
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+@@ -67,7 +65,7 @@
+ 
+ /* Copy the first part of user declarations.  */
+ 
+-/* Line 189 of yacc.c  */
++/* Line 268 of yacc.c  */
+ #line 2 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+ 
+ /* This file is part of kdev-pg-qt
+@@ -116,8 +114,8 @@ QString r;
+ 
+ 
+ 
+-/* Line 189 of yacc.c  */
+-#line 121 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
++/* Line 268 of yacc.c  */
++#line 119 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
+ 
+ /* Enabling traces.  */
+ #ifndef YYDEBUG
+@@ -220,7 +218,7 @@ QString r;
+ typedef union YYSTYPE
+ {
+ 
+-/* Line 214 of yacc.c  */
++/* Line 293 of yacc.c  */
+ #line 49 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+ 
+     KDevPG::Model::Node *item;
+@@ -233,8 +231,8 @@ typedef union YYSTYPE
+ 
+ 
+ 
+-/* Line 214 of yacc.c  */
+-#line 238 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
++/* Line 293 of yacc.c  */
++#line 236 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
+ } YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+@@ -245,8 +243,8 @@ typedef union YYSTYPE
+ /* Copy the second part of user declarations.  */
+ 
+ 
+-/* Line 264 of yacc.c  */
+-#line 250 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
++/* Line 343 of yacc.c  */
++#line 248 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
+ 
+ #ifdef short
+ # undef short
+@@ -296,7 +294,7 @@ typedef short int yytype_int16;
+ #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+ 
+ #ifndef YY_
+-# if YYENABLE_NLS
++# if defined YYENABLE_NLS && YYENABLE_NLS
+ #  if ENABLE_NLS
+ #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+ #   define YY_(msgid) dgettext ("bison-runtime", msgid)
+@@ -349,11 +347,11 @@ YYID (yyi)
+ #    define alloca _alloca
+ #   else
+ #    define YYSTACK_ALLOC alloca
+-#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#     ifndef _STDLIB_H
+-#      define _STDLIB_H 1
++#     ifndef EXIT_SUCCESS
++#      define EXIT_SUCCESS 0
+ #     endif
+ #    endif
+ #   endif
+@@ -376,24 +374,24 @@ YYID (yyi)
+ #  ifndef YYSTACK_ALLOC_MAXIMUM
+ #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+ #  endif
+-#  if (defined __cplusplus && ! defined _STDLIB_H \
++#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
+        && ! ((defined YYMALLOC || defined malloc) \
+ 	     && (defined YYFREE || defined free)))
+ #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+-#   ifndef _STDLIB_H
+-#    define _STDLIB_H 1
++#   ifndef EXIT_SUCCESS
++#    define EXIT_SUCCESS 0
+ #   endif
+ #  endif
+ #  ifndef YYMALLOC
+ #   define YYMALLOC malloc
+-#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+ #  endif
+ #  ifndef YYFREE
+ #   define YYFREE free
+-#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
++#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+      || defined __cplusplus || defined _MSC_VER)
+ void free (void *); /* INFRINGES ON USER NAME SPACE */
+ #   endif
+@@ -422,23 +420,7 @@ union yyalloc
+      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+       + YYSTACK_GAP_MAXIMUM)
+ 
+-/* Copy COUNT objects from FROM to TO.  The source and destination do
+-   not overlap.  */
+-# ifndef YYCOPY
+-#  if defined __GNUC__ && 1 < __GNUC__
+-#   define YYCOPY(To, From, Count) \
+-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+-#  else
+-#   define YYCOPY(To, From, Count)		\
+-      do					\
+-	{					\
+-	  YYSIZE_T yyi;				\
+-	  for (yyi = 0; yyi < (Count); yyi++)	\
+-	    (To)[yyi] = (From)[yyi];		\
+-	}					\
+-      while (YYID (0))
+-#  endif
+-# endif
++# define YYCOPY_NEEDED 1
+ 
+ /* Relocate STACK from its old location to the new one.  The
+    local variables YYSIZE and YYSTACKSIZE give the old and new number of
+@@ -458,6 +440,26 @@ union yyalloc
+ 
+ #endif
+ 
++#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
++/* Copy COUNT objects from FROM to TO.  The source and destination do
++   not overlap.  */
++# ifndef YYCOPY
++#  if defined __GNUC__ && 1 < __GNUC__
++#   define YYCOPY(To, From, Count) \
++      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
++#  else
++#   define YYCOPY(To, From, Count)		\
++      do					\
++	{					\
++	  YYSIZE_T yyi;				\
++	  for (yyi = 0; yyi < (Count); yyi++)	\
++	    (To)[yyi] = (From)[yyi];		\
++	}					\
++      while (YYID (0))
++#  endif
++# endif
++#endif /* !YYCOPY_NEEDED */
++
+ /* YYFINAL -- State number of the termination state.  */
+ #define YYFINAL  4
+ /* YYLAST -- Last index in YYTABLE.  */
+@@ -734,8 +736,8 @@ static const yytype_uint8 yyr2[] =
+        5,     7,     6,     0,     1,     1,     1,     1,     1
+ };
+ 
+-/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+-   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
++/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
++   Performed when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+ static const yytype_uint8 yydefact[] =
+ {
+@@ -842,8 +844,7 @@ static const yytype_int16 yypgoto[] =
+ 
+ /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+    positive, shift that token.  If negative, reduce the rule which
+-   number is the opposite.  If zero, do what YYDEFACT says.
+-   If YYTABLE_NINF, syntax error.  */
++   number is the opposite.  If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -145
+ static const yytype_int16 yytable[] =
+ {
+@@ -889,6 +890,12 @@ static const yytype_int16 yytable[] =
+      254,   194,   193,   199,   273
+ };
+ 
++#define yypact_value_is_default(yystate) \
++  ((yystate) == (-258))
++
++#define yytable_value_is_error(yytable_value) \
++  YYID (0)
++
+ static const yytype_uint16 yycheck[] =
+ {
+       53,    74,    99,   106,    84,     5,     0,     3,     9,     3,
+@@ -986,9 +993,18 @@ static const yytype_uint8 yystos[] =
+ 
+ /* Like YYERROR except do call yyerror.  This remains here temporarily
+    to ease the transition to the new meaning of YYERROR, for GCC.
+-   Once GCC version 2 has supplanted version 1, this can go.  */
++   Once GCC version 2 has supplanted version 1, this can go.  However,
++   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
++   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
++   discussed.  */
+ 
+ #define YYFAIL		goto yyerrlab
++#if defined YYFAIL
++  /* This is here to suppress warnings from the GCC cpp's
++     -Wunused-macros.  Normally we don't worry about that warning, but
++     some users do, and we want to make it easy for users to remove
++     YYFAIL uses, which will produce warnings from Bison 2.5.  */
++#endif
+ 
+ #define YYRECOVERING()  (!!yyerrstatus)
+ 
+@@ -998,7 +1014,6 @@ do								\
+     {								\
+       yychar = (Token);						\
+       yylval = (Value);						\
+-      yytoken = YYTRANSLATE (yychar);				\
+       YYPOPSTACK (1);						\
+       goto yybackup;						\
+     }								\
+@@ -1040,19 +1055,10 @@ while (YYID (0))
+ #endif
+ 
+ 
+-/* YY_LOCATION_PRINT -- Print the location on the stream.
+-   This macro was not mandated originally: define only if we know
+-   we won't break user code: when these are the locations we know.  */
++/* This macro is provided for backward compatibility. */
+ 
+ #ifndef YY_LOCATION_PRINT
+-# if YYLTYPE_IS_TRIVIAL
+-#  define YY_LOCATION_PRINT(File, Loc)			\
+-     fprintf (File, "%d.%d-%d.%d",			\
+-	      (Loc).first_line, (Loc).first_column,	\
+-	      (Loc).last_line,  (Loc).last_column)
+-# else
+-#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+-# endif
++# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+ #endif
+ 
+ 
+@@ -1244,7 +1250,6 @@ int yydebug;
+ # define YYMAXDEPTH 10000
+ #endif
+ 
+-
+ 
+ #if YYERROR_VERBOSE
+ 
+@@ -1347,115 +1352,142 @@ yytnamerr (char *yyres, const char *yystr)
+ }
+ # endif
+ 
+-/* Copy into YYRESULT an error message about the unexpected token
+-   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+-   including the terminating null byte.  If YYRESULT is null, do not
+-   copy anything; just return the number of bytes that would be
+-   copied.  As a special case, return 0 if an ordinary "syntax error"
+-   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+-   size calculation.  */
+-static YYSIZE_T
+-yysyntax_error (char *yyresult, int yystate, int yychar)
+-{
+-  int yyn = yypact[yystate];
++/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
++   about the unexpected token YYTOKEN for the state stack whose top is
++   YYSSP.
+ 
+-  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+-    return 0;
+-  else
++   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
++   not large enough to hold the message.  In that case, also set
++   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
++   required number of bytes is too large to store.  */
++static int
++yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
++                yytype_int16 *yyssp, int yytoken)
++{
++  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
++  YYSIZE_T yysize = yysize0;
++  YYSIZE_T yysize1;
++  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
++  /* Internationalized format string. */
++  const char *yyformat = 0;
++  /* Arguments of yyformat. */
++  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
++  /* Number of reported tokens (one for the "unexpected", one per
++     "expected"). */
++  int yycount = 0;
++
++  /* There are many possibilities here to consider:
++     - Assume YYFAIL is not used.  It's too flawed to consider.  See
++       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
++       for details.  YYERROR is fine as it does not invoke this
++       function.
++     - If this state is a consistent state with a default action, then
++       the only way this function was invoked is if the default action
++       is an error action.  In that case, don't check for expected
++       tokens because there are none.
++     - The only way there can be no lookahead present (in yychar) is if
++       this state is a consistent state with a default action.  Thus,
++       detecting the absence of a lookahead is sufficient to determine
++       that there is no unexpected or expected token to report.  In that
++       case, just report a simple "syntax error".
++     - Don't assume there isn't a lookahead just because this state is a
++       consistent state with a default action.  There might have been a
++       previous inconsistent state, consistent state with a non-default
++       action, or user semantic action that manipulated yychar.
++     - Of course, the expected token list depends on states to have
++       correct lookahead information, and it depends on the parser not
++       to perform extra reductions after fetching a lookahead from the
++       scanner and before detecting a syntax error.  Thus, state merging
++       (from LALR or IELR) and default reductions corrupt the expected
++       token list.  However, the list is correct for canonical LR with
++       one exception: it will still contain any token that will not be
++       accepted due to an error action in a later state.
++  */
++  if (yytoken != YYEMPTY)
+     {
+-      int yytype = YYTRANSLATE (yychar);
+-      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+-      YYSIZE_T yysize = yysize0;
+-      YYSIZE_T yysize1;
+-      int yysize_overflow = 0;
+-      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+-      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+-      int yyx;
+-
+-# if 0
+-      /* This is so xgettext sees the translatable formats that are
+-	 constructed on the fly.  */
+-      YY_("syntax error, unexpected %s");
+-      YY_("syntax error, unexpected %s, expecting %s");
+-      YY_("syntax error, unexpected %s, expecting %s or %s");
+-      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+-      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+-# endif
+-      char *yyfmt;
+-      char const *yyf;
+-      static char const yyunexpected[] = "syntax error, unexpected %s";
+-      static char const yyexpecting[] = ", expecting %s";
+-      static char const yyor[] = " or %s";
+-      char yyformat[sizeof yyunexpected
+-		    + sizeof yyexpecting - 1
+-		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+-		       * (sizeof yyor - 1))];
+-      char const *yyprefix = yyexpecting;
+-
+-      /* Start YYX at -YYN if negative to avoid negative indexes in
+-	 YYCHECK.  */
+-      int yyxbegin = yyn < 0 ? -yyn : 0;
+-
+-      /* Stay within bounds of both yycheck and yytname.  */
+-      int yychecklim = YYLAST - yyn + 1;
+-      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+-      int yycount = 1;
+-
+-      yyarg[0] = yytname[yytype];
+-      yyfmt = yystpcpy (yyformat, yyunexpected);
+-
+-      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+-	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+-	  {
+-	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+-	      {
+-		yycount = 1;
+-		yysize = yysize0;
+-		yyformat[sizeof yyunexpected - 1] = '\0';
+-		break;
+-	      }
+-	    yyarg[yycount++] = yytname[yyx];
+-	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+-	    yysize_overflow |= (yysize1 < yysize);
+-	    yysize = yysize1;
+-	    yyfmt = yystpcpy (yyfmt, yyprefix);
+-	    yyprefix = yyor;
+-	  }
++      int yyn = yypact[*yyssp];
++      yyarg[yycount++] = yytname[yytoken];
++      if (!yypact_value_is_default (yyn))
++        {
++          /* Start YYX at -YYN if negative to avoid negative indexes in
++             YYCHECK.  In other words, skip the first -YYN actions for
++             this state because they are default actions.  */
++          int yyxbegin = yyn < 0 ? -yyn : 0;
++          /* Stay within bounds of both yycheck and yytname.  */
++          int yychecklim = YYLAST - yyn + 1;
++          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
++          int yyx;
++
++          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
++            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
++                && !yytable_value_is_error (yytable[yyx + yyn]))
++              {
++                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
++                  {
++                    yycount = 1;
++                    yysize = yysize0;
++                    break;
++                  }
++                yyarg[yycount++] = yytname[yyx];
++                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
++                if (! (yysize <= yysize1
++                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
++                  return 2;
++                yysize = yysize1;
++              }
++        }
++    }
+ 
+-      yyf = YY_(yyformat);
+-      yysize1 = yysize + yystrlen (yyf);
+-      yysize_overflow |= (yysize1 < yysize);
+-      yysize = yysize1;
++  switch (yycount)
++    {
++# define YYCASE_(N, S)                      \
++      case N:                               \
++        yyformat = S;                       \
++      break
++      YYCASE_(0, YY_("syntax error"));
++      YYCASE_(1, YY_("syntax error, unexpected %s"));
++      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
++      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
++      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
++      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
++# undef YYCASE_
++    }
+ 
+-      if (yysize_overflow)
+-	return YYSIZE_MAXIMUM;
++  yysize1 = yysize + yystrlen (yyformat);
++  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
++    return 2;
++  yysize = yysize1;
+ 
+-      if (yyresult)
+-	{
+-	  /* Avoid sprintf, as that infringes on the user's name space.
+-	     Don't have undefined behavior even if the translation
+-	     produced a string with the wrong number of "%s"s.  */
+-	  char *yyp = yyresult;
+-	  int yyi = 0;
+-	  while ((*yyp = *yyf) != '\0')
+-	    {
+-	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+-		{
+-		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+-		  yyf += 2;
+-		}
+-	      else
+-		{
+-		  yyp++;
+-		  yyf++;
+-		}
+-	    }
+-	}
+-      return yysize;
++  if (*yymsg_alloc < yysize)
++    {
++      *yymsg_alloc = 2 * yysize;
++      if (! (yysize <= *yymsg_alloc
++             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
++        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
++      return 1;
+     }
++
++  /* Avoid sprintf, as that infringes on the user's name space.
++     Don't have undefined behavior even if the translation
++     produced a string with the wrong number of "%s"s.  */
++  {
++    char *yyp = *yymsg;
++    int yyi = 0;
++    while ((*yyp = *yyformat) != '\0')
++      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
++        {
++          yyp += yytnamerr (yyp, yyarg[yyi++]);
++          yyformat += 2;
++        }
++      else
++        {
++          yyp++;
++          yyformat++;
++        }
++  }
++  return 0;
+ }
+ #endif /* YYERROR_VERBOSE */
+-
+ 
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+@@ -1488,6 +1520,7 @@ yydestruct (yymsg, yytype, yyvaluep)
+     }
+ }
+ 
++
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ #ifdef YYPARSE_PARAM
+ #if defined __STDC__ || defined __cplusplus
+@@ -1514,10 +1547,9 @@ YYSTYPE yylval;
+ int yynerrs;
+ 
+ 
+-
+-/*-------------------------.
+-| yyparse or yypush_parse.  |
+-`-------------------------*/
++/*----------.
++| yyparse.  |
++`----------*/
+ 
+ #ifdef YYPARSE_PARAM
+ #if (defined __STDC__ || defined __C99__FUNC__ \
+@@ -1541,8 +1573,6 @@ yyparse ()
+ #endif
+ #endif
+ {
+-
+-
+     int yystate;
+     /* Number of tokens to shift before error messages enabled.  */
+     int yyerrstatus;
+@@ -1697,7 +1727,7 @@ yybackup:
+ 
+   /* First try to decide what to do without reference to lookahead token.  */
+   yyn = yypact[yystate];
+-  if (yyn == YYPACT_NINF)
++  if (yypact_value_is_default (yyn))
+     goto yydefault;
+ 
+   /* Not known => get a lookahead token if don't already have one.  */
+@@ -1728,8 +1758,8 @@ yybackup:
+   yyn = yytable[yyn];
+   if (yyn <= 0)
+     {
+-      if (yyn == 0 || yyn == YYTABLE_NINF)
+-	goto yyerrlab;
++      if (yytable_value_is_error (yyn))
++        goto yyerrlab;
+       yyn = -yyn;
+       goto yyreduce;
+     }
+@@ -1784,49 +1814,49 @@ yyreduce:
+     {
+         case 2:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 94 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.decl = (yyvsp[(1) - (1)].str); ;}
++    { KDevPG::globalSystem.decl = (yyvsp[(1) - (1)].str); }
+     break;
+ 
+   case 3:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 97 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.bits += (yyvsp[(5) - (5)].str); ;}
++    { KDevPG::globalSystem.bits += (yyvsp[(5) - (5)].str); }
+     break;
+ 
+   case 6:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 107 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushParserClassMember((yyvsp[(2) - (2)].item)); ;}
++    { KDevPG::globalSystem.pushParserClassMember((yyvsp[(2) - (2)].item)); }
+     break;
+ 
+   case 7:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 109 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.bits += (yyvsp[(5) - (5)].str); ;}
++    { KDevPG::globalSystem.bits += (yyvsp[(5) - (5)].str); }
+     break;
+ 
+   case 8:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 111 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushLexerClassMember((yyvsp[(2) - (2)].item)); ;}
++    { KDevPG::globalSystem.pushLexerClassMember((yyvsp[(2) - (2)].item)); }
+     break;
+ 
+   case 9:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 113 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.lexerBits += (yyvsp[(5) - (5)].str); ;}
++    { KDevPG::globalSystem.lexerBits += (yyvsp[(5) - (5)].str); }
+     break;
+ 
+   case 11:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 116 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     { if(KDevPG::globalSystem.hasLexer)
+         { KDevPG::checkOut << "** ERROR you have to specify the lexer-type (%table_lexer) before any lexer rules"; exit(-1); }
+@@ -1840,12 +1870,12 @@ yyreduce:
+ /*           case KDevPG::SUcs4: KDevPG::GDFA::type = KDevPG::TUcs4; break; */
+           default: /* empty */;
+         }
+-      ;}
++      }
+     break;
+ 
+   case 12:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 130 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     { if(KDevPG::globalSystem.hasLexer)
+       { KDevPG::checkOut << "** ERROR you have to specify the lexer-type (%sequence_lexer) before any lexer rules"; exit(-1); }
+@@ -1859,12 +1889,12 @@ yyreduce:
+ /*         case KDevPG::TUcs4: KDevPG::GDFA::type = KDevPG::SUcs4; break; */
+         default: /* empty */;
+       }
+-      ;}
++      }
+     break;
+ 
+   case 13:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 144 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+         if(KDevPG::globalSystem.hasLexer)
+@@ -1891,132 +1921,132 @@ yyreduce:
+           exit(-1);
+         }
+         KDevPG::GDFA::type = KDevPG::AutomatonType(base);
+-      ;}
++      }
+     break;
+ 
+   case 14:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 171 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.tokenStream = (yyvsp[(2) - (3)].str);           ;}
++    { KDevPG::globalSystem.tokenStream = (yyvsp[(2) - (3)].str);           }
+     break;
+ 
+   case 15:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 173 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.exportMacro = (yyvsp[(2) - (2)].str);           ;}
++    { KDevPG::globalSystem.exportMacro = (yyvsp[(2) - (2)].str);           }
+     break;
+ 
+   case 16:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 175 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.exportMacroHeader = (yyvsp[(2) - (2)].str);     ;}
++    { KDevPG::globalSystem.exportMacroHeader = (yyvsp[(2) - (2)].str);     }
+     break;
+ 
+   case 17:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 177 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.namespaceCode = (yyvsp[(2) - (2)].str);         ;}
++    { KDevPG::globalSystem.namespaceCode = (yyvsp[(2) - (2)].str);         }
+     break;
+ 
+   case 18:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 179 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.astCode = (yyvsp[(2) - (2)].str);               ;}
++    { KDevPG::globalSystem.astCode = (yyvsp[(2) - (2)].str);               }
+     break;
+ 
+   case 19:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 181 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushParserDeclarationHeader((yyvsp[(2) - (2)].str)); ;}
++    { KDevPG::globalSystem.pushParserDeclarationHeader((yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 20:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 183 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushParserBitsHeader((yyvsp[(2) - (2)].str)); ;}
++    { KDevPG::globalSystem.pushParserBitsHeader((yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 21:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 185 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushAstHeader((yyvsp[(2) - (2)].str)); ;}
++    { KDevPG::globalSystem.pushAstHeader((yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 22:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 187 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushLexerDeclarationHeader((yyvsp[(2) - (2)].str)); ;}
++    { KDevPG::globalSystem.pushLexerDeclarationHeader((yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 23:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 189 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.inputStream = (yyvsp[(2) - (2)].str); ;}
++    { KDevPG::globalSystem.inputStream = (yyvsp[(2) - (2)].str); }
+     break;
+ 
+   case 24:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 191 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushLexerBitsHeader((yyvsp[(2) - (2)].str)); ;}
++    { KDevPG::globalSystem.pushLexerBitsHeader((yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 25:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 193 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.astBaseClasses[(yyvsp[(2) - (3)].str)] = (yyvsp[(3) - (3)].str); ;}
++    { KDevPG::globalSystem.astBaseClasses[(yyvsp[(2) - (3)].str)] = (yyvsp[(3) - (3)].str); }
+     break;
+ 
+   case 26:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 195 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.parserBaseClass = (yyvsp[(2) - (2)].str); ;}
++    { KDevPG::globalSystem.parserBaseClass = (yyvsp[(2) - (2)].str); }
+     break;
+ 
+   case 27:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 197 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.lexerBaseClass = (yyvsp[(2) - (2)].str); ;}
++    { KDevPG::globalSystem.lexerBaseClass = (yyvsp[(2) - (2)].str); }
+     break;
+ 
+   case 28:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 198 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.hasLexer = true; lexerEnv = (yyvsp[(2) - (2)].str); if(KDevPG::globalSystem.lexerActions[lexerEnv].empty()) KDevPG::globalSystem.lexerActions[lexerEnv].push_back("qDebug() << \"error\"; exit(-1);"); ;}
++    { KDevPG::globalSystem.hasLexer = true; lexerEnv = (yyvsp[(2) - (2)].str); if(KDevPG::globalSystem.lexerActions[lexerEnv].empty()) KDevPG::globalSystem.lexerActions[lexerEnv].push_back("qDebug() << \"error\"; exit(-1);"); }
+     break;
+ 
+   case 30:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 199 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.hasLexer = true; KDevPG::loadUnicodeData(); lexerEnv = "start"; if(KDevPG::globalSystem.lexerActions["start"].empty()) KDevPG::globalSystem.lexerActions["start"].push_back("qDebug() << \"error\"; exit(-1);"); ;}
++    { KDevPG::globalSystem.hasLexer = true; KDevPG::loadUnicodeData(); lexerEnv = "start"; if(KDevPG::globalSystem.lexerActions["start"].empty()) KDevPG::globalSystem.lexerActions["start"].push_back("qDebug() << \"error\"; exit(-1);"); }
+     break;
+ 
+   case 32:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 204 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     { KDevPG::globalSystem.regexpById[(yyvsp[(3) - (4)].str)] = (yyvsp[(1) - (4)].nfa);
+-            ;}
++            }
+     break;
+ 
+   case 34:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 207 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               if((yyvsp[(1) - (4)].nfa)->acceptsEpsilon())
+@@ -2026,12 +2056,12 @@ yyreduce:
+               QString s = QString((yyvsp[(2) - (4)].str)) + QString(r);
+               KDevPG::globalSystem.lexerEnvs[lexerEnv].push_back((yyvsp[(1) - (4)].nfa));
+               KDevPG::globalSystem.lexerActions[lexerEnv].push_back(s);
+-            ;}
++            }
+     break;
+ 
+   case 36:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 217 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               if((yyvsp[(1) - (8)].nfa)->acceptsEpsilon())
+@@ -2063,12 +2093,12 @@ yyreduce:
+                 KDevPG::globalSystem.lexerEnvs[lexerEnv].push_back((yyvsp[(1) - (8)].nfa));
+                 KDevPG::globalSystem.lexerActions[lexerEnv].push_back(s);
+               }
+-            ;}
++            }
+     break;
+ 
+   case 38:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 249 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               if((yyvsp[(1) - (8)].nfa)->acceptsEpsilon())
+@@ -2110,211 +2140,211 @@ yyreduce:
+                 KDevPG::globalSystem.lexerEnvs[lexerEnv].push_back((yyvsp[(1) - (8)].nfa));
+                 KDevPG::globalSystem.lexerActions[lexerEnv].push_back(s);
+               }
+-            ;}
++            }
+     break;
+ 
+   case 40:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 291 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               KDevPG::globalSystem.lexerActions[lexerEnv][0] = QString((yyvsp[(2) - (2)].str));
+-            ;}
++            }
+     break;
+ 
+   case 42:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 295 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               KDevPG::globalSystem.enteringCode[lexerEnv] = QString((yyvsp[(2) - (2)].str));
+-            ;}
++            }
+     break;
+ 
+   case 44:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 299 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               KDevPG::globalSystem.leavingCode[lexerEnv] = QString((yyvsp[(2) - (2)].str));
+-            ;}
++            }
+     break;
+ 
+   case 47:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 306 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+         r = "\nlxRETURN(" + QString((yyvsp[(1) - (1)].str)) + ")\n";
+-      ;}
++      }
+     break;
+ 
+   case 48:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 309 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+         r = "\nlxCONTINUE;\n";
+-      ;}
++      }
+     break;
+ 
+   case 49:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 312 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     { r = "\nlxSKIP\n" ;}
+     break;
+ 
+   case 50:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 316 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) |= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) |= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 51:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 317 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 52:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 321 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) &= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) &= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 53:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 322 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 54:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 326 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) ^= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) ^= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 55:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 327 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 56:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 331 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA((yyvsp[(2) - (2)].nfa)->negate()); delete (yyvsp[(2) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA((yyvsp[(2) - (2)].nfa)->negate()); delete (yyvsp[(2) - (2)].nfa); }
+     break;
+ 
+   case 57:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 332 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (2)].nfa) |= KDevPG::GNFA::emptyWord()); delete (yyvsp[(2) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (2)].nfa) |= KDevPG::GNFA::emptyWord()); delete (yyvsp[(2) - (2)].nfa); }
+     break;
+ 
+   case 58:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 333 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 59:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 337 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa) <<= *(yyvsp[(2) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); delete (yyvsp[(2) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa) <<= *(yyvsp[(2) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); delete (yyvsp[(2) - (2)].nfa); }
+     break;
+ 
+   case 60:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 338 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 61:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 342 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa)); KDevPG::GNFA *tmp = new KDevPG::GNFA(*(yyvsp[(3) - (3)].nfa) <<= *(yyvsp[(1) - (3)].nfa)); **tmp; *(yyval.nfa) <<= *tmp; delete tmp; delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa)); KDevPG::GNFA *tmp = new KDevPG::GNFA(*(yyvsp[(3) - (3)].nfa) <<= *(yyvsp[(1) - (3)].nfa)); **tmp; *(yyval.nfa) <<= *tmp; delete tmp; delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 62:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 343 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 63:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 347 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(**(yyvsp[(1) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(**(yyvsp[(1) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); }
+     break;
+ 
+   case 64:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 348 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa)); **(yyval.nfa); *(yyval.nfa) <<= *(yyvsp[(1) - (2)].nfa); delete (yyvsp[(1) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa)); **(yyval.nfa); *(yyval.nfa) <<= *(yyvsp[(1) - (2)].nfa); delete (yyvsp[(1) - (2)].nfa); }
+     break;
+ 
+   case 65:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 349 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 66:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 353 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (3)].nfa)); delete (yyvsp[(2) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (3)].nfa)); delete (yyvsp[(2) - (3)].nfa); }
+     break;
+ 
+   case 67:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 354 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(2) - (3)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(2) - (3)].nfa); }
+     break;
+ 
+   case 68:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 355 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::anyChar()); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::anyChar()); }
+     break;
+ 
+   case 69:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 356 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::word(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::word(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); }
+     break;
+ 
+   case 70:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 357 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::word(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::word(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); }
+     break;
+ 
+   case 71:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 358 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+                               if(!KDevPG::globalSystem.regexpById.contains((yyvsp[(1) - (1)].str)))
+@@ -2330,152 +2360,152 @@ yyreduce:
+                                 *regexp = KDevPG::globalSystem.dfaForNfa[regexp]->nfa();
+                               }
+                               (yyval.nfa) = new KDevPG::GNFA(*regexp);
+-                            ;}
++                            }
+     break;
+ 
+   case 72:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 373 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::emptyWord()); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::emptyWord()); }
+     break;
+ 
+   case 73:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 377 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) |= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) |= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 74:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 378 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 75:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 382 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) &= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) &= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 76:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 383 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 77:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 387 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) ^= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa) ^= *(yyvsp[(3) - (3)].nfa)); delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 78:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 388 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 79:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 392 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA((yyvsp[(2) - (2)].nfa)->negate()); delete (yyvsp[(2) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA((yyvsp[(2) - (2)].nfa)->negate()); delete (yyvsp[(2) - (2)].nfa); }
+     break;
+ 
+   case 80:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 393 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (2)].nfa) |= KDevPG::GNFA::emptyWord()); delete (yyvsp[(2) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (2)].nfa) |= KDevPG::GNFA::emptyWord()); delete (yyvsp[(2) - (2)].nfa); }
+     break;
+ 
+   case 81:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 394 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 82:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 398 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa) |= *(yyvsp[(2) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); delete (yyvsp[(2) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa) |= *(yyvsp[(2) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); delete (yyvsp[(2) - (2)].nfa); }
+     break;
+ 
+   case 84:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 403 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa)); KDevPG::GNFA *tmp = new KDevPG::GNFA(*(yyvsp[(3) - (3)].nfa) <<= *(yyvsp[(1) - (3)].nfa)); **tmp; *(yyval.nfa) <<= *tmp; delete tmp; delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (3)].nfa)); KDevPG::GNFA *tmp = new KDevPG::GNFA(*(yyvsp[(3) - (3)].nfa) <<= *(yyvsp[(1) - (3)].nfa)); **tmp; *(yyval.nfa) <<= *tmp; delete tmp; delete (yyvsp[(1) - (3)].nfa); delete (yyvsp[(3) - (3)].nfa); }
+     break;
+ 
+   case 85:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 404 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 86:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 408 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(**(yyvsp[(1) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(**(yyvsp[(1) - (2)].nfa)); delete (yyvsp[(1) - (2)].nfa); }
+     break;
+ 
+   case 87:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 409 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa)); **(yyval.nfa); *(yyval.nfa) <<= *(yyvsp[(1) - (2)].nfa); delete (yyvsp[(1) - (2)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(1) - (2)].nfa)); **(yyval.nfa); *(yyval.nfa) <<= *(yyvsp[(1) - (2)].nfa); delete (yyvsp[(1) - (2)].nfa); }
+     break;
+ 
+   case 88:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 410 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(1) - (1)].nfa); }
+     break;
+ 
+   case 89:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 414 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (3)].nfa)); delete (yyvsp[(2) - (3)].nfa); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(*(yyvsp[(2) - (3)].nfa)); delete (yyvsp[(2) - (3)].nfa); }
+     break;
+ 
+   case 90:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 415 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = (yyvsp[(2) - (3)].nfa); ;}
++    { (yyval.nfa) = (yyvsp[(2) - (3)].nfa); }
+     break;
+ 
+   case 91:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 416 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::anyChar()); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::anyChar()); }
+     break;
+ 
+   case 92:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 417 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::word(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::word(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); }
+     break;
+ 
+   case 93:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 418 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+       quint32 begin, end;
+@@ -2499,19 +2529,19 @@ yyreduce:
+           end = QChar::surrogateToUcs4(str[3], str[4]);
+       }
+       (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::range(begin, end+1));
+-    ;}
++    }
+     break;
+ 
+   case 94:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 441 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::collection(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::collection(KDevPG::unescaped(QByteArray((yyvsp[(1) - (1)].str))))); }
+     break;
+ 
+   case 95:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 442 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+                               if(!KDevPG::globalSystem.regexpById.contains((yyvsp[(1) - (1)].str)))
+@@ -2527,335 +2557,335 @@ yyreduce:
+                                 *regexp = KDevPG::globalSystem.dfaForNfa[regexp]->nfa();
+                               }
+                               (yyval.nfa) = new KDevPG::GNFA(*regexp);
+-                            ;}
++                            }
+     break;
+ 
+   case 96:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 457 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::emptyWord()); ;}
++    { (yyval.nfa) = new KDevPG::GNFA(KDevPG::GNFA::emptyWord()); }
+     break;
+ 
+   case 97:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 463 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::PublicDeclaration, (yyvsp[(5) - (5)].str));    ;}
++    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::PublicDeclaration, (yyvsp[(5) - (5)].str));    }
+     break;
+ 
+   case 98:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 465 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::ProtectedDeclaration, (yyvsp[(5) - (5)].str)); ;}
++    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::ProtectedDeclaration, (yyvsp[(5) - (5)].str)); }
+     break;
+ 
+   case 99:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 467 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::PrivateDeclaration, (yyvsp[(5) - (5)].str));   ;}
++    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::PrivateDeclaration, (yyvsp[(5) - (5)].str));   }
+     break;
+ 
+   case 100:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 469 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::ConstructorCode, (yyvsp[(4) - (4)].str));      ;}
++    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::ConstructorCode, (yyvsp[(4) - (4)].str));      }
+     break;
+ 
+   case 101:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 471 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::DestructorCode, (yyvsp[(4) - (4)].str));       ;}
++    { (yyval.item) = KDevPG::member(KDevPG::Settings::MemberItem::DestructorCode, (yyvsp[(4) - (4)].str));       }
+     break;
+ 
+   case 102:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 475 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushTerminal((yyvsp[(1) - (1)].str),(yyvsp[(1) - (1)].str)); ;}
++    { KDevPG::globalSystem.pushTerminal((yyvsp[(1) - (1)].str),(yyvsp[(1) - (1)].str)); }
+     break;
+ 
+   case 103:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 476 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushTerminal((yyvsp[(1) - (4)].str),(yyvsp[(3) - (4)].str)); ;}
++    { KDevPG::globalSystem.pushTerminal((yyvsp[(1) - (4)].str),(yyvsp[(3) - (4)].str)); }
+     break;
+ 
+   case 104:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 477 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushTerminal((yyvsp[(3) - (3)].str),(yyvsp[(3) - (3)].str)); ;}
++    { KDevPG::globalSystem.pushTerminal((yyvsp[(3) - (3)].str),(yyvsp[(3) - (3)].str)); }
+     break;
+ 
+   case 105:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 479 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushTerminal((yyvsp[(3) - (6)].str),(yyvsp[(5) - (6)].str)); ;}
++    { KDevPG::globalSystem.pushTerminal((yyvsp[(3) - (6)].str),(yyvsp[(5) - (6)].str)); }
+     break;
+ 
+   case 107:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 484 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.pushRule((yyvsp[(2) - (3)].item)); ;}
++    { KDevPG::globalSystem.pushRule((yyvsp[(2) - (3)].item)); }
+     break;
+ 
+   case 108:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 488 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::globalSystem.zero(); ;}
++    { (yyval.item) = KDevPG::globalSystem.zero(); }
+     break;
+ 
+   case 109:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 489 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(2) - (3)].item); ;}
++    { (yyval.item) = (yyvsp[(2) - (3)].item); }
+     break;
+ 
+   case 110:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 490 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 111:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 491 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 112:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 492 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::inlinedNonTerminal(KDevPG::globalSystem.pushSymbol((yyvsp[(2) - (2)].str))); ;}
++    { (yyval.item) = KDevPG::inlinedNonTerminal(KDevPG::globalSystem.pushSymbol((yyvsp[(2) - (2)].str))); }
+     break;
+ 
+   case 113:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 493 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::annotation((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].item), false, (yyvsp[(2) - (3)].storageType)); ;}
++    { (yyval.item) = KDevPG::annotation((yyvsp[(1) - (3)].str), (yyvsp[(3) - (3)].item), false, (yyvsp[(2) - (3)].storageType)); }
+     break;
+ 
+   case 114:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 494 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::annotation((yyvsp[(2) - (4)].str), (yyvsp[(4) - (4)].item), true, (yyvsp[(3) - (4)].storageType));  ;}
++    { (yyval.item) = KDevPG::annotation((yyvsp[(2) - (4)].str), (yyvsp[(4) - (4)].item), true, (yyvsp[(3) - (4)].storageType));  }
+     break;
+ 
+   case 115:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 498 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::nonTerminal(KDevPG::globalSystem.pushSymbol((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].str)); ;}
++    { (yyval.item) = KDevPG::nonTerminal(KDevPG::globalSystem.pushSymbol((yyvsp[(1) - (2)].str)), (yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 116:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 499 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::globalSystem.terminal((yyvsp[(1) - (1)].str)); ;}
++    { (yyval.item) = KDevPG::globalSystem.terminal((yyvsp[(1) - (1)].str)); }
+     break;
+ 
+   case 117:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 504 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+           KDevPG::globalSystem.needStateManagement = true;
+           (yyval.item) = KDevPG::tryCatch((yyvsp[(3) - (4)].item), 0);
+-        ;}
++        }
+     break;
+ 
+   case 118:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 509 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+           KDevPG::globalSystem.needStateManagement = true;
+           (yyval.item) = KDevPG::tryCatch((yyvsp[(3) - (8)].item), (yyvsp[(7) - (8)].item));
+-        ;}
++        }
+     break;
+ 
+   case 119:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 515 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = const_cast<char*>(""); ;}
++    { (yyval.str) = const_cast<char*>(""); }
+     break;
+ 
+   case 120:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 516 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
++    { (yyval.str) = (yyvsp[(1) - (1)].str); }
+     break;
+ 
+   case 121:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 520 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
++    { (yyval.str) = (yyvsp[(1) - (1)].str); }
+     break;
+ 
+   case 122:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 530 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageAstMember; ;}
++    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageAstMember; }
+     break;
+ 
+   case 123:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 531 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageTemporary;  ;}
++    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageTemporary;  }
+     break;
+ 
+   case 124:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 535 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::plus((yyvsp[(1) - (2)].item)); ;}
++    { (yyval.item) = KDevPG::plus((yyvsp[(1) - (2)].item)); }
+     break;
+ 
+   case 125:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 536 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::star((yyvsp[(1) - (2)].item)); ;}
++    { (yyval.item) = KDevPG::star((yyvsp[(1) - (2)].item)); }
+     break;
+ 
+   case 126:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 537 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 127:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 538 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::alternative((yyvsp[(2) - (2)].item), KDevPG::globalSystem.zero()); ;}
++    { (yyval.item) = KDevPG::alternative((yyvsp[(2) - (2)].item), KDevPG::globalSystem.zero()); }
+     break;
+ 
+   case 128:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 542 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 129:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 544 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+           KDevPG::CloneTree cl;
+           (yyval.item) = KDevPG::cons((yyvsp[(1) - (3)].item), KDevPG::star(KDevPG::cons(cl.clone((yyvsp[(3) - (3)].item)), cl.clone((yyvsp[(1) - (3)].item)))));
+-        ;}
++        }
+     break;
+ 
+   case 130:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 548 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::action((yyvsp[(1) - (2)].item), (yyvsp[(2) - (2)].str)); ;}
++    { (yyval.item) = KDevPG::action((yyvsp[(1) - (2)].item), (yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 131:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 549 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::action(0, (yyvsp[(1) - (1)].str)); ;}
++    { (yyval.item) = KDevPG::action(0, (yyvsp[(1) - (1)].str)); }
+     break;
+ 
+   case 132:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 553 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 133:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 554 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::cons((yyvsp[(1) - (2)].item), (yyvsp[(2) - (2)].item)); ;}
++    { (yyval.item) = KDevPG::cons((yyvsp[(1) - (2)].item), (yyvsp[(2) - (2)].item)); }
+     break;
+ 
+   case 134:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 558 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 135:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 559 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::condition((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].item)); ;}
++    { (yyval.item) = KDevPG::condition((yyvsp[(2) - (3)].str), (yyvsp[(3) - (3)].item)); }
+     break;
+ 
+   case 136:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 563 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 137:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 564 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::alternative((yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); ;}
++    { (yyval.item) = KDevPG::alternative((yyvsp[(1) - (3)].item), (yyvsp[(3) - (3)].item)); }
+     break;
+ 
+   case 138:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 569 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+           (yyval.item) = KDevPG::evolve((yyvsp[(1) - (7)].item), KDevPG::globalSystem.pushSymbol((yyvsp[(3) - (7)].str)),
+                           (KDevPG::Model::VariableDeclarationItem*) (yyvsp[(6) - (7)].item), (yyvsp[(4) - (7)].str));
+-        ;}
++        }
+     break;
+ 
+   case 139:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 574 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+           (yyval.item) = KDevPG::evolve((yyvsp[(1) - (7)].item), KDevPG::globalSystem.pushSymbol((yyvsp[(3) - (7)].str)),
+                           (KDevPG::Model::VariableDeclarationItem*) (yyvsp[(5) - (7)].item), (yyvsp[(7) - (7)].str));
+-        ;}
++        }
+     break;
+ 
+   case 140:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 579 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::evolve((yyvsp[(1) - (4)].item), KDevPG::globalSystem.pushSymbol((yyvsp[(3) - (4)].str)), 0, (yyvsp[(4) - (4)].str)); ;}
++    { (yyval.item) = KDevPG::evolve((yyvsp[(1) - (4)].item), KDevPG::globalSystem.pushSymbol((yyvsp[(3) - (4)].str)), 0, (yyvsp[(4) - (4)].str)); }
+     break;
+ 
+   case 141:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 580 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     { if(KDevPG::globalSystem.generateAst == false)
+         {
+@@ -2863,40 +2893,40 @@ yyreduce:
+           exit(-1);
+         }
+         operatorNode = KDevPG::createNode<KDevPG::Model::OperatorItem>();
+-      ;}
++      }
+     break;
+ 
+   case 142:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 586 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { KDevPG::globalSystem.needOperatorStack = true; (yyval.item) = (yyvsp[(2) - (2)].item); ;}
++    { KDevPG::globalSystem.needOperatorStack = true; (yyval.item) = (yyvsp[(2) - (2)].item); }
+     break;
+ 
+   case 143:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 590 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = const_cast<char*>(""); ;}
++    { (yyval.str) = const_cast<char*>(""); }
+     break;
+ 
+   case 144:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 591 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
++    { (yyval.str) = (yyvsp[(1) - (1)].str); }
+     break;
+ 
+   case 146:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 597 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { ; ;}
++    { ; }
+     break;
+ 
+   case 147:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 602 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               operatorNode->mBase = (KDevPG::Model::NonTerminalItem*)(yyvsp[(2) - (9)].item);
+@@ -2904,12 +2934,12 @@ yyreduce:
+               if(!KDevPG::globalSystem.astBaseClasses.contains(operatorNode->mBase->mSymbol->mName))
+                 KDevPG::globalSystem.astBaseClasses[operatorNode->mBase->mSymbol->mName] = KDevPG::capitalized(operatorNode->mName) + "Ast";
+               (yyval.item) = KDevPG::evolve(operatorNode, KDevPG::globalSystem.pushSymbol((yyvsp[(5) - (9)].str)), (KDevPG::Model::VariableDeclarationItem*)(yyvsp[(7) - (9)].item), (yyvsp[(9) - (9)].str));
+-            ;}
++            }
+     break;
+ 
+   case 148:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 610 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               operatorNode->mBase = (KDevPG::Model::NonTerminalItem*)(yyvsp[(2) - (9)].item);
+@@ -2917,12 +2947,12 @@ yyreduce:
+               if(!KDevPG::globalSystem.astBaseClasses.contains(operatorNode->mBase->mSymbol->mName))
+                 KDevPG::globalSystem.astBaseClasses[operatorNode->mBase->mSymbol->mName] = KDevPG::capitalized(operatorNode->mName) + "Ast";
+               (yyval.item) = KDevPG::evolve(operatorNode, KDevPG::globalSystem.pushSymbol((yyvsp[(5) - (9)].str)), (KDevPG::Model::VariableDeclarationItem*)(yyvsp[(8) - (9)].item), (yyvsp[(6) - (9)].str));
+-            ;}
++            }
+     break;
+ 
+   case 149:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 618 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+               operatorNode->mBase = (KDevPG::Model::NonTerminalItem*)(yyvsp[(2) - (6)].item);
+@@ -2930,89 +2960,89 @@ yyreduce:
+               if(!KDevPG::globalSystem.astBaseClasses.contains(operatorNode->mBase->mSymbol->mName))
+                 KDevPG::globalSystem.astBaseClasses[operatorNode->mBase->mSymbol->mName] = KDevPG::capitalized(operatorNode->mName) + "Ast";
+               (yyval.item) = KDevPG::evolve(operatorNode, KDevPG::globalSystem.pushSymbol((yyvsp[(5) - (6)].str)), 0, (yyvsp[(6) - (6)].str));
+-            ;}
++            }
+     break;
+ 
+   case 150:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 628 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { operatorNode->pushBin(*(yyvsp[(2) - (4)].operatorInformation), (yyvsp[(4) - (4)].str), (yyvsp[(3) - (4)].str)); free((yyvsp[(2) - (4)].operatorInformation)); ;}
++    { operatorNode->pushBin(*(yyvsp[(2) - (4)].operatorInformation), (yyvsp[(4) - (4)].str), (yyvsp[(3) - (4)].str)); free((yyvsp[(2) - (4)].operatorInformation)); }
+     break;
+ 
+   case 151:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 629 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { operatorNode->pushTern(*(yyvsp[(2) - (5)].operatorInformation), *(yyvsp[(3) - (5)].operatorInformation), (yyvsp[(5) - (5)].str), (yyvsp[(4) - (5)].str)); free((yyvsp[(2) - (5)].operatorInformation)); free((yyvsp[(3) - (5)].operatorInformation)); ;}
++    { operatorNode->pushTern(*(yyvsp[(2) - (5)].operatorInformation), *(yyvsp[(3) - (5)].operatorInformation), (yyvsp[(5) - (5)].str), (yyvsp[(4) - (5)].str)); free((yyvsp[(2) - (5)].operatorInformation)); free((yyvsp[(3) - (5)].operatorInformation)); }
+     break;
+ 
+   case 152:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 630 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { operatorNode->pushPre(*(yyvsp[(2) - (3)].operatorInformation), (yyvsp[(3) - (3)].str)); free((yyvsp[(2) - (3)].operatorInformation)); ;}
++    { operatorNode->pushPre(*(yyvsp[(2) - (3)].operatorInformation), (yyvsp[(3) - (3)].str)); free((yyvsp[(2) - (3)].operatorInformation)); }
+     break;
+ 
+   case 153:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 631 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { operatorNode->pushPost(*(yyvsp[(2) - (3)].operatorInformation), "0", (yyvsp[(3) - (3)].str)); free((yyvsp[(2) - (3)].operatorInformation)); free((yyvsp[(3) - (3)].str)); ;}
++    { operatorNode->pushPost(*(yyvsp[(2) - (3)].operatorInformation), "0", (yyvsp[(3) - (3)].str)); free((yyvsp[(2) - (3)].operatorInformation)); free((yyvsp[(3) - (3)].str)); }
+     break;
+ 
+   case 154:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 632 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { operatorNode->pushPost(*(yyvsp[(2) - (4)].operatorInformation), (yyvsp[(4) - (4)].str), (yyvsp[(3) - (4)].str)); free((yyvsp[(2) - (4)].operatorInformation)); ;}
++    { operatorNode->pushPost(*(yyvsp[(2) - (4)].operatorInformation), (yyvsp[(4) - (4)].str), (yyvsp[(3) - (4)].str)); free((yyvsp[(2) - (4)].operatorInformation)); }
+     break;
+ 
+   case 155:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 633 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { operatorNode->pushParen(*(yyvsp[(2) - (3)].operatorInformation), *(yyvsp[(3) - (3)].operatorInformation)); free((yyvsp[(2) - (3)].operatorInformation)); free((yyvsp[(3) - (3)].operatorInformation)); ;}
++    { operatorNode->pushParen(*(yyvsp[(2) - (3)].operatorInformation), *(yyvsp[(3) - (3)].operatorInformation)); free((yyvsp[(2) - (3)].operatorInformation)); free((yyvsp[(3) - (3)].operatorInformation)); }
+     break;
+ 
+   case 156:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 637 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (char*)"0"; ;}
++    { (yyval.str) = (char*)"0"; }
+     break;
+ 
+   case 157:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 638 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (yyvsp[(1) - (1)].str); ;}
++    { (yyval.str) = (yyvsp[(1) - (1)].str); }
+     break;
+ 
+   case 158:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 639 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (yyvsp[(2) - (2)].str); ;}
++    { (yyval.str) = (yyvsp[(2) - (2)].str); }
+     break;
+ 
+   case 159:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 643 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (char*)"1"; ;}
++    { (yyval.str) = (char*)"1"; }
+     break;
+ 
+   case 160:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 644 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.str) = (char*)"0"; ;}
++    { (yyval.str) = (char*)"0"; }
+     break;
+ 
+   case 161:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 645 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     { uint yyleng = strlen((yyvsp[(2) - (2)].str));
+                                      char *tmp = (char*)calloc(yyleng+7, sizeof(char));
+@@ -3020,12 +3050,12 @@ yyreduce:
+                                      strcpy(tmp+1, (yyvsp[(2) - (2)].str));
+                                      strcpy(tmp+yyleng+6-6+1, "?1:0)");
+                                      (yyval.str) = tmp;
+-                                   ;}
++                                   }
+     break;
+ 
+   case 162:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 652 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     { uint yyleng = strlen((yyvsp[(2) - (2)].str));
+                                      char *tmp = (char*)calloc(yyleng+7, sizeof(char));
+@@ -3033,47 +3063,47 @@ yyreduce:
+                                      strcpy(tmp+1, (yyvsp[(2) - (2)].str));
+                                      strcpy(tmp+yyleng+6-6+1, "?0:1)");
+                                      (yyval.str) = tmp;
+-                                   ;}
++                                   }
+     break;
+ 
+   case 163:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 662 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(3) - (4)].str)), (yyvsp[(2) - (4)].str), (yyvsp[(4) - (4)].str)); ;}
++    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(3) - (4)].str)), (yyvsp[(2) - (4)].str), (yyvsp[(4) - (4)].str)); }
+     break;
+ 
+   case 164:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 663 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(3) - (3)].str)), (yyvsp[(2) - (3)].str), ""); ;}
++    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(3) - (3)].str)), (yyvsp[(2) - (3)].str), ""); }
+     break;
+ 
+   case 165:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 664 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(1) - (2)].str)), "", (yyvsp[(2) - (2)].str)); ;}
++    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(1) - (2)].str)), "", (yyvsp[(2) - (2)].str)); }
+     break;
+ 
+   case 166:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 665 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(1) - (1)].str)), "", ""); ;}
++    { (yyval.operatorInformation) = KDevPG::makeOperator(KDevPG::globalSystem.terminal((yyvsp[(1) - (1)].str)), "", ""); }
+     break;
+ 
+   case 167:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 669 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = (yyvsp[(1) - (1)].item); ;}
++    { (yyval.item) = (yyvsp[(1) - (1)].item); }
+     break;
+ 
+   case 168:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 671 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+     {
+           KDevPG::Model::VariableDeclarationItem *last = (KDevPG::Model::VariableDeclarationItem*) (yyvsp[(1) - (2)].item);
+@@ -3082,85 +3112,96 @@ yyreduce:
+           }
+           last->mNext = (KDevPG::Model::VariableDeclarationItem*) (yyvsp[(2) - (2)].item);
+           (yyval.item) = (yyvsp[(1) - (2)].item);
+-        ;}
++        }
+     break;
+ 
+   case 169:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 683 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (6)].declarationType), (yyvsp[(2) - (6)].storageType), (yyvsp[(3) - (6)].variableType), false, (yyvsp[(4) - (6)].str), (yyvsp[(6) - (6)].str)); ;}
++    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (6)].declarationType), (yyvsp[(2) - (6)].storageType), (yyvsp[(3) - (6)].variableType), false, (yyvsp[(4) - (6)].str), (yyvsp[(6) - (6)].str)); }
+     break;
+ 
+   case 170:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 685 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (5)].declarationType), (yyvsp[(2) - (5)].storageType), KDevPG::Model::VariableDeclarationItem::TypeToken, false, (yyvsp[(4) - (5)].str), ""); ;}
++    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (5)].declarationType), (yyvsp[(2) - (5)].storageType), KDevPG::Model::VariableDeclarationItem::TypeToken, false, (yyvsp[(4) - (5)].str), ""); }
+     break;
+ 
+   case 171:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 687 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (7)].declarationType), (yyvsp[(2) - (7)].storageType), (yyvsp[(3) - (7)].variableType), true, (yyvsp[(5) - (7)].str), (yyvsp[(7) - (7)].str)); ;}
++    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (7)].declarationType), (yyvsp[(2) - (7)].storageType), (yyvsp[(3) - (7)].variableType), true, (yyvsp[(5) - (7)].str), (yyvsp[(7) - (7)].str)); }
+     break;
+ 
+   case 172:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 689 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (6)].declarationType), (yyvsp[(2) - (6)].storageType), KDevPG::Model::VariableDeclarationItem::TypeToken, true, (yyvsp[(5) - (6)].str), ""); ;}
++    { (yyval.item) = KDevPG::variableDeclaration((yyvsp[(1) - (6)].declarationType), (yyvsp[(2) - (6)].storageType), KDevPG::Model::VariableDeclarationItem::TypeToken, true, (yyvsp[(5) - (6)].str), ""); }
+     break;
+ 
+   case 173:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 693 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.declarationType) = KDevPG::Model::VariableDeclarationItem::DeclarationLocal;     ;}
++    { (yyval.declarationType) = KDevPG::Model::VariableDeclarationItem::DeclarationLocal;     }
+     break;
+ 
+   case 174:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 694 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.declarationType) = KDevPG::Model::VariableDeclarationItem::DeclarationArgument;  ;}
++    { (yyval.declarationType) = KDevPG::Model::VariableDeclarationItem::DeclarationArgument;  }
+     break;
+ 
+   case 175:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 698 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageAstMember;    ;}
++    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageAstMember;    }
+     break;
+ 
+   case 176:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 699 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageTemporary;     ;}
++    { (yyval.storageType) = KDevPG::Model::VariableDeclarationItem::StorageTemporary;     }
+     break;
+ 
+   case 177:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 703 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.variableType) = KDevPG::Model::VariableDeclarationItem::TypeNode;             ;}
++    { (yyval.variableType) = KDevPG::Model::VariableDeclarationItem::TypeNode;             }
+     break;
+ 
+   case 178:
+ 
+-/* Line 1455 of yacc.c  */
++/* Line 1806 of yacc.c  */
+ #line 704 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { (yyval.variableType) = KDevPG::Model::VariableDeclarationItem::TypeVariable;         ;}
++    { (yyval.variableType) = KDevPG::Model::VariableDeclarationItem::TypeVariable;         }
+     break;
+ 
+ 
+ 
+-/* Line 1455 of yacc.c  */
+-#line 3162 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
++/* Line 1806 of yacc.c  */
++#line 3192 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.cc"
+       default: break;
+     }
++  /* User semantic actions sometimes alter yychar, and that requires
++     that yytoken be updated with the new translation.  We take the
++     approach of translating immediately before every use of yytoken.
++     One alternative is translating here after every semantic action,
++     but that translation would be missed if the semantic action invokes
++     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
++     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
++     incorrect destructor might then be invoked immediately.  In the
++     case of YYERROR or YYBACKUP, subsequent parser actions might lead
++     to an incorrect destructor call or verbose syntax error message
++     before the lookahead is translated.  */
+   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+ 
+   YYPOPSTACK (yylen);
+@@ -3188,6 +3229,10 @@ yyreduce:
+ | yyerrlab -- here on detecting error |
+ `------------------------------------*/
+ yyerrlab:
++  /* Make sure we have latest lookahead translation.  See comments at
++     user semantic actions for why this is necessary.  */
++  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
++
+   /* If not already recovering from an error, report this error.  */
+   if (!yyerrstatus)
+     {
+@@ -3195,37 +3240,36 @@ yyerrlab:
+ #if ! YYERROR_VERBOSE
+       yyerror (YY_("syntax error"));
+ #else
++# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
++                                        yyssp, yytoken)
+       {
+-	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+-	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+-	  {
+-	    YYSIZE_T yyalloc = 2 * yysize;
+-	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+-	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+-	    if (yymsg != yymsgbuf)
+-	      YYSTACK_FREE (yymsg);
+-	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+-	    if (yymsg)
+-	      yymsg_alloc = yyalloc;
+-	    else
+-	      {
+-		yymsg = yymsgbuf;
+-		yymsg_alloc = sizeof yymsgbuf;
+-	      }
+-	  }
+-
+-	if (0 < yysize && yysize <= yymsg_alloc)
+-	  {
+-	    (void) yysyntax_error (yymsg, yystate, yychar);
+-	    yyerror (yymsg);
+-	  }
+-	else
+-	  {
+-	    yyerror (YY_("syntax error"));
+-	    if (yysize != 0)
+-	      goto yyexhaustedlab;
+-	  }
++        char const *yymsgp = YY_("syntax error");
++        int yysyntax_error_status;
++        yysyntax_error_status = YYSYNTAX_ERROR;
++        if (yysyntax_error_status == 0)
++          yymsgp = yymsg;
++        else if (yysyntax_error_status == 1)
++          {
++            if (yymsg != yymsgbuf)
++              YYSTACK_FREE (yymsg);
++            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
++            if (!yymsg)
++              {
++                yymsg = yymsgbuf;
++                yymsg_alloc = sizeof yymsgbuf;
++                yysyntax_error_status = 2;
++              }
++            else
++              {
++                yysyntax_error_status = YYSYNTAX_ERROR;
++                yymsgp = yymsg;
++              }
++          }
++        yyerror (yymsgp);
++        if (yysyntax_error_status == 2)
++          goto yyexhaustedlab;
+       }
++# undef YYSYNTAX_ERROR
+ #endif
+     }
+ 
+@@ -3284,7 +3328,7 @@ yyerrlab1:
+   for (;;)
+     {
+       yyn = yypact[yystate];
+-      if (yyn != YYPACT_NINF)
++      if (!yypact_value_is_default (yyn))
+ 	{
+ 	  yyn += YYTERROR;
+ 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+@@ -3343,8 +3387,13 @@ yyexhaustedlab:
+ 
+ yyreturn:
+   if (yychar != YYEMPTY)
+-     yydestruct ("Cleanup: discarding lookahead",
+-		 yytoken, &yylval);
++    {
++      /* Make sure we have latest lookahead translation.  See comments at
++         user semantic actions for why this is necessary.  */
++      yytoken = YYTRANSLATE (yychar);
++      yydestruct ("Cleanup: discarding lookahead",
++                  yytoken, &yylval);
++    }
+   /* Do not reclaim the symbols of the rule which action triggered
+      this YYABORT or YYACCEPT.  */
+   YYPOPSTACK (yylen);
+@@ -3369,7 +3418,7 @@ yyreturn:
+ 
+ 
+ 
+-/* Line 1675 of yacc.c  */
++/* Line 2067 of yacc.c  */
+ #line 707 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+ 
+ 
+diff --git a/kdev-pg/kdev-pg-parser.hh b/kdev-pg/kdev-pg-parser.hh
+index 3b909d8..a81e4e3 100644
+--- a/kdev-pg/kdev-pg-parser.hh
++++ b/kdev-pg/kdev-pg-parser.hh
+@@ -1,10 +1,8 @@
++/* A Bison parser, made by GNU Bison 2.5.  */
+ 
+-/* A Bison parser, made by GNU Bison 2.4.1.  */
+-
+-/* Skeleton interface for Bison's Yacc-like parsers in C
++/* Bison interface for Yacc-like parsers in C
+    
+-      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+-   Free Software Foundation, Inc.
++      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
+    
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+@@ -115,7 +113,7 @@
+ typedef union YYSTYPE
+ {
+ 
+-/* Line 1676 of yacc.c  */
++/* Line 2068 of yacc.c  */
+ #line 49 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+ 
+     KDevPG::Model::Node *item;
+@@ -128,8 +126,8 @@ typedef union YYSTYPE
+ 
+ 
+ 
+-/* Line 1676 of yacc.c  */
+-#line 133 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.hh"
++/* Line 2068 of yacc.c  */
++#line 131 "/home/jonathan/gitKDE/kdevelop-pg-qt/build/kdev-pg/kdev-pg-parser.hh"
+ } YYSTYPE;
+ # define YYSTYPE_IS_TRIVIAL 1
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+-- 
+1.9.3
+
diff --git a/0010-version-strings.patch b/0010-version-strings.patch
new file mode 100644
index 0000000..63f8cb3
--- /dev/null
+++ b/0010-version-strings.patch
@@ -0,0 +1,50 @@
+From 90d20fbd15bba91c5a21f08e5332f763da5569e8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonathan=20Schmidt-Domin=C3=A9?= <git at the-user.org>
+Date: Wed, 31 Oct 2012 17:00:22 +0100
+Subject: [PATCH 10/17] version strings
+
+---
+ cmake/modules/KDevelop-PG-QtConfig.cmake        |  4 ++--
+ cmake/modules/KDevelop-PG-QtConfigVersion.cmake | 10 +++++-----
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/cmake/modules/KDevelop-PG-QtConfig.cmake b/cmake/modules/KDevelop-PG-QtConfig.cmake
+index 72f41ae..604009d 100644
+--- a/cmake/modules/KDevelop-PG-QtConfig.cmake
++++ b/cmake/modules/KDevelop-PG-QtConfig.cmake
+@@ -195,8 +195,8 @@ message(STATUS "Using kdevelop-pg-qt executable: ${KDEVPGQT_EXECUTABLE}")
+ endif(KDEVPGQT_FOUND)
+ message(STATUS ${PACKAGE_FIND_NAME})
+ message(STATUS ${PACKAGE_FIND_VERSION})
+-set(KDevelop-PG-Qt_VERSION 1.0.0)
++set(KDevelop-PG-Qt_VERSION 1.0.1)
+ set(KDevelop-PG-Qt_VERSION_COUNT 3)
+ set(KDevelop-PG-Qt_VERSION_MAJOR 1)
+ set(KDevelop-PG-Qt_VERSION_MINOR 0)
+-set(KDevelop-PG-Qt_VERSION_PATCH true)
+\ No newline at end of file
++set(KDevelop-PG-Qt_VERSION_PATCH 1)
+\ No newline at end of file
+diff --git a/cmake/modules/KDevelop-PG-QtConfigVersion.cmake b/cmake/modules/KDevelop-PG-QtConfigVersion.cmake
+index cf4fa18..331c519 100644
+--- a/cmake/modules/KDevelop-PG-QtConfigVersion.cmake
++++ b/cmake/modules/KDevelop-PG-QtConfigVersion.cmake
+@@ -1,9 +1,9 @@
+-set(PACKAGE_VERSION 1.0.0)
++set(PACKAGE_VERSION 1.0.1)
+ if("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 1)
+-   if("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 0)
+-     if("${PACKAGE_FIND_VERSION_PATCH}" EQUAL 0)
+-       set(PACKAGE_VERSION_COMPATIBLE 1)
++  if("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 0)
++     set(PACKAGE_VERSION_COMPATIBLE 1)
++     if("${PACKAGE_FIND_VERSION_PATCH}" EQUAL 1)
+        set(PACKAGE_VERSION_EXACT 1)
+-     endif("${PACKAGE_FIND_VERSION_PATCH}" EQUAL 0)
++     endif("${PACKAGE_FIND_VERSION_PATCH}" EQUAL 1)
+   endif("${PACKAGE_FIND_VERSION_MINOR}" EQUAL 0)
+ endif("${PACKAGE_FIND_VERSION_MAJOR}" EQUAL 1)
+\ No newline at end of file
+-- 
+1.9.3
+
diff --git a/0011-fix-some-warnings.patch b/0011-fix-some-warnings.patch
new file mode 100644
index 0000000..7392fbf
--- /dev/null
+++ b/0011-fix-some-warnings.patch
@@ -0,0 +1,53 @@
+From ac587957cd0cabbc668604507e2cfebb6810ed09 Mon Sep 17 00:00:00 2001
+From: Milian Wolff <mail at milianw.de>
+Date: Thu, 29 Nov 2012 15:56:40 +0100
+Subject: [PATCH 11/17] fix some warnings
+
+---
+ kdev-pg/kdev-pg-code-gen.cpp | 2 +-
+ kdev-pg/kdev-pg-lexer.ll     | 2 +-
+ kdev-pg/kdev-pg-parser.yy    | 2 +-
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/kdev-pg/kdev-pg-code-gen.cpp b/kdev-pg/kdev-pg-code-gen.cpp
+index e06c6be..badb461 100644
+--- a/kdev-pg/kdev-pg-code-gen.cpp
++++ b/kdev-pg/kdev-pg-code-gen.cpp
+@@ -51,7 +51,7 @@ namespace KDevPG
+ 
+   void generateCondition(const World::NodeSet& s, QTextStream& out)
+   {
+-    if(s.size() == 0 || s.size() == 1 && nodeCast<Model::ZeroItem*>(*s.begin()) != 0)
++    if(s.size() == 0 || (s.size() == 1 && nodeCast<Model::ZeroItem*>(*s.begin()) != 0))
+     {
+       out << "true /*epsilon*/";
+       return;
+diff --git a/kdev-pg/kdev-pg-lexer.ll b/kdev-pg/kdev-pg-lexer.ll
+index a0864af..9261d71 100644
+--- a/kdev-pg/kdev-pg-lexer.ll
++++ b/kdev-pg/kdev-pg-lexer.ll
+@@ -425,7 +425,7 @@ void appendLineBuffer()
+   strcpy(yyTextLine+currentOffset, yytext + (yymoreFlag ? lastTextLeng : 0)); /* append current */
+   /* strcpy is faster than strcat */
+   
+-  Q_ASSERT(strlen(yyTextLine) < yyTextLineLeng);
++  Q_ASSERT(strlen(yyTextLine) < size_t(yyTextLineLeng));
+   
+   lastTextLeng = strlen(yytext);
+   yymoreFlag = false;
+diff --git a/kdev-pg/kdev-pg-parser.yy b/kdev-pg/kdev-pg-parser.yy
+index d5a25f5..8f8d604 100644
+--- a/kdev-pg/kdev-pg-parser.yy
++++ b/kdev-pg/kdev-pg-parser.yy
+@@ -309,7 +309,7 @@ opt_lexer_action
+     | T_CONTINUE {
+         r = "\nlxCONTINUE;\n";
+       }
+-    | /* empty */ { r = "\nlxSKIP\n" }
++    | /* empty */ { r = "\nlxSKIP\n"; }
+     ;
+ 
+ regexp
+-- 
+1.9.3
+
diff --git a/0012-updated-generated-files.patch b/0012-updated-generated-files.patch
new file mode 100644
index 0000000..777309c
--- /dev/null
+++ b/0012-updated-generated-files.patch
@@ -0,0 +1,39 @@
+From 97e140477e7247ec8c823cdc54500b5691d9a896 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Jonathan=20Schmidt-Domin=C3=A9?= <git at the-user.org>
+Date: Thu, 29 Nov 2012 16:02:28 +0100
+Subject: [PATCH 12/17] updated generated files
+
+---
+ kdev-pg/kdev-pg-lexer.cc  | 2 +-
+ kdev-pg/kdev-pg-parser.cc | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/kdev-pg/kdev-pg-lexer.cc b/kdev-pg/kdev-pg-lexer.cc
+index 0009ccb..b874f85 100644
+--- a/kdev-pg/kdev-pg-lexer.cc
++++ b/kdev-pg/kdev-pg-lexer.cc
+@@ -3423,7 +3423,7 @@ void appendLineBuffer()
+   strcpy(yyTextLine+currentOffset, yytext + (yymoreFlag ? lastTextLeng : 0)); /* append current */
+   /* strcpy is faster than strcat */
+   
+-  Q_ASSERT(strlen(yyTextLine) < yyTextLineLeng);
++  Q_ASSERT(strlen(yyTextLine) < size_t(yyTextLineLeng));
+   
+   lastTextLeng = strlen(yytext);
+   yymoreFlag = false;
+diff --git a/kdev-pg/kdev-pg-parser.cc b/kdev-pg/kdev-pg-parser.cc
+index 4636927..2cfbc87 100644
+--- a/kdev-pg/kdev-pg-parser.cc
++++ b/kdev-pg/kdev-pg-parser.cc
+@@ -2192,7 +2192,7 @@ yyreduce:
+ 
+ /* Line 1806 of yacc.c  */
+ #line 312 "/home/jonathan/gitKDE/kdevelop-pg-qt/kdev-pg/kdev-pg-parser.yy"
+-    { r = "\nlxSKIP\n" ;}
++    { r = "\nlxSKIP\n"; }
+     break;
+ 
+   case 50:
+-- 
+1.9.3
+
diff --git a/0013-Fix-some-clang-compiler-warnings.patch b/0013-Fix-some-clang-compiler-warnings.patch
new file mode 100644
index 0000000..698a9e5
--- /dev/null
+++ b/0013-Fix-some-clang-compiler-warnings.patch
@@ -0,0 +1,48 @@
+From c265a5cdfc0618ec18d4dbbcf27cdfbe0fb932c8 Mon Sep 17 00:00:00 2001
+From: Milian Wolff <mail at milianw.de>
+Date: Sun, 4 Aug 2013 21:36:49 +0200
+Subject: [PATCH 13/17] Fix some clang compiler warnings
+
+---
+ include/kdev-pg-allocator.h | 4 ++--
+ include/kdev-pg-char-sets.h | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/include/kdev-pg-allocator.h b/include/kdev-pg-allocator.h
+index 6ba306b..fe860de 100644
+--- a/include/kdev-pg-allocator.h
++++ b/include/kdev-pg-allocator.h
+@@ -107,7 +107,7 @@ public:
+     return p;
+   }
+ 
+-  void deallocate(pointer __p, sizeType __n)
++  void deallocate(pointer /*__p*/, sizeType /*__n*/)
+   {}
+ 
+   sizeType maxSize() const
+@@ -132,7 +132,7 @@ private:
+   };
+ 
+   template <class _Tp1>
+-  Allocator(const Allocator<_Tp1> &__o)
++  Allocator(const Allocator<_Tp1> &/*__o*/)
+   {}
+ 
+ private:
+diff --git a/include/kdev-pg-char-sets.h b/include/kdev-pg-char-sets.h
+index 5b2b428..1ac38d4 100644
+--- a/include/kdev-pg-char-sets.h
++++ b/include/kdev-pg-char-sets.h
+@@ -164,7 +164,7 @@ struct Codec2Size<Ucs4>
+ };
+ 
+ template<CharEncoding codec>
+-inline typename Codec2Container<codec>::Result qString2Codec(const QString& str)
++inline typename Codec2Container<codec>::Result qString2Codec(const QString& /*str*/)
+ {
+   static_assert(Codec2False<codec>::value, "Unknown codec");
+ }
+-- 
+1.9.3
+
diff --git a/0014-Fix-compile-with-clang-also-enable-exceptions-there.patch b/0014-Fix-compile-with-clang-also-enable-exceptions-there.patch
new file mode 100644
index 0000000..cd8d82f
--- /dev/null
+++ b/0014-Fix-compile-with-clang-also-enable-exceptions-there.patch
@@ -0,0 +1,29 @@
+From f32988dbaefcad34ab7966676058629e73c438fd Mon Sep 17 00:00:00 2001
+From: Milian Wolff <mail at milianw.de>
+Date: Sun, 4 Aug 2013 21:37:01 +0200
+Subject: [PATCH 14/17] Fix compile with clang, also enable exceptions there.
+
+---
+ kdev-pg/CMakeLists.txt | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/kdev-pg/CMakeLists.txt b/kdev-pg/CMakeLists.txt
+index 7022121..516f5b3 100644
+--- a/kdev-pg/CMakeLists.txt
++++ b/kdev-pg/CMakeLists.txt
+@@ -4,9 +4,9 @@ PROJECT(kdevpg)
+ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+ REMOVE_DEFINITIONS(-DQT_NO_STL)
+ ADD_DEFINITIONS(-DQT_STL)
+-if(CMAKE_COMPILER_IS_GNUCC)
+-    add_definitions(-fexceptions)
+-endif(CMAKE_COMPILER_IS_GNUCC)
++if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_CXX_COMPILER_ID MATCHES Clang)
++    add_definitions(-fexceptions -std=c++11)
++endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_CXX_COMPILER_ID MATCHES Clang)
+ 
+ QT4_ADD_RESOURCES(kdevpg_rcc_srcs ../unidata.qrc)
+ 
+-- 
+1.9.3
+
diff --git a/0015-std-c-11-std-c-0x-to-fix-build-on-build.kde.org.patch b/0015-std-c-11-std-c-0x-to-fix-build-on-build.kde.org.patch
new file mode 100644
index 0000000..d91bb8f
--- /dev/null
+++ b/0015-std-c-11-std-c-0x-to-fix-build-on-build.kde.org.patch
@@ -0,0 +1,26 @@
+From 5209a0439006c1ceac6e25fe583a8f1e068af0b8 Mon Sep 17 00:00:00 2001
+From: Sven Brauch <svenbrauch at googlemail.com>
+Date: Sun, 8 Sep 2013 01:24:00 +0200
+Subject: [PATCH 15/17] -std=c++11 -> -std=c++0x to fix build on build.kde.org
+
+still builds with gcc 4.8
+---
+ kdev-pg/CMakeLists.txt | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/kdev-pg/CMakeLists.txt b/kdev-pg/CMakeLists.txt
+index 516f5b3..57eb03b 100644
+--- a/kdev-pg/CMakeLists.txt
++++ b/kdev-pg/CMakeLists.txt
+@@ -5,7 +5,7 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
+ REMOVE_DEFINITIONS(-DQT_NO_STL)
+ ADD_DEFINITIONS(-DQT_STL)
+ if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_CXX_COMPILER_ID MATCHES Clang)
+-    add_definitions(-fexceptions -std=c++11)
++    add_definitions(-fexceptions -std=c++0x)
+ endif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_CXX_COMPILER_ID MATCHES Clang)
+ 
+ QT4_ADD_RESOURCES(kdevpg_rcc_srcs ../unidata.qrc)
+-- 
+1.9.3
+
diff --git a/0016-Make-it-possible-to-build-without-tests.patch b/0016-Make-it-possible-to-build-without-tests.patch
new file mode 100644
index 0000000..a598d89
--- /dev/null
+++ b/0016-Make-it-possible-to-build-without-tests.patch
@@ -0,0 +1,26 @@
+From 40a5142bff0b870b6b389fdb92e78431afeabe79 Mon Sep 17 00:00:00 2001
+From: Kevin Funk <kevin at kfunk.org>
+Date: Fri, 24 Jan 2014 16:11:17 +0100
+Subject: [PATCH 16/17] Make it possible to build without tests
+
+This is still ON by default, though. See
+http://marc.info/?l=kde-commits&m=134980086725078
+---
+ CMakeLists.txt | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 0ed26eb..121ad3d 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -47,7 +47,6 @@ add_subdirectory(examples EXCLUDE_FROM_ALL)
+ 
+ if(KDE4_FOUND)
+     enable_testing()
+-    set(KDE4_BUILD_TESTS "ON" CACHE "BOOL" "Enable building of tests" FORCE )
+     add_subdirectory(tests)
+ endif(KDE4_FOUND)
+ 
+-- 
+1.9.3
+
diff --git a/0017-CMake-Fix-printing-of-empty-lines.patch b/0017-CMake-Fix-printing-of-empty-lines.patch
new file mode 100644
index 0000000..7363b74
--- /dev/null
+++ b/0017-CMake-Fix-printing-of-empty-lines.patch
@@ -0,0 +1,29 @@
+From e7f6e60c6a138fd891556c630f6783259b489e1e Mon Sep 17 00:00:00 2001
+From: Kevin Funk <kfunk at kde.org>
+Date: Sat, 7 Jun 2014 11:04:25 +0200
+Subject: [PATCH 17/17] CMake: Fix printing of empty lines
+
+---
+ cmake/modules/KDevelop-PG-QtConfig.cmake | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+diff --git a/cmake/modules/KDevelop-PG-QtConfig.cmake b/cmake/modules/KDevelop-PG-QtConfig.cmake
+index 604009d..601e23d 100644
+--- a/cmake/modules/KDevelop-PG-QtConfig.cmake
++++ b/cmake/modules/KDevelop-PG-QtConfig.cmake
+@@ -193,10 +193,8 @@ if(KDEVPGQT_FOUND)
+ message(STATUS "Using kdevelop-pg-qt include dir: ${KDEVPGQT_INCLUDE_DIR}")
+ message(STATUS "Using kdevelop-pg-qt executable: ${KDEVPGQT_EXECUTABLE}")
+ endif(KDEVPGQT_FOUND)
+-message(STATUS ${PACKAGE_FIND_NAME})
+-message(STATUS ${PACKAGE_FIND_VERSION})
+ set(KDevelop-PG-Qt_VERSION 1.0.1)
+ set(KDevelop-PG-Qt_VERSION_COUNT 3)
+ set(KDevelop-PG-Qt_VERSION_MAJOR 1)
+ set(KDevelop-PG-Qt_VERSION_MINOR 0)
+-set(KDevelop-PG-Qt_VERSION_PATCH 1)
+\ No newline at end of file
++set(KDevelop-PG-Qt_VERSION_PATCH 1)
+-- 
+1.9.3
+
diff --git a/kdevelop-pg-qt.spec b/kdevelop-pg-qt.spec
index c3d487e..ff19684 100644
--- a/kdevelop-pg-qt.spec
+++ b/kdevelop-pg-qt.spec
@@ -2,14 +2,29 @@
 Name:           kdevelop-pg-qt
 Summary:        A parser generator 
 Version:        1.0.0
-Release:        5%{?dist}
+Release:        6%{?dist}
 
 # All LGPLv2+, except for bison-generated kdev-pg-parser.{cc.h} which are GPLv2+
 License:        LGPLv2+ and GPLv2+ with exception
-Group:          Development/Tools
 URL:            http://techbase.kde.org/Development/KDevelop-PG-Qt_Introduction
-Source0:        ftp://ftp.kde.org/pub/kde/stable/kdevelop-pg-qt/%{version}/src/kdevelop-pg-qt-%{version}.tar.bz2
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Source0:        http://download.kde.org/stable/kdevelop-pg-qt/%{version}/src/kdevelop-pg-qt-%{version}.tar.bz2
+
+Patch1: 0001-set-LIB_INSTALL_DIR-even-with-no-KDE4-stuff.patch
+Patch2: 0002-Some-std-string-support-in-iterators.patch
+Patch3: 0003-bugfix-inserting-user-generated-code.patch
+Patch4: 0004-add-CTest-CDash-config-for-KDevelop-PG-Qt.patch
+Patch5: 0005-force-building-of-unit-tests.patch
+Patch7: 0007-Fixed-the-bit-array-implementation-and-replaced-vect.patch
+Patch8: 0008-Fixed-handling-of-overflows-in-TokenStream-read.patch
+Patch9: 0009-Updated-generated-files.patch
+Patch10:0010-version-strings.patch
+Patch11:0011-fix-some-warnings.patch
+Patch12:0012-updated-generated-files.patch
+Patch13:0013-Fix-some-clang-compiler-warnings.patch
+Patch14:0014-Fix-compile-with-clang-also-enable-exceptions-there.patch
+Patch15:0015-std-c-11-std-c-0x-to-fix-build-on-build.kde.org.patch
+Patch16:0016-Make-it-possible-to-build-without-tests.patch
+Patch17:0017-CMake-Fix-printing-of-empty-lines.patch
 
 BuildRequires:  bison
 BuildRequires:  flex
@@ -23,7 +38,6 @@ implements the visitor-pattern and uses the Qt library. That is why it
 is ideal to be used in Qt-/KDE-based applications like KDevelop.
 
 %package devel
-Group:    Development/Libraries
 Summary:  Developer files for %{name}
 Requires: %{name}%{?_isa} = %{version}-%{release}
 Requires: kdelibs4-devel
@@ -34,7 +48,7 @@ Obsoletes: kdevelop-pg-qt-devel < 1.0.0-1
 
 
 %prep
-%setup -q -n kdevelop-pg-qt-%{version}
+%autosetup -p1
 
 
 %build
@@ -47,28 +61,23 @@ make %{?_smp_mflags} -C %{_target_platform}
 
 
 %install
-rm -rf %{buildroot}
-
 make install/fast DESTDIR=%{buildroot} -C %{_target_platform}
 
 
-%clean
-rm -rf %{buildroot}
-
-
 %files 
-%defattr(-,root,root,-)
 %doc AUTHORS COPYING.LIB README
 %{_bindir}/kdev-pg-qt
 
 %files devel
-%defattr(-,root,root,-)
 %{_includedir}/kdevelop-pg-qt/
 %dir %{_libdir}/cmake
 %{_libdir}/cmake/KDevelop-PG-Qt/
 
 
 %changelog
+* Tue Jun 10 2014 Rex Dieter <rdieter at fedoraproject.org> 1.0.0-6
+- pull in upstream commits, .spec cleanup
+
 * Sun Jun 08 2014 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.0.0-5
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
 


More information about the scm-commits mailing list