X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java index 264b0ad..939f999 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/internal/compiler/parser/Parser.java @@ -208,6 +208,13 @@ public class Parser //extends PHPParserSuperclass } } catch (InvalidInputException e) { token = TokenNameERROR; + String detailedMessage = e.getMessage(); + + if (detailedMessage==Scanner.UNTERMINATED_STRING) { + throwSyntaxError("Unterminated string."); + } else if (detailedMessage==Scanner.UNTERMINATED_COMMENT) { + throwSyntaxError("Unterminated commment."); + } } return; } @@ -916,6 +923,8 @@ public class Parser //extends PHPParserSuperclass } else if (token == TokenNamefinal || token == TokenNameabstract || token == TokenNameclass || token == TokenNameinterface) { TypeDeclaration typeDecl = new TypeDeclaration(this.compilationUnit.compilationResult); typeDecl.declarationSourceStart = scanner.getCurrentTokenStartPosition(); + typeDecl.declarationSourceEnd = scanner.getCurrentTokenEndPosition(); + typeDecl.name = new char[]{' '}; // default super class typeDecl.superclass = new SingleTypeReference(TypeConstants.OBJECT, 0); compilationUnit.types.add(typeDecl); @@ -1086,19 +1095,19 @@ public class Parser //extends PHPParserSuperclass checkAndSetModifiers(AccInterface); getNextToken(); typeDecl.modifiers = this.modifiers; + typeDecl.sourceStart = scanner.getCurrentTokenStartPosition(); + typeDecl.sourceEnd = scanner.getCurrentTokenEndPosition(); if (token == TokenNameIdentifier || token > TokenNameKEYWORD) { - typeDecl.sourceStart = scanner.getCurrentTokenStartPosition(); - typeDecl.sourceEnd = scanner.getCurrentTokenEndPosition(); typeDecl.name = scanner.getCurrentIdentifierSource(); if (token > TokenNameKEYWORD) { - throwSyntaxError("Don't use a keyword for interface declaration [" + scanner.toStringAction(token) + "].", - typeDecl.sourceStart, typeDecl.sourceEnd); + problemReporter.phpKeywordWarning(new String[]{scanner.toStringAction(token)}, scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition(), + referenceContext, compilationUnit.compilationResult); +// throwSyntaxError("Don't use a keyword for interface declaration [" + scanner.toStringAction(token) + "].", +// typeDecl.sourceStart, typeDecl.sourceEnd); } getNextToken(); interface_extends_list(); } else { - typeDecl.sourceStart = scanner.getCurrentTokenStartPosition(); - typeDecl.sourceEnd = scanner.getCurrentTokenEndPosition(); typeDecl.name = new char[]{' '}; throwSyntaxError("Interface name expected after keyword 'interface'.", typeDecl.sourceStart, typeDecl.sourceEnd); return; @@ -1109,15 +1118,17 @@ public class Parser //extends PHPParserSuperclass // '{' class_statement_list'}' class_entry_type(); typeDecl.modifiers = this.modifiers; + typeDecl.sourceStart = scanner.getCurrentTokenStartPosition(); + typeDecl.sourceEnd = scanner.getCurrentTokenEndPosition(); //identifier //identifier 'extends' identifier if (token == TokenNameIdentifier || token > TokenNameKEYWORD) { - typeDecl.sourceStart = scanner.getCurrentTokenStartPosition(); - typeDecl.sourceEnd = scanner.getCurrentTokenEndPosition(); typeDecl.name = scanner.getCurrentIdentifierSource(); if (token > TokenNameKEYWORD) { - throwSyntaxError("Don't use a keyword for class declaration [" + scanner.toStringAction(token) + "].", - typeDecl.sourceStart, typeDecl.sourceEnd); + problemReporter.phpKeywordWarning(new String[]{scanner.toStringAction(token)}, scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition(), + referenceContext, compilationUnit.compilationResult); +// throwSyntaxError("Don't use a keyword for class declaration [" + scanner.toStringAction(token) + "].", +// typeDecl.sourceStart, typeDecl.sourceEnd); } getNextToken(); // extends_from: @@ -1135,8 +1146,6 @@ public class Parser //extends PHPParserSuperclass } implements_list(); } else { - typeDecl.sourceStart = scanner.getCurrentTokenStartPosition(); - typeDecl.sourceEnd = scanner.getCurrentTokenEndPosition(); typeDecl.name = new char[]{' '}; throwSyntaxError("Class name expected after keyword 'class'.", typeDecl.sourceStart, typeDecl.sourceEnd); return; @@ -1251,7 +1260,7 @@ public class Parser //extends PHPParserSuperclass // '(' parameter_list ')' method_body initializeModifiers(); int declarationSourceStart = scanner.getCurrentTokenStartPosition(); - ; + if (token == TokenNamevar) { checkAndSetModifiers(AccPublic); problemReporter.phpVarDeprecatedWarning(scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition(), @@ -1470,9 +1479,10 @@ public class Parser //extends PHPParserSuperclass if (Scanner.isIdentifierOrKeyword(token)) { methodDecl.selector = scanner.getCurrentIdentifierSource(); if (token > TokenNameKEYWORD) { - reportSyntaxWarning("Don't use keyword for function declaration [" + scanner.toStringAction(token) + "].", - scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition()); -// throwSyntaxError("Don't use keyword for function declaration [" + scanner.toStringAction(token) + "]."); + problemReporter.phpKeywordWarning(new String[]{scanner.toStringAction(token)}, scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition(), + referenceContext, compilationUnit.compilationResult); +// reportSyntaxWarning("Don't use keyword for function declaration [" + scanner.toStringAction(token) + "].", +// scanner.getCurrentTokenStartPosition(), scanner.getCurrentTokenEndPosition()); } getNextToken(); if (token == TokenNameLPAREN) { @@ -1481,7 +1491,7 @@ public class Parser //extends PHPParserSuperclass throwSyntaxError("'(' expected in function declaration."); } if (token != TokenNameRPAREN) { - parameter_list(); + parameter_list(); } if (token != TokenNameRPAREN) { throwSyntaxError("')' expected in function declaration."); @@ -1598,7 +1608,7 @@ public class Parser //extends PHPParserSuperclass // statementList(); // } else { - throwSyntaxError("':' character after 'case' constant expected (Found token: " + scanner.toStringAction(token) + ")"); + throwSyntaxError("':' character expected after 'case' constant (Found token: " + scanner.toStringAction(token) + ")"); } } else { // TokenNamedefault getNextToken(); @@ -1608,9 +1618,11 @@ public class Parser //extends PHPParserSuperclass // empty default case break; } - statementList(); + if (token != TokenNamecase) { + statementList(); + } } else { - throwSyntaxError("':' character after 'default' expected."); + throwSyntaxError("':' character expected after 'default'."); } } } while (token == TokenNamecase || token == TokenNamedefault); @@ -2454,14 +2466,23 @@ public class Parser //extends PHPParserSuperclass //| class_constant '(' function_call_parameter_list ')' //| static_member '(' function_call_parameter_list ')' //| variable_without_objects '(' function_call_parameter_list ')' + char[] defineName = null; + char[] ident = null; + int startPos=0; + int endPos=0; if (Scanner.TRACE) { System.out.println("TRACE: function_call()"); } if (token == TokenNameIdentifier) { + ident = scanner.getCurrentIdentifierSource(); + defineName = ident; + startPos = scanner.getCurrentTokenStartPosition(); + endPos = scanner.getCurrentTokenEndPosition(); getNextToken(); switch (token) { case TokenNamePAAMAYIM_NEKUDOTAYIM : // static member: + defineName = null; getNextToken(); if (token == TokenNameIdentifier) { // class _constant @@ -2476,6 +2497,45 @@ public class Parser //extends PHPParserSuperclass variable_without_objects(); } if (token != TokenNameLPAREN) { + if (defineName!=null) { + // does this identifier contain only uppercase characters? + if (defineName.length==3) { + if (defineName[0]=='d' && + defineName[1]=='i' && + defineName[2]=='e' ) { + defineName=null; + } + } else if (defineName.length==4) { + if (defineName[0]=='t' && + defineName[1]=='r' && + defineName[2]=='u' && + defineName[3]=='e' ) { + defineName=null; + } else if (defineName[0]=='n' && + defineName[1]=='u' && + defineName[2]=='l' && + defineName[3]=='l' ) { + defineName=null; + } + } else if (defineName.length==5) { + if (defineName[0]=='f' && + defineName[1]=='a' && + defineName[2]=='l' && + defineName[3]=='s' && + defineName[4]=='e' ) { + defineName=null; + } + } + if (defineName!=null) { + for (int i=0; i