static_var_list();
if (token == TokenName.SEMICOLON) {
getNextToken();
- } else {
+ }
+ else if (token == TokenName.PAAMAYIM_NEKUDOTAYIM) {
+ getNextToken ();
+
+ if (token != TokenName.IDENTIFIER) {
+ throwSyntaxError("identifier expected after '::'.");
+ }
+ }
+ else {
if (token != TokenName.INLINE_HTML) {
throwSyntaxError("';' expected after 'static' statement.");
}
if (token != TokenName.LBRACE) {
throwSyntaxError("'{' expected in 'try' statement.");
}
+
getNextToken();
- statementList();
- if (token != TokenName.RBRACE) {
- throwSyntaxError("'}' expected in 'try' statement.");
+
+ if (token != TokenName.RBRACE) { // Process the statement only if there is (possibly) a statement
+ statementList ();
+
+ if (token != TokenName.RBRACE) {
+ throwSyntaxError("'}' expected in 'try' statement.");
+ }
}
+
getNextToken();
return statement;
}
}
break;
-
+
case TERNARY_SHORT:
case PLUS_EQUAL:
case MINUS_EQUAL:
}
break;
+ case STATIC:
+ getNextToken ();
+ if (token == TokenName.PAAMAYIM_NEKUDOTAYIM) {
+ getNextToken ();
+ expr_without_variable (only_variable, initHandler, bColonAllowed);
+ }
+ else {
+ throwSyntaxError("Error in expression (Expected '::' after 'static').");
+ }
+ break;
+
default:
if (token != TokenName.INLINE_HTML) {
if (token.compareTo (TokenName.KEYWORD) > 0) {
getNextToken();
expression = new EqualExpression(expression, expr_without_variable (only_variable, initHandler, bColonAllowed), OperatorIds.TERNARY_SHORT);
break;
-
+
case QUESTION:
getNextToken();
Expression valueIfTrue = expr_without_variable (true, null, true);
/**
* base_variable_with_function_calls:
* base_variable | function_call
- *
+ *
* @param lefthandside
* @param ignoreVar
* @return
if (Scanner.TRACE) {
System.out.println("TRACE: base_variable_with_function_calls()");
}
-
+
return function_call(lefthandside, ignoreVar);
}
* reference_variable
* | simple_indirect_reference reference_variable
* | static_member
- *
+ *
* @param lefthandside
* @return
*/
private Expression base_variable (boolean lefthandside) {
Expression ref = null;
-
+
if (Scanner.TRACE) {
System.out.println ("TRACE: base_variable()");
}
-
+
if (token == TokenName.IDENTIFIER) {
static_member ();
- }
+ }
else {
while (token == TokenName.DOLLAR) {
getNextToken ();
}
-
+
reference_variable (lefthandside, false);
}
-
+
return ref;
}
if (Scanner.TRACE) {
System.out.println("TRACE: compound_variable()");
}
-
+
if (token == TokenName.VARIABLE) {
if (!lefthandside) {
if (!containsVariableSet()) {
// String(scanner.getCurrentIdentifierSource())
// + " may not have been initialized");
problemReporter.uninitializedLocalVariable (
- new String (scanner.getCurrentIdentifierSource()),
+ new String (scanner.getCurrentIdentifierSource()),
scanner.getCurrentTokenStartPosition(),
- scanner.getCurrentTokenEndPosition(),
+ scanner.getCurrentTokenEndPosition(),
referenceContext,
compilationUnit.compilationResult);
}
addVariableSet();
}
}
-
- FieldReference ref = new FieldReference (scanner.getCurrentIdentifierSource(),
+
+ FieldReference ref = new FieldReference (scanner.getCurrentIdentifierSource(),
scanner.getCurrentTokenStartPosition());
getNextToken();
return ref;
- }
+ }
else {
// because of simple_indirect_reference
while (token == TokenName.DOLLAR) {
getNextToken();
}
-
+
if (token != TokenName.LBRACE) {
reportSyntaxError("'{' expected after compound variable token '$'.");
return null;
}
-
+
getNextToken();
expr();
-
+
if (token != TokenName.RBRACE) {
throwSyntaxError("'}' expected after compound variable token '$'.");
}
-
+
getNextToken();
}
-
+
return null;
} // private void dim_offset() { // // dim_offset: // // /* empty */
if (Scanner.TRACE) {
System.out.println("TRACE: object_property()");
}
-
- if ((token == TokenName.VARIABLE) ||
+
+ if ((token == TokenName.VARIABLE) ||
(token == TokenName.DOLLAR)) {
variable_without_objects (false, false);
- }
+ }
else {
object_dim_list();
}
if (Scanner.TRACE) {
System.out.println("TRACE: object_dim_list()");
}
-
+
variable_name();
-
+
while (true) {
if (token == TokenName.LBRACE) {
getNextToken();
expr();
-
+
if (token != TokenName.RBRACE) {
throwSyntaxError("'}' expected in object_dim_list.");
}
-
+
getNextToken();
- }
+ }
else if (token == TokenName.LBRACKET) {
getNextToken();
-
+
if (token == TokenName.RBRACKET) {
getNextToken();
continue;
}
-
+
expr();
-
+
if (token != TokenName.RBRACKET) {
throwSyntaxError("']' expected in object_dim_list.");
}
-
+
getNextToken();
- }
+ }
else {
break;
}
if (Scanner.TRACE) {
System.out.println("TRACE: variable_name()");
}
-
- if ((token == TokenName.IDENTIFIER) ||
+
+ if ((token == TokenName.IDENTIFIER) ||
(token.compareTo (TokenName.KEYWORD) > 0)) {
if (token.compareTo (TokenName.KEYWORD) > 0) {
// TODO show a warning "Keyword used as variable" ?
}
-
+
getNextToken();
- }
+ }
+ else if ((token == TokenName.OP_AND_OLD) || // If the found token is e.g $var->and
+ (token == TokenName.OP_OR_OLD) || // or is $var->or
+ (token == TokenName.OP_XOR_OLD)) { // or is $var->xor
+ getNextToken (); // get the next token. Maybe we should issue an warning?
+ }
else {
if (token != TokenName.LBRACE) {
throwSyntaxError("'{' expected in variable name.");
}
-
+
getNextToken();
expr();
-
+
if (token != TokenName.RBRACE) {
throwSyntaxError("'}' expected in variable name.");
}
-
+
getNextToken();
}
}
}
/**
- *
+ *
* variable:
* base_variable_with_function_calls T_OBJECT_OPERATOR
* object_property method_or_not variable_properties
* | base_variable_with_function_calls
- *
+ *
* @param lefthandside
* @param ignoreVar
* @return
*/
private Expression variable (boolean lefthandside, boolean ignoreVar) {
Expression ref = base_variable_with_function_calls (lefthandside, ignoreVar);
-
+
if ((token == TokenName.MINUS_GREATER) ||
(token == TokenName.PAAMAYIM_NEKUDOTAYIM)) {
/* I don't know why ref was set to null, but if it is null, the variable will neither be added to the set of variable,
method_or_not();
variable_properties();
}
-
+
return ref;
}
if (Scanner.TRACE) {
System.out.println("TRACE: variable_property()");
}
-
+
if (token == TokenName.MINUS_GREATER) {
getNextToken();
object_property();
method_or_not();
- }
+ }
else {
throwSyntaxError("'->' expected in variable_property.");
}