misc parser changes
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / compiler / parser / Parser.java
index 9567e32..7369a24 100644 (file)
@@ -1222,38 +1222,38 @@ public class Parser //extends PHPParserSuperclass
       //          getNextToken();
       //        }
       //        return;
-    } else if (token == TokenNamedefine) {
-      getNextToken();
-      if (token == TokenNameLPAREN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("'(' expected after 'define' keyword.");
-      }
-      expr();
-      if (token == TokenNameCOMMA) {
-        getNextToken();
-      } else {
-        throwSyntaxError("',' expected after first 'define' constant.");
-      }
-      expr();
-      if (token == TokenNameCOMMA) {
-        getNextToken();
-        expr();
-      }
-      if (token == TokenNameRPAREN) {
-        getNextToken();
-      } else {
-        throwSyntaxError("')' expected after 'define' statement.");
-      }
-      if (token == TokenNameSEMICOLON) {
-        getNextToken();
-      } else {
-        if (token != TokenNameStopPHP) {
-          throwSyntaxError("';' expected after 'define' statement.");
-        }
-        getNextToken();
-      }
-      return;
+//    } else if (token == TokenNamedefine) {
+//      getNextToken();
+//      if (token == TokenNameLPAREN) {
+//        getNextToken();
+//      } else {
+//        throwSyntaxError("'(' expected after 'define' keyword.");
+//      }
+//      expr();
+//      if (token == TokenNameCOMMA) {
+//        getNextToken();
+//      } else {
+//        throwSyntaxError("',' expected after first 'define' constant.");
+//      }
+//      expr();
+//      if (token == TokenNameCOMMA) {
+//        getNextToken();
+//        expr();
+//      }
+//      if (token == TokenNameRPAREN) {
+//        getNextToken();
+//      } else {
+//        throwSyntaxError("')' expected after 'define' statement.");
+//      }
+//      if (token == TokenNameSEMICOLON) {
+//        getNextToken();
+//      } else {
+//        if (token != TokenNameStopPHP) {
+//          throwSyntaxError("';' expected after 'define' statement.");
+//        }
+//        getNextToken();
+//      }
+//      return;
     } else if (token == TokenNamefunction) {
       MethodDeclaration methodDecl = new MethodDeclaration(
           this.compilationUnit.compilationResult);
@@ -1410,10 +1410,10 @@ public class Parser //extends PHPParserSuperclass
         typeDecl.declarationSourceEnd = scanner.getCurrentTokenEndPosition();
         getNextToken();
       } else {
-        throwSyntaxError("'}' expected at end of interface body.");
+        throwSyntaxError("'}' expected at end of class body.");
       }
     } else {
-      throwSyntaxError("'{' expected at start of interface body.");
+      throwSyntaxError("'{' expected at start of class body.");
     }
   }
   private void class_entry_type() {
@@ -1422,7 +1422,7 @@ public class Parser //extends PHPParserSuperclass
     // | T_FINAL T_CLASS
     if (token == TokenNameclass) {
       getNextToken();
-    } else if (token == TokenNamefinal) {
+    } else if (token == TokenNameabstract) {
       checkAndSetModifiers(AccAbstract);
       getNextToken();
       if (token != TokenNameclass) {
@@ -1431,10 +1431,13 @@ public class Parser //extends PHPParserSuperclass
       getNextToken();
     } else if (token == TokenNamefinal) {
       checkAndSetModifiers(AccFinal);
+      getNextToken();
       if (token != TokenNameclass) {
         throwSyntaxError("Keyword 'class' expected after keyword 'final'.");
       }
       getNextToken();
+    } else {
+        throwSyntaxError("Keyword 'class' 'final' or 'abstract' expected");
     }
   }
   private void interface_extends_list() {
@@ -1489,7 +1492,14 @@ public class Parser //extends PHPParserSuperclass
   private void class_statement_list() {
     do {
       class_statement();
-    } while (token == TokenNamefunction || token == TokenNamevar);
+    } while (token == TokenNamepublic || 
+        token == TokenNameprotected || 
+        token == TokenNameprivate || 
+        token == TokenNamestatic || 
+        token == TokenNameabstract || 
+        token == TokenNamefinal || 
+        token == TokenNamefunction || 
+        token == TokenNamevar);
   }
   private void class_statement() {
     //    class_statement:
@@ -2182,6 +2192,26 @@ public class Parser //extends PHPParserSuperclass
           getNextToken();
         }
         break;
+      case TokenNamearray :
+    //    T_ARRAY '(' array_pair_list ')'
+        getNextToken();
+        if (token == TokenNameLPAREN) {
+          getNextToken();
+          if (token == TokenNameRPAREN) {
+            getNextToken();
+            break;
+          }
+          array_pair_list();
+          if (token != TokenNameRPAREN) {
+            throwSyntaxError("')' expected after keyword 'array'"
+                + "(Found token: " + scanner.toStringAction(token) + ")");
+          }
+          getNextToken();
+        } else {
+          throwSyntaxError("'(' expected after keyword 'array'"
+              + "(Found token: " + scanner.toStringAction(token) + ")");
+        }
+        break;
       case TokenNameprint :
         getNextToken();
         expr();
@@ -2355,6 +2385,29 @@ public class Parser //extends PHPParserSuperclass
       }
     } while (while_flag);
   }
+  private void array_pair_list() {
+//  array_pair_list:
+//     /* empty */  
+//|    non_empty_array_pair_list possible_comma        
+    non_empty_array_pair_list();
+    if (token == TokenNameCOMMA) {
+      getNextToken();
+    }
+  }
+  private void non_empty_array_pair_list() {
+//non_empty_array_pair_list:
+//     non_empty_array_pair_list ',' expr T_DOUBLE_ARROW expr   
+//|    non_empty_array_pair_list ',' expr                       
+//|    expr T_DOUBLE_ARROW expr 
+//|    expr                             
+//|    non_empty_array_pair_list ',' expr T_DOUBLE_ARROW '&' w_variable 
+//|    non_empty_array_pair_list ',' '&' w_variable  
+//|    expr T_DOUBLE_ARROW '&' w_variable 
+//|    '&' w_variable                   
+  }
+  
   private void unaryExpression() {
     switch (token) {
       case TokenNamePLUS_PLUS :