Index: src/org/python/pydev/parser/jython/ast/num_typeType.java
===================================================================
--- src/org/python/pydev/parser/jython/ast/num_typeType.java	(revision 0)
+++ src/org/python/pydev/parser/jython/ast/num_typeType.java	(revision 412)
@@ -0,0 +1,21 @@
+// Autogenerated AST node
+package org.python.pydev.parser.jython.ast;
+
+public interface num_typeType {
+    public static final int Int = 1;
+    public static final int Long = 2;
+    public static final int Float = 3;
+    public static final int Hex = 4;
+    public static final int Oct = 5;
+    public static final int Comp = 6;
+
+    public static final String[] num_typeTypeNames = new String[] {
+        "<undef>",
+        "Int",
+        "Long",
+        "Float",
+        "Hex",
+        "Oct",
+        "Comp",
+    };
+}
Index: src/org/python/pydev/parser/jython/ast/Num.java
===================================================================
--- src/org/python/pydev/parser/jython/ast/Num.java	(revision 411)
+++ src/org/python/pydev/parser/jython/ast/Num.java	(revision 412)
@@ -4,15 +4,19 @@
 import java.io.DataOutputStream;
 import java.io.IOException;
 
-public class Num extends exprType {
+public class Num extends exprType implements num_typeType {
     public Object n;
+    public int type;
+    public String num;
 
-    public Num(Object n) {
+    public Num(Object n, int type, String num) {
         this.n = n;
+        this.type = type;
+        this.num = num;
     }
 
-    public Num(Object n, SimpleNode parent) {
-        this(n);
+    public Num(Object n, int type, String num, SimpleNode parent) {
+        this(n, type, num);
         this.beginLine = parent.beginLine;
         this.beginColumn = parent.beginColumn;
     }
@@ -21,6 +25,12 @@
         StringBuffer sb = new StringBuffer("Num[");
         sb.append("n=");
         sb.append(dumpThis(this.n));
+        sb.append(", ");
+        sb.append("type=");
+        sb.append(dumpThis(this.type, num_typeType.num_typeTypeNames));
+        sb.append(", ");
+        sb.append("num=");
+        sb.append(dumpThis(this.num));
         sb.append("]");
         return sb.toString();
     }
@@ -28,6 +38,8 @@
     public void pickle(DataOutputStream ostream) throws IOException {
         pickleThis(42, ostream);
         pickleThis(this.n, ostream);
+        pickleThis(this.type, ostream);
+        pickleThis(this.num, ostream);
     }
 
     public Object accept(VisitorIF visitor) throws Exception {
Index: src/org/python/pydev/parser/grammar24/PythonGrammar24TokenManager.java
===================================================================
--- src/org/python/pydev/parser/grammar24/PythonGrammar24TokenManager.java	(revision 411)
+++ src/org/python/pydev/parser/grammar24/PythonGrammar24TokenManager.java	(revision 412)
@@ -7,6 +7,7 @@
 import org.python.pydev.parser.jython.ast.Call;
 import org.python.pydev.parser.jython.ast.Str;
 import org.python.pydev.parser.jython.ast.Import;
+import org.python.pydev.parser.jython.ast.Num;
 import org.python.pydev.parser.jython.ast.Yield;
 import org.python.pydev.parser.jython.ast.Tuple;
 import org.python.pydev.parser.jython.ast.ImportFrom;
@@ -109,15 +110,15 @@
     }
   public  java.io.PrintStream debugStream = System.out;
   public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
-private final int jjStopStringLiteralDfa_4(int pos, long active0)
+private final int jjStopStringLiteralDfa_4(int pos, long active0)
 {
-   switch (pos)
+   switch (pos)
    {
       default :
          return -1;
    }
 }
-private final int jjStartNfa_4(int pos, long active0)
+private final int jjStartNfa_4(int pos, long active0)
 {
    return jjMoveNfa_4(jjStopStringLiteralDfa_4(pos, active0), pos + 1);
 }
@@ -179,11 +180,11 @@
    jjCheckNAdd(jjnextStates[start]);
    jjCheckNAdd(jjnextStates[start + 1]);
 }
-static final long[] jjbitVec0 = {
-   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+static final long[] jjbitVec0 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
-static final long[] jjbitVec2 = {
-   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+static final long[] jjbitVec2 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 private final int jjMoveNfa_4(int startState, int curPos)
 {
@@ -297,9 +298,9 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_13(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_13(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x8000000000000L) != 0L)
@@ -323,7 +324,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_13(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_13(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_13(jjStopStringLiteralDfa_13(pos, active0, active1, active2), pos + 1);
 }
@@ -482,9 +483,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_11(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_11(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x200000000000000L) != 0L)
@@ -505,7 +506,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_11(int pos, long active0, long active1)
+private final int jjStartNfa_11(int pos, long active0, long active1)
 {
    return jjMoveNfa_11(jjStopStringLiteralDfa_11(pos, active0, active1), pos + 1);
 }
@@ -669,9 +670,9 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_10(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_10(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x1000000000000L) != 0L)
@@ -695,7 +696,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_10(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_10(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_10(jjStopStringLiteralDfa_10(pos, active0, active1, active2), pos + 1);
 }
@@ -854,9 +855,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_8(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_8(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x80000000000000L) != 0L)
@@ -877,7 +878,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_8(int pos, long active0, long active1)
+private final int jjStartNfa_8(int pos, long active0, long active1)
 {
    return jjMoveNfa_8(jjStopStringLiteralDfa_8(pos, active0, active1), pos + 1);
 }
@@ -1037,9 +1038,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_14(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_14(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x10000000000000L) != 0L)
@@ -1063,7 +1064,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_14(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_14(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_14(jjStopStringLiteralDfa_14(pos, active0, active1, active2), pos + 1);
 }
@@ -1222,9 +1223,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_12(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_12(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x800000000000000L) != 0L)
@@ -1245,7 +1246,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_12(int pos, long active0, long active1)
+private final int jjStartNfa_12(int pos, long active0, long active1)
 {
    return jjMoveNfa_12(jjStopStringLiteralDfa_12(pos, active0, active1), pos + 1);
 }
@@ -1409,15 +1410,15 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_5(int pos, long active0)
+private final int jjStopStringLiteralDfa_5(int pos, long active0)
 {
-   switch (pos)
+   switch (pos)
    {
       default :
          return -1;
    }
 }
-private final int jjStartNfa_5(int pos, long active0)
+private final int jjStartNfa_5(int pos, long active0)
 {
    return jjMoveNfa_5(jjStopStringLiteralDfa_5(pos, active0), pos + 1);
 }
@@ -1682,9 +1683,9 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active0 & 0xe000000000000000L) != 0L || (active1 & 0x7bdffffL) != 0L)
@@ -1767,7 +1768,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_0(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_0(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1, active2), pos + 1);
 }
@@ -2764,9 +2765,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_9(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_9(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x800000000000L) != 0L)
@@ -2790,7 +2791,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_9(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_9(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_9(jjStopStringLiteralDfa_9(pos, active0, active1, active2), pos + 1);
 }
@@ -3089,9 +3090,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_7(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_7(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x20000000000000L) != 0L)
@@ -3112,7 +3113,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_7(int pos, long active0, long active1)
+private final int jjStartNfa_7(int pos, long active0, long active1)
 {
    return jjMoveNfa_7(jjStopStringLiteralDfa_7(pos, active0, active1), pos + 1);
 }
@@ -3272,11 +3273,11 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-static final int[] jjnextStates = {
-   4, 6, 7, 2, 3, 39, 40, 24, 58, 59, 64, 65, 68, 69, 72, 73, 
-   20, 21, 22, 23, 24, 26, 29, 30, 31, 33, 24, 22, 23, 24, 27, 28, 
-   32, 23, 24, 74, 75, 24, 11, 12, 15, 18, 44, 45, 46, 47, 48, 51, 
-   52, 55, 37, 38, 41, 42, 62, 63, 66, 67, 70, 71, 76, 77, 
+static final int[] jjnextStates = {
+   4, 6, 7, 2, 3, 39, 40, 24, 58, 59, 64, 65, 68, 69, 72, 73, 
+   20, 21, 22, 23, 24, 26, 29, 30, 31, 33, 24, 22, 23, 24, 27, 28, 
+   32, 23, 24, 74, 75, 24, 11, 12, 15, 18, 44, 45, 46, 47, 48, 51, 
+   52, 55, 37, 38, 41, 42, 62, 63, 66, 67, 70, 71, 76, 77, 
 };
 private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
 {
@@ -3330,25 +3331,25 @@
    "IN_USTRING1NLC", 
    "IN_USTRING2NLC", 
 };
-public static final int[] jjnewLexState = {
-   -1, -1, -1, -1, -1, -1, 5, 4, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, 11, 12, 13, 14, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 16, 16, 17, 17, 18, 18, 
-   7, 8, 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, 
+public static final int[] jjnewLexState = {
+   -1, -1, -1, -1, -1, -1, 5, 4, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, 11, 12, 13, 14, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 16, 16, 17, 17, 18, 18, 
+   7, 8, 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, 
 };
-static final long[] jjtoToken = {
-   0xfffffffffffcc0c1L, 0x1fe007dfffffffL, 0x100L, 
+static final long[] jjtoToken = {
+   0xfffffffffffcc0c1L, 0x1fe007dfffffffL, 0x100L, 
 };
-static final long[] jjtoSkip = {
-   0x33f3eL, 0x0L, 0x0L, 
+static final long[] jjtoSkip = {
+   0x33f3eL, 0x0L, 0x0L, 
 };
-static final long[] jjtoSpecial = {
-   0x30000L, 0x0L, 0x0L, 
+static final long[] jjtoSpecial = {
+   0x30000L, 0x0L, 0x0L, 
 };
-static final long[] jjtoMore = {
-   0x0L, 0xffe01fe000000000L, 0xffL, 
+static final long[] jjtoMore = {
+   0x0L, 0xffe01fe000000000L, 0xffL, 
 };
 protected CharStream input_stream;
 private final int[] jjrounds = new int[78];
@@ -3430,7 +3431,7 @@
   Token matchedToken;
   int curPos = 0;
 
-  EOFLoop :
+  EOFLoop :
   for (;;)
   {   
    try   
Index: src/org/python/pydev/parser/grammar24/PythonGrammar24TreeConstants.java
===================================================================
--- src/org/python/pydev/parser/grammar24/PythonGrammar24TreeConstants.java	(revision 411)
+++ src/org/python/pydev/parser/grammar24/PythonGrammar24TreeConstants.java	(revision 412)
@@ -1,4 +1,4 @@
-/* Generated By:JJTree: Do not edit this line. D:\workspace with spaces\org.python.pydev.parser\src\org\python\pydev\parser\grammar24\PythonGrammar24TreeConstants.java */
+/* Generated By:JJTree: Do not edit this line. C:\Dokumente und Einstellungen\Ueli\workspace\org.python.pydev.parser\src\org\python\pydev\parser\grammar24\PythonGrammar24TreeConstants.java */
 
 package org.python.pydev.parser.grammar24;
 
Index: src/org/python/pydev/parser/grammar24/TreeBuilder24.java
===================================================================
--- src/org/python/pydev/parser/grammar24/TreeBuilder24.java	(revision 411)
+++ src/org/python/pydev/parser/grammar24/TreeBuilder24.java	(revision 412)
@@ -167,8 +167,8 @@
             addSpecialsAndClearOriginal(n, name);
             return name;
         case JJTNUM:
-            //throw new RuntimeException("how to handle this? -- fabio")
-            return new Num(n.getImage());
+        	Object[] numimage = (Object[]) n.getImage();
+            return new Num(numimage[0], (Integer)numimage[1], (String)numimage[2]);
         case JJTUNICODE:
         case JJTSTRING:
             Object[] image = (Object[]) n.getImage();
Index: src/org/python/pydev/parser/grammar24/PythonGrammar24.java
===================================================================
--- src/org/python/pydev/parser/grammar24/PythonGrammar24.java	(revision 411)
+++ src/org/python/pydev/parser/grammar24/PythonGrammar24.java	(revision 412)
@@ -7,6 +7,7 @@
 import org.python.pydev.parser.jython.ast.Call;
 import org.python.pydev.parser.jython.ast.Str;
 import org.python.pydev.parser.jython.ast.Import;
+import org.python.pydev.parser.jython.ast.Num;
 import org.python.pydev.parser.jython.ast.Yield;
 import org.python.pydev.parser.jython.ast.Tuple;
 import org.python.pydev.parser.jython.ast.ImportFrom;
@@ -195,37 +196,37 @@
 
 
 
-    Object makeInt(String s, int radix) {
+    Object[] makeInt(String s, int radix, String token) {
         if (s.endsWith("L") || s.endsWith("l")) {
             s = s.substring(0, s.length()-1);
-            return hostLiteralMkr.newLong(new java.math.BigInteger(s, radix));
+            return new Object[]{hostLiteralMkr.newLong(new java.math.BigInteger(s, radix)), Num.Long, token};
         }
         int ndigits = s.length();
         int i=0;
         while (i < ndigits && s.charAt(i) == '0')
             i++;
         if ((ndigits - i) > 11) {
-            return hostLiteralMkr.newLong(new java.math.BigInteger(s, radix));
+            return new Object[]{hostLiteralMkr.newLong(new java.math.BigInteger(s, radix)), Num.Long, token};
         }
 
         long l = Long.valueOf(s, radix).longValue();
         if (l > 0xffffffffl || (radix == 10 && l > Integer.MAX_VALUE)) {
-            return hostLiteralMkr.newLong(new java.math.BigInteger(s, radix));
+            return new Object[]{hostLiteralMkr.newLong(new java.math.BigInteger(s, radix)), Num.Long, token};
         }
-        return hostLiteralMkr.newInteger((int) l);
+        return new Object[]{hostLiteralMkr.newInteger((int) l), Num.Int, token};
     }
 
-    Object makeFloat(String s) {
-        return hostLiteralMkr.newFloat(Double.valueOf(s).doubleValue());
+    Object[] makeFloat(String s) {
+        return new Object[]{hostLiteralMkr.newFloat(Double.valueOf(s).doubleValue()), Num.Float, s};
     }
 
-    Object makeLong(String s) {
-        return hostLiteralMkr.newLong(s);
+    Object[] makeLong(String s) {
+        return new Object[]{hostLiteralMkr.newLong(s), Num.Long, s};
     }
 
-    Object makeComplex(String s) {
-        s = s.substring(0, s.length() - 1);
-        return hostLiteralMkr.newImaginary(Double.valueOf(s).doubleValue());
+    Object[] makeComplex(String s) {
+        String compNumber = s.substring(0, s.length() - 1);
+        return new Object[]{hostLiteralMkr.newImaginary(Double.valueOf(compNumber).doubleValue()), Num.Comp, s};
     }
 
     /**
@@ -5694,7 +5695,7 @@
       case HEXNUMBER:
         t = jj_consume_token(HEXNUMBER);
             String s = t.image.substring(2, t.image.length());
-            jjtn000.setImage(makeInt(s, 16));
+            jjtn000.setImage(makeInt(s, 16, t.image));
             jjtree.closeNodeScope(jjtn000, true);
             jjtc000 = false;
             jjtreeCloseNodeScope(jjtn000);
@@ -5702,18 +5703,18 @@
         break;
       case OCTNUMBER:
         t = jj_consume_token(OCTNUMBER);
-                        jjtn000.setImage(makeInt(t.image, 8));
-                                                                   jjtree.closeNodeScope(jjtn000, true);
-                                                                   jjtc000 = false;
-                                                                   jjtreeCloseNodeScope(jjtn000);
+                        jjtn000.setImage(makeInt(t.image, 8, t.image));
+                                                                            jjtree.closeNodeScope(jjtn000, true);
+                                                                            jjtc000 = false;
+                                                                            jjtreeCloseNodeScope(jjtn000);
 
         break;
       case DECNUMBER:
         t = jj_consume_token(DECNUMBER);
-                        jjtn000.setImage(makeInt(t.image, 10));
-                                                                    jjtree.closeNodeScope(jjtn000, true);
-                                                                    jjtc000 = false;
-                                                                    jjtreeCloseNodeScope(jjtn000);
+                        jjtn000.setImage(makeInt(t.image, 10, t.image));
+                                                                             jjtree.closeNodeScope(jjtn000, true);
+                                                                             jjtc000 = false;
+                                                                             jjtreeCloseNodeScope(jjtn000);
 
         break;
       case FLOAT:
@@ -7380,14 +7381,14 @@
     return false;
   }
 
-  final private boolean jj_3_20() {
-    if (jj_scan_token(COMMA)) return true;
+  final private boolean jj_3_11() {
+    if (jj_scan_token(PRINT)) return true;
     if (jj_3R_49()) return true;
     return false;
   }
 
-  final private boolean jj_3_11() {
-    if (jj_scan_token(PRINT)) return true;
+  final private boolean jj_3_20() {
+    if (jj_scan_token(COMMA)) return true;
     if (jj_3R_49()) return true;
     return false;
   }
Index: src/org/python/pydev/parser/grammar25/PythonGrammar25.java
===================================================================
--- src/org/python/pydev/parser/grammar25/PythonGrammar25.java	(revision 411)
+++ src/org/python/pydev/parser/grammar25/PythonGrammar25.java	(revision 412)
@@ -7,6 +7,7 @@
 import org.python.pydev.parser.jython.ast.Call;
 import org.python.pydev.parser.jython.ast.Str;
 import org.python.pydev.parser.jython.ast.Import;
+import org.python.pydev.parser.jython.ast.Num;
 import org.python.pydev.parser.jython.ast.Yield;
 import org.python.pydev.parser.jython.ast.Tuple;
 import org.python.pydev.parser.jython.ast.ImportFrom;
@@ -203,37 +204,37 @@
 
 
 
-    Object makeInt(String s, int radix) {
+   Object[] makeInt(String s, int radix, String token) {
         if (s.endsWith("L") || s.endsWith("l")) {
             s = s.substring(0, s.length()-1);
-            return hostLiteralMkr.newLong(new java.math.BigInteger(s, radix));
+            return new Object[]{hostLiteralMkr.newLong(new java.math.BigInteger(s, radix)), Num.Long, token};
         }
         int ndigits = s.length();
         int i=0;
         while (i < ndigits && s.charAt(i) == '0')
             i++;
         if ((ndigits - i) > 11) {
-            return hostLiteralMkr.newLong(new java.math.BigInteger(s, radix));
+            return new Object[]{hostLiteralMkr.newLong(new java.math.BigInteger(s, radix)), Num.Long, token};
         }
 
         long l = Long.valueOf(s, radix).longValue();
         if (l > 0xffffffffl || (radix == 10 && l > Integer.MAX_VALUE)) {
-            return hostLiteralMkr.newLong(new java.math.BigInteger(s, radix));
+            return new Object[]{hostLiteralMkr.newLong(new java.math.BigInteger(s, radix)), Num.Long, token};
         }
-        return hostLiteralMkr.newInteger((int) l);
+        return new Object[]{hostLiteralMkr.newInteger((int) l), Num.Int, token};
     }
 
-    Object makeFloat(String s) {
-        return hostLiteralMkr.newFloat(Double.valueOf(s).doubleValue());
+    Object[] makeFloat(String s) {
+        return new Object[]{hostLiteralMkr.newFloat(Double.valueOf(s).doubleValue()), Num.Float, s};
     }
 
-    Object makeLong(String s) {
-        return hostLiteralMkr.newLong(s);
+    Object[] makeLong(String s) {
+        return new Object[]{hostLiteralMkr.newLong(s), Num.Long, s};
     }
 
-    Object makeComplex(String s) {
-        s = s.substring(0, s.length() - 1);
-        return hostLiteralMkr.newImaginary(Double.valueOf(s).doubleValue());
+    Object[] makeComplex(String s) {
+        String compNumber = s.substring(0, s.length() - 1);
+        return new Object[]{hostLiteralMkr.newImaginary(Double.valueOf(compNumber).doubleValue()), Num.Comp, s};
     }
 
     /**
@@ -6652,7 +6653,7 @@
       case HEXNUMBER:
         t = jj_consume_token(HEXNUMBER);
             String s = t.image.substring(2, t.image.length());
-            jjtn000.setImage(makeInt(s, 16));
+            jjtn000.setImage(makeInt(s, 16, t.image));
             jjtree.closeNodeScope(jjtn000, true);
             jjtc000 = false;
             jjtreeCloseNodeScope(jjtn000);
@@ -6660,18 +6661,18 @@
         break;
       case OCTNUMBER:
         t = jj_consume_token(OCTNUMBER);
-                        jjtn000.setImage(makeInt(t.image, 8));
-                                                                   jjtree.closeNodeScope(jjtn000, true);
-                                                                   jjtc000 = false;
-                                                                   jjtreeCloseNodeScope(jjtn000);
+                        jjtn000.setImage(makeInt(t.image, 8, t.image));
+                                                                            jjtree.closeNodeScope(jjtn000, true);
+                                                                            jjtc000 = false;
+                                                                            jjtreeCloseNodeScope(jjtn000);
 
         break;
       case DECNUMBER:
         t = jj_consume_token(DECNUMBER);
-                        jjtn000.setImage(makeInt(t.image, 10));
-                                                                    jjtree.closeNodeScope(jjtn000, true);
-                                                                    jjtc000 = false;
-                                                                    jjtreeCloseNodeScope(jjtn000);
+                        jjtn000.setImage(makeInt(t.image, 10, t.image));
+                                                                             jjtree.closeNodeScope(jjtn000, true);
+                                                                             jjtc000 = false;
+                                                                             jjtreeCloseNodeScope(jjtn000);
 
         break;
       case FLOAT:
@@ -7702,11 +7703,6 @@
     finally { jj_save(28, xla); }
   }
 
-  final private boolean jj_3R_103() {
-    if (jj_scan_token(EXCEPT)) return true;
-    return false;
-  }
-
   final private boolean jj_3R_102() {
     if (jj_scan_token(TRY)) return true;
     return false;
@@ -8888,6 +8884,11 @@
     return false;
   }
 
+  final private boolean jj_3R_103() {
+    if (jj_scan_token(EXCEPT)) return true;
+    return false;
+  }
+
   public PythonGrammar25TokenManager token_source;
   public Token token, jj_nt;
   private int jj_ntk;
Index: src/org/python/pydev/parser/grammar25/PythonGrammar25TokenManager.java
===================================================================
--- src/org/python/pydev/parser/grammar25/PythonGrammar25TokenManager.java	(revision 411)
+++ src/org/python/pydev/parser/grammar25/PythonGrammar25TokenManager.java	(revision 412)
@@ -7,6 +7,7 @@
 import org.python.pydev.parser.jython.ast.Call;
 import org.python.pydev.parser.jython.ast.Str;
 import org.python.pydev.parser.jython.ast.Import;
+import org.python.pydev.parser.jython.ast.Num;
 import org.python.pydev.parser.jython.ast.Yield;
 import org.python.pydev.parser.jython.ast.Tuple;
 import org.python.pydev.parser.jython.ast.ImportFrom;
@@ -110,15 +111,15 @@
     }
   public  java.io.PrintStream debugStream = System.out;
   public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
-private final int jjStopStringLiteralDfa_4(int pos, long active0)
+private final int jjStopStringLiteralDfa_4(int pos, long active0)
 {
-   switch (pos)
+   switch (pos)
    {
       default :
          return -1;
    }
 }
-private final int jjStartNfa_4(int pos, long active0)
+private final int jjStartNfa_4(int pos, long active0)
 {
    return jjMoveNfa_4(jjStopStringLiteralDfa_4(pos, active0), pos + 1);
 }
@@ -180,11 +181,11 @@
    jjCheckNAdd(jjnextStates[start]);
    jjCheckNAdd(jjnextStates[start + 1]);
 }
-static final long[] jjbitVec0 = {
-   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+static final long[] jjbitVec0 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
-static final long[] jjbitVec2 = {
-   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+static final long[] jjbitVec2 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 private final int jjMoveNfa_4(int startState, int curPos)
 {
@@ -298,9 +299,9 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_13(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_13(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x10000000000000L) != 0L)
@@ -324,7 +325,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_13(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_13(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_13(jjStopStringLiteralDfa_13(pos, active0, active1, active2), pos + 1);
 }
@@ -483,9 +484,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_11(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_11(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x400000000000000L) != 0L)
@@ -506,7 +507,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_11(int pos, long active0, long active1)
+private final int jjStartNfa_11(int pos, long active0, long active1)
 {
    return jjMoveNfa_11(jjStopStringLiteralDfa_11(pos, active0, active1), pos + 1);
 }
@@ -670,9 +671,9 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_10(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_10(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x2000000000000L) != 0L)
@@ -696,7 +697,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_10(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_10(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_10(jjStopStringLiteralDfa_10(pos, active0, active1, active2), pos + 1);
 }
@@ -855,9 +856,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_8(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_8(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x100000000000000L) != 0L)
@@ -878,7 +879,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_8(int pos, long active0, long active1)
+private final int jjStartNfa_8(int pos, long active0, long active1)
 {
    return jjMoveNfa_8(jjStopStringLiteralDfa_8(pos, active0, active1), pos + 1);
 }
@@ -1038,9 +1039,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_14(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_14(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x20000000000000L) != 0L)
@@ -1064,7 +1065,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_14(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_14(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_14(jjStopStringLiteralDfa_14(pos, active0, active1, active2), pos + 1);
 }
@@ -1223,9 +1224,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_12(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_12(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x1000000000000000L) != 0L)
@@ -1246,7 +1247,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_12(int pos, long active0, long active1)
+private final int jjStartNfa_12(int pos, long active0, long active1)
 {
    return jjMoveNfa_12(jjStopStringLiteralDfa_12(pos, active0, active1), pos + 1);
 }
@@ -1410,15 +1411,15 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_5(int pos, long active0)
+private final int jjStopStringLiteralDfa_5(int pos, long active0)
 {
-   switch (pos)
+   switch (pos)
    {
       default :
          return -1;
    }
 }
-private final int jjStartNfa_5(int pos, long active0)
+private final int jjStartNfa_5(int pos, long active0)
 {
    return jjMoveNfa_5(jjStopStringLiteralDfa_5(pos, active0), pos + 1);
 }
@@ -1683,9 +1684,9 @@
 {
    return 1;
 }
-private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_0(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x420000L) != 0L)
@@ -1768,7 +1769,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_0(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_0(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0, active1, active2), pos + 1);
 }
@@ -2769,9 +2770,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_9(int pos, long active0, long active1, long active2)
+private final int jjStopStringLiteralDfa_9(int pos, long active0, long active1, long active2)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x1000000000000L) != 0L)
@@ -2795,7 +2796,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_9(int pos, long active0, long active1, long active2)
+private final int jjStartNfa_9(int pos, long active0, long active1, long active2)
 {
    return jjMoveNfa_9(jjStopStringLiteralDfa_9(pos, active0, active1, active2), pos + 1);
 }
@@ -3094,9 +3095,9 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-private final int jjStopStringLiteralDfa_7(int pos, long active0, long active1)
+private final int jjStopStringLiteralDfa_7(int pos, long active0, long active1)
 {
-   switch (pos)
+   switch (pos)
    {
       case 0:
          if ((active1 & 0x40000000000000L) != 0L)
@@ -3117,7 +3118,7 @@
          return -1;
    }
 }
-private final int jjStartNfa_7(int pos, long active0, long active1)
+private final int jjStartNfa_7(int pos, long active0, long active1)
 {
    return jjMoveNfa_7(jjStopStringLiteralDfa_7(pos, active0, active1), pos + 1);
 }
@@ -3277,11 +3278,11 @@
       catch(java.io.IOException e) { return curPos; }
    }
 }
-static final int[] jjnextStates = {
-   4, 6, 7, 2, 3, 39, 40, 24, 58, 59, 64, 65, 68, 69, 72, 73, 
-   20, 21, 22, 23, 24, 26, 29, 30, 31, 33, 24, 22, 23, 24, 27, 28, 
-   32, 23, 24, 74, 75, 24, 11, 12, 15, 18, 44, 45, 46, 47, 48, 51, 
-   52, 55, 37, 38, 41, 42, 62, 63, 66, 67, 70, 71, 76, 77, 
+static final int[] jjnextStates = {
+   4, 6, 7, 2, 3, 39, 40, 24, 58, 59, 64, 65, 68, 69, 72, 73, 
+   20, 21, 22, 23, 24, 26, 29, 30, 31, 33, 24, 22, 23, 24, 27, 28, 
+   32, 23, 24, 74, 75, 24, 11, 12, 15, 18, 44, 45, 46, 47, 48, 51, 
+   52, 55, 37, 38, 41, 42, 62, 63, 66, 67, 70, 71, 76, 77, 
 };
 private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
 {
@@ -3335,25 +3336,25 @@
    "IN_USTRING1NLC", 
    "IN_USTRING2NLC", 
 };
-public static final int[] jjnewLexState = {
-   -1, -1, -1, -1, -1, -1, 5, 4, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
-   -1, -1, 11, 12, 13, 14, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 16, 16, 17, 17, 18, 
-   18, 7, 8, 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, 
+public static final int[] jjnewLexState = {
+   -1, -1, -1, -1, -1, -1, 5, 4, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, 11, 12, 13, 14, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 16, 16, 17, 17, 18, 
+   18, 7, 8, 11, 12, -1, -1, -1, -1, -1, -1, -1, -1, 
 };
-static final long[] jjtoToken = {
-   0xfffffffffffcc0c1L, 0x3fc00fbfffffffL, 0x200L, 
+static final long[] jjtoToken = {
+   0xfffffffffffcc0c1L, 0x3fc00fbfffffffL, 0x200L, 
 };
-static final long[] jjtoSkip = {
-   0x33f3eL, 0x0L, 0x0L, 
+static final long[] jjtoSkip = {
+   0x33f3eL, 0x0L, 0x0L, 
 };
-static final long[] jjtoSpecial = {
-   0x30000L, 0x0L, 0x0L, 
+static final long[] jjtoSpecial = {
+   0x30000L, 0x0L, 0x0L, 
 };
-static final long[] jjtoMore = {
-   0x0L, 0xffc03fc000000000L, 0x1ffL, 
+static final long[] jjtoMore = {
+   0x0L, 0xffc03fc000000000L, 0x1ffL, 
 };
 protected CharStream input_stream;
 private final int[] jjrounds = new int[78];
@@ -3435,7 +3436,7 @@
   Token matchedToken;
   int curPos = 0;
 
-  EOFLoop :
+  EOFLoop :
   for (;;)
   {   
    try   
Index: src/org/python/pydev/parser/grammar25/PythonGrammar25TreeConstants.java
===================================================================
--- src/org/python/pydev/parser/grammar25/PythonGrammar25TreeConstants.java	(revision 411)
+++ src/org/python/pydev/parser/grammar25/PythonGrammar25TreeConstants.java	(revision 412)
@@ -1,4 +1,4 @@
-/* Generated By:JJTree: Do not edit this line. D:\workspace with spaces\org.python.pydev.parser\src\org\python\pydev\parser\grammar25\PythonGrammar25TreeConstants.java */
+/* Generated By:JJTree: Do not edit this line. C:\Dokumente und Einstellungen\Ueli\workspace\org.python.pydev.parser\src\org\python\pydev\parser\grammar25\PythonGrammar25TreeConstants.java */
 
 package org.python.pydev.parser.grammar25;
 
Index: src/org/python/pydev/parser/grammar25/TreeBuilder25.java
===================================================================
--- src/org/python/pydev/parser/grammar25/TreeBuilder25.java	(revision 411)
+++ src/org/python/pydev/parser/grammar25/TreeBuilder25.java	(revision 412)
@@ -166,8 +166,8 @@
             addSpecialsAndClearOriginal(n, name);
             return name;
         case JJTNUM:
-            //throw new RuntimeException("how to handle this? -- fabio")
-            return new Num(n.getImage());
+        	Object[] numimage = (Object[]) n.getImage();
+            return new Num(numimage[0], (Integer)numimage[1], (String)numimage[2]);
         case JJTUNICODE:
         case JJTSTRING:
             Object[] image = (Object[]) n.getImage();
