fixed some parser bugs
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / Scanner.java
index af7f65a..0997cb7 100644 (file)
@@ -871,6 +871,8 @@ public class Scanner implements IScanner, ITerminalSymbols {
         //                  }
       }
     } catch (IndexOutOfBoundsException e) {
+//    reset end position for error reporting
+      currentPosition-=2; 
       throw new InvalidInputException(UNTERMINATED_STRING);
     } catch (InvalidInputException e) {
       if (e.getMessage().equals(INVALID_ESCAPE)) {
@@ -967,6 +969,8 @@ public class Scanner implements IScanner, ITerminalSymbols {
         //                  }
       }
     } catch (IndexOutOfBoundsException e) {
+      // reset end position for error reporting
+      currentPosition-=2;
       throw new InvalidInputException(UNTERMINATED_STRING);
     } catch (InvalidInputException e) {
       if (e.getMessage().equals(INVALID_ESCAPE)) {
@@ -1063,6 +1067,8 @@ public class Scanner implements IScanner, ITerminalSymbols {
         //                  }
       }
     } catch (IndexOutOfBoundsException e) {
+//    reset end position for error reporting
+      currentPosition-=2;
       throw new InvalidInputException(UNTERMINATED_STRING);
     } catch (InvalidInputException e) {
       if (e.getMessage().equals(INVALID_ESCAPE)) {
@@ -1185,7 +1191,7 @@ public class Scanner implements IScanner, ITerminalSymbols {
               case '{' :
                 if (encapsedChar == '$') {
                   if (getNextChar('$'))
-                    return TokenNameCURLY_OPEN;
+                    return TokenNameLBRACE_DOLLAR;
                 }
                 return TokenNameLBRACE;
               case '}' :
@@ -1197,7 +1203,7 @@ public class Scanner implements IScanner, ITerminalSymbols {
               case '\'' :
                 if (tokenizeStrings) {
                   consumeStringConstant();
-                  return TokenNameStringConstant;
+                  return TokenNameStringSingleQuote;
                 }
                 return TokenNameEncapsedString1;
               case '"' :
@@ -1462,11 +1468,11 @@ public class Scanner implements IScanner, ITerminalSymbols {
               return TokenNameAT;
             case '\'' :
               consumeStringConstant();
-              return TokenNameStringConstant;
+              return TokenNameStringSingleQuote;
             case '"' :
               if (tokenizeStrings) {
                 consumeStringLiteral();
-                return TokenNameStringLiteral;
+                return TokenNameStringDoubleQuote;
               }
               return TokenNameEncapsedString2;
             case '`' :
@@ -1704,6 +1710,8 @@ public class Scanner implements IScanner, ITerminalSymbols {
                       return TokenNameCOMMENT_BLOCK;
                     }
                   } catch (IndexOutOfBoundsException e) {
+//                  reset end position for error reporting
+                    currentPosition-=2;
                     throw new InvalidInputException(UNTERMINATED_COMMENT);
                   }
                   break;
@@ -2259,6 +2267,9 @@ public class Scanner implements IScanner, ITerminalSymbols {
   public char[] getSource() {
     return this.source;
   }
+  public static boolean isIdentifierOrKeyword(int token) {
+    return (token == TokenNameIdentifier) || (token > TokenNameKEYWORD);
+  }
   final char[] optimizedCurrentTokenSource1() {
     //return always the same char[] build only once
     //optimization at no speed cost of 99.5 % of the singleCharIdentifier
@@ -3726,9 +3737,9 @@ public class Scanner implements IScanner, ITerminalSymbols {
         return "Integer(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
       case TokenNameDoubleLiteral :
         return "Double(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-      case TokenNameStringLiteral :
+      case TokenNameStringDoubleQuote :
         return "StringLiteral(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
-      case TokenNameStringConstant :
+      case TokenNameStringSingleQuote :
         return "StringConstant(" + new String(getCurrentTokenSource()) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
       case TokenNameStringInterpolated :
         return "StringInterpolated(" + new String(getCurrentTokenSource())
@@ -3849,6 +3860,8 @@ public class Scanner implements IScanner, ITerminalSymbols {
         return "$";
       case TokenNameDOLLAR_LBRACE :
         return "${";
+      case TokenNameLBRACE_DOLLAR :
+        return "{$";
       case TokenNameEOF :
         return "EOF"; //$NON-NLS-1$
       case TokenNameWHITESPACE :