diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHAllocationExpression.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHAllocationExpression.java index 1c96b1e..ccc8193 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHAllocationExpression.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHAllocationExpression.java @@ -68,6 +68,10 @@ public Object eval( CallStack callstack, Interpreter interpreter) return objectArrayAllocation(name, (BSHArrayDimensions)args, callstack, interpreter ); } + else if ( type instanceof BSHFunctionType ) { + Class funcClass = ((BSHFunctionType)type).getType(callstack, interpreter); + return arrayAllocation( (BSHArrayDimensions)args, funcClass, callstack, interpreter ); + } else return primitiveArrayAllocation((BSHPrimitiveType)type, (BSHArrayDimensions)args, callstack, interpreter ); diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHBinaryExpression.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHBinaryExpression.java index 0b9ffcb..8181c47 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHBinaryExpression.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHBinaryExpression.java @@ -227,8 +227,8 @@ private boolean isComparableTypes(Class val1Class, * @param type2 second type to compare * @return types are similar */ private boolean isSimilarTypes(Class type1, Class type2) { - return null == type2 || type1.isAssignableFrom(type2) - || type2.isAssignableFrom(type1); + return null == type2 || Types.isClassAssignable(type1, type2) + || Types.isClassAssignable(type2, type1); } /** Object is a non-null and non-void Primitive type. diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHFunctionType.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHFunctionType.java new file mode 100755 index 0000000..7707a4d --- /dev/null +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHFunctionType.java @@ -0,0 +1,81 @@ +/***************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + *****************************************************************************/ + +package bsh; + +import java.util.ArrayList; +import java.util.List; + +/** + * AST node for handling High-Order Function type signatures. + * Syntax: (ReceiverType.(ParamTypes) -> ReturnType) + */ +public class BSHFunctionType extends SimpleNode { + public BSHFunctionType(int id) { + super(id); + } + + /** + * Resolves this signature to a unique synthetic Functional Interface Class. + */ + public Class getType(CallStack callstack, Interpreter interpreter) throws EvalError { + SignatureInfo info = collectSignatureInfo(callstack, interpreter); + BshClassManager bcm = interpreter.getClassManager(); + + // Retrieve the generated interface from the factory + return SyntheticInterfaceFactory.getInstance().getInterface(bcm, info); + } + + /** + * Helper to extract signature components from child nodes. + */ + public SignatureInfo collectSignatureInfo(CallStack callstack, Interpreter interpreter) throws EvalError { + Class receiver = null; + List> params = new ArrayList<>(); + Class returnType = Void.TYPE; + + int numChildren = jjtGetNumChildren(); + for (int i = 0; i < numChildren; i++) { + Node child = jjtGetChild(i); + if (child instanceof BSHReceiverType) { + receiver = ((BSHReceiverType) child).getType(callstack, interpreter); + } else if (child instanceof BSHType) { + params.add(((BSHType) child).getType(callstack, interpreter)); + } else if (child instanceof BSHReturnType) { + returnType = ((BSHReturnType) child).evalReturnType(callstack, interpreter); + } + } + return new SignatureInfo(receiver, params, returnType); + } + + /** + * Structured data for the function signature. + */ + public static class SignatureInfo { + public final Class receiver; + public final List> params; + public final Class returnType; + + public SignatureInfo(Class r, List> p, Class rt) { + this.receiver = r; + this.params = p; + this.returnType = rt; + } + } +} \ No newline at end of file diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHReceiverType.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHReceiverType.java new file mode 100755 index 0000000..16fc845 --- /dev/null +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHReceiverType.java @@ -0,0 +1,36 @@ +/***************************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + *****************************************************************************/ + +package bsh; + +/** + * Wraps the receiver type in a high-order function (e.g., Context in Context.() -> void). + */ +public class BSHReceiverType extends SimpleNode { + public BSHReceiverType(int id) { + super(id); + } + + /** + * Resolve the receiver's Class type. + */ + public Class getType(CallStack callstack, Interpreter interpreter) throws EvalError { + return ((BSHAmbiguousName) jjtGetChild(0)).toClass(callstack, interpreter); + } +} \ No newline at end of file diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHType.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHType.java index f0ab8aa..8e8833b 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHType.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/BSHType.java @@ -89,6 +89,13 @@ public String getTypeDescriptor( Node node = getTypeNode(); if ( node instanceof BSHPrimitiveType ) descriptor = getTypeDescriptor( ((BSHPrimitiveType)node).type ); + else if ( node instanceof BSHFunctionType ) { + Class cls = null; + try { + cls = ((BSHFunctionType)node).getType(callstack, interpreter); + } catch (EvalError e) { /* ignore */ } + descriptor = (cls == null) ? "Ljava/lang/Object;" : getTypeDescriptor(cls); + } else { String clasName = ((BSHAmbiguousName)node).text; @@ -129,6 +136,11 @@ public Class getType( CallStack callstack, Interpreter interpreter ) // return cached type if available if ( type != null ) return type; + + if ( jjtGetNumChildren() > 0 && jjtGetChild(0) instanceof BSHFunctionType ) { + this.type = ((BSHFunctionType) jjtGetChild(0)).getType(callstack, interpreter); + return this.type; + } // first node will either be PrimitiveType or AmbiguousName Node node = getTypeNode(); diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/BshLambda.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/BshLambda.java index 725fe2f..2d379b7 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/BshLambda.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/BshLambda.java @@ -1,5 +1,7 @@ package bsh; +import static bsh.This.Keys.BSHEXTENSIONMETHODRECEIVER; + import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -114,6 +116,9 @@ protected static boolean isAssignable(Class from, Class to, int round) { return entry.getKey().isAssignable(method, round); return false; } + + /** Set whether this lambda has a receiver context */ + protected void setHasReceiver(boolean b) { /* Default no-op */ } /** * Convert this lambda to a specific functional interface. @@ -123,6 +128,15 @@ protected static boolean isAssignable(Class from, Class to, int round) { protected T convertTo(Class functionalInterface) throws UtilEvalError { if (!BshLambda.isAssignable(this.dummyType, functionalInterface, Types.BSH_ASSIGNABLE)) throw new UtilEvalError("This BshLambda can't be converted to " + functionalInterface.getName()); + + /** + * If it's a receiver-type interface, enable receiver mode in the lambda implementation. + * Checked using the marker interface. + */ + if (SyntheticInterfaceFactory.BshReceiverLambdaMarker.class.isAssignableFrom(functionalInterface)) { + this.setHasReceiver(true); + } + try { return (T) Proxy.newProxyInstance( functionalInterface.getClassLoader(), @@ -173,6 +187,7 @@ private static class BshLambdaFromLambdaExpression extends BshLambda { private final Class[] paramsTypes; private final String[] paramsNames; private final Node bodyNode; + private boolean hasReceiver = false; public BshLambdaFromLambdaExpression(Node expressionNode, NameSpace declaringNameSpace, Modifiers[] paramsModifiers, Class[] paramsTypes, String[] paramsNames, Node bodyNode) { super(expressionNode); @@ -185,6 +200,8 @@ public BshLambdaFromLambdaExpression(Node expressionNode, NameSpace declaringNam if (paramsModifiers.length != paramsTypes.length || paramsTypes.length != paramsNames.length) throw new IllegalArgumentException("The length of 'paramsModifiers', 'paramsTypes' and 'paramsNames' can't be different!"); } + + public void setHasReceiver(boolean b) { this.hasReceiver = b; } protected final Object invokeImpl(Object[] args) throws UtilEvalError, EvalError, TargetError { if (args.length != this.paramsTypes.length) throw new UtilEvalError("Wrong number of arguments!"); @@ -207,6 +224,19 @@ protected final Object invokeImpl(Object[] args) throws UtilEvalError, EvalError /** Initialize a name space for eval the lambda expression's body */ private NameSpace initNameSpace(Object[] args) throws UtilEvalError { NameSpace nameSpace = new NameSpace(this.declaringNameSpace, "LambdaExpression"); + + if (this.hasReceiver && args.length > 0) { + Object receiver = args[0]; + // Inject the receiver for "this" interception in Name.java + nameSpace.setLocalVariable(BSHEXTENSIONMETHODRECEIVER.toString(), receiver, false); + + // Import the receiver's members for direct access + Object rawReceiver = Primitive.unwrap(receiver); + if (rawReceiver != null) { + nameSpace.importObject(rawReceiver); + } + } + for (int i = 0; i < paramsNames.length; i++) { Class paramType = this.paramsTypes[i]; if (paramType != null) @@ -218,11 +248,10 @@ private NameSpace initNameSpace(Object[] args) throws UtilEvalError { } protected boolean isAssignable(Method to, int round) { - Type[] toParamsTypes = to.getGenericParameterTypes(); + Class[] toParamsTypes = to.getParameterTypes(); if (this.paramsTypes.length != toParamsTypes.length) return false; - - // TODO: validate the return type of 'this.bodyNode' ??? - return Types.isSignatureAssignable(this.paramsTypes, toParamsTypes, round); + + return Types.isSignatureAssignable(toParamsTypes, this.paramsTypes, round); } } diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/BshMethod.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/BshMethod.java index 1f46a40..32108e7 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/BshMethod.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/BshMethod.java @@ -475,7 +475,7 @@ private Object invokeImpl( if ((getParameterCount() == argValues.length) && (argValues[lastParamIndex] == null || (argValues[lastParamIndex].getClass().isArray() && - lastP.getComponentType().isAssignableFrom(argValues[lastParamIndex].getClass().getComponentType())))) { + Types.isClassAssignable(lastP.getComponentType(), argValues[lastParamIndex].getClass().getComponentType())))) { /* * This is the case that the final argument is * a null or it contains an array of the component diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/Invocable.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/Invocable.java index 5bb2f5b..85397cd 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/Invocable.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/Invocable.java @@ -180,7 +180,7 @@ public ParameterType collectParamaters(Object base, Object[] params) protected Object coerceToType(Object param, Class type) throws Throwable { Class pClass = Types.getType(param); - if (null == pClass || !type.isAssignableFrom(pClass)) + if (null == pClass || !Types.isClassAssignable(type, pClass)) param = Types.castObject(param, type, Types.CAST); return Primitive.unwrap(param); } @@ -337,7 +337,7 @@ public ParameterType collectParamaters(Object base, Object[] params) if (getParameterCount() == params.length && lastParam != null && lastParam.getClass().isArray() - && getVarArgsComponentType().isAssignableFrom(lastParam.getClass().getComponentType())) { + && Types.isClassAssignable(getVarArgsComponentType(), lastParam.getClass().getComponentType())) { isFixedArity = true; parameters.add(lastParam); } else if (getParameterCount() == params.length diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/Name.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/Name.java index 2aa76d1..47be7b9 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/Name.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/Name.java @@ -28,6 +28,7 @@ import static bsh.This.Keys.BSHEXTENSIONMETHODRECEIVER; import java.lang.reflect.Array; +import java.lang.reflect.Proxy; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import java.util.List; @@ -932,10 +933,37 @@ private Object invokeLocalMethod( return meth.invoke( args, interpreter, callstack, callerInfo, overrideChild ); } + + try { + Object varObj = namespace.getVariable(methodName); + if ( varObj != null && varObj != Primitive.VOID ) { + if ( isCallableFunction(varObj) ) { + return Reflect.invokeObjectMethod( + varObj, "invoke", args, interpreter, callstack, callerInfo ); + } + } + } catch ( UtilEvalError e ) { /* fallback to command */ } // Look for a BeanShell command return namespace.invokeCommand(methodName, args, interpreter, callstack, callerInfo); } + + /** + * Check if the object is a proxy of our generated functional interfaces. + * Use the marker interface for decoupling from generated names. + */ + private boolean isCallableFunction(Object obj) { + if (obj == null) return false; + Class cls = obj.getClass(); + if (Proxy.isProxyClass(cls)) { + for (Class iface : cls.getInterfaces()) { + if (SyntheticInterfaceFactory.BshLambdaMarker.class.isAssignableFrom(iface)) { + return true; + } + } + } + return false; + } // Static methods that operate on compound ('.' separated) names // I guess we could move these to StringUtil someday diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/Parser.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/Parser.java index 3d73cf1..49644a6 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/Parser.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/Parser.java @@ -1078,7 +1078,8 @@ final public void FormalParameters() throws ParseException {/*@bgen(jjtree) Form case INT: case LONG: case SHORT: - case IDENTIFIER:{ + case IDENTIFIER: + case LPAREN:{ FormalParameter(); label_6: while (true) { @@ -1222,18 +1223,26 @@ final public void Type() throws ParseException {/*@bgen(jjtree) Type */ PrimitiveType(); break; } - case IDENTIFIER:{ - AmbiguousName(); - break; - } default: jj_la1[30] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); + if (jj_2_8(3)) { + FunctionType(); + } else { + switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { + case IDENTIFIER:{ + AmbiguousName(); + break; + } + default: + jj_la1[31] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } } label_8: while (true) { - if (jj_2_8(2)) { + if (jj_2_9(2)) { } else { break label_8; } @@ -1293,12 +1302,13 @@ final public void ReturnType() throws ParseException {/*@bgen(jjtree) ReturnType case INT: case LONG: case SHORT: - case IDENTIFIER:{ + case IDENTIFIER: + case LPAREN:{ Type(); break; } default: - jj_la1[31] = jj_gen; + jj_la1[32] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1414,7 +1424,7 @@ final public void PrimitiveType() throws ParseException {/*@bgen(jjtree) Primiti break; } default: - jj_la1[32] = jj_gen; + jj_la1[33] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1428,6 +1438,110 @@ final public void PrimitiveType() throws ParseException {/*@bgen(jjtree) Primiti } } +/** + * Syntax: ((ParamTypes) -> ReturnType) + * or with receiver: (ReceiverType.(ParamTypes) -> ReturnType) + */ + final public void FunctionType() throws ParseException {/*@bgen(jjtree) FunctionType */ + BSHFunctionType jjtn000 = new BSHFunctionType(JJTFUNCTIONTYPE); + boolean jjtc000 = true; + jjtree.openNodeScope(jjtn000); + jjtreeOpenNodeScope(jjtn000); + try { + jj_consume_token(LPAREN); + if (jj_2_10(2147483647)) { +BSHReceiverType jjtn001 = new BSHReceiverType(JJTRECEIVERTYPE); + boolean jjtc001 = true; + jjtree.openNodeScope(jjtn001); + jjtreeOpenNodeScope(jjtn001); + try { + AmbiguousName(); + } catch (Throwable jjte001) { +if (jjtc001) { + jjtree.clearNodeScope(jjtn001); + jjtc001 = false; + } else { + jjtree.popNode(); + } + if (jjte001 instanceof ParseException) { + throw (ParseException)jjte001; + } + if (jjte001 instanceof RuntimeException) { + throw (RuntimeException)jjte001; + } + throw (Error)jjte001; + } finally { +if (jjtc001) { + jjtree.closeNodeScope(jjtn001, true); + if (jjtree.nodeCreated()) { + jjtreeCloseNodeScope(jjtn001); + } + } + } + jj_consume_token(DOT); + } else { + ; + } + jj_consume_token(LPAREN); + switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { + case BOOLEAN: + case BYTE: + case CHAR: + case DOUBLE: + case FLOAT: + case INT: + case LONG: + case SHORT: + case IDENTIFIER: + case LPAREN:{ + Type(); + label_9: + while (true) { + switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { + case COMMA:{ + break; + } + default: + jj_la1[34] = jj_gen; + break label_9; + } + jj_consume_token(COMMA); + Type(); + } + break; + } + default: + jj_la1[35] = jj_gen; + ; + } + jj_consume_token(RPAREN); + jj_consume_token(ARROW); + ReturnType(); + jj_consume_token(RPAREN); + } catch (Throwable jjte000) { +if (jjtc000) { + jjtree.clearNodeScope(jjtn000); + jjtc000 = false; + } else { + jjtree.popNode(); + } + if (jjte000 instanceof ParseException) { + throw (ParseException)jjte000; + } + if (jjte000 instanceof RuntimeException) { + throw (RuntimeException)jjte000; + } + throw (Error)jjte000; + } finally { +if (jjtc000) { + jjtree.closeNodeScope(jjtn000, true); + if (jjtree.nodeCreated()) { + jjtreeCloseNodeScope(jjtn000); + } + } + } +} + final public void AmbiguousName() throws ParseException {/*@bgen(jjtree) AmbiguousName */ BSHAmbiguousName jjtn000 = new BSHAmbiguousName(JJTAMBIGUOUSNAME); boolean jjtc000 = true; @@ -1437,11 +1551,11 @@ final public void AmbiguousName() throws ParseException {/*@bgen(jjtree) Ambiguo try { t = jj_consume_token(IDENTIFIER); s = new StringBuilder(t.image); - label_9: + label_10: while (true) { - if (jj_2_9(2)) { + if (jj_2_11(2)) { } else { - break label_9; + break label_10; } jj_consume_token(DOT); t = jj_consume_token(IDENTIFIER); @@ -1508,35 +1622,35 @@ final public void ExtensionName() throws ParseException {/*@bgen(jjtree) Ambiguo break; } default: - jj_la1[33] = jj_gen; + jj_la1[36] = jj_gen; jj_consume_token(-1); throw new ParseException(); } s = new StringBuilder(t.image); - label_10: + label_11: while (true) { - if (jj_2_10(2)) { + if (jj_2_12(2)) { } else { - break label_10; + break label_11; } jj_consume_token(LBRACKET); jj_consume_token(RBRACKET); s.append("[]"); } - label_11: + label_12: while (true) { - if (jj_2_11(2)) { + if (jj_2_13(2)) { } else { - break label_11; + break label_12; } jj_consume_token(DOT); t = jj_consume_token(IDENTIFIER); s.append("."+t.image); - label_12: + label_13: while (true) { - if (jj_2_12(2)) { + if (jj_2_14(2)) { } else { - break label_12; + break label_13; } jj_consume_token(LBRACKET); jj_consume_token(RBRACKET); @@ -1561,15 +1675,15 @@ final public void ExtensionName() throws ParseException {/*@bgen(jjtree) Ambiguo final public int NameList() throws ParseException {int count = 1; AmbiguousName(); - label_13: + label_14: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case COMMA:{ break; } default: - jj_la1[34] = jj_gen; - break label_13; + jj_la1[37] = jj_gen; + break label_14; } jj_consume_token(COMMA); AmbiguousName(); @@ -1620,7 +1734,7 @@ final public void Expression() throws ParseException {/*@bgen(jjtree) Assignment break; } default: - jj_la1[35] = jj_gen; + jj_la1[38] = jj_gen; ; } } catch (Throwable jjte000) { @@ -1738,7 +1852,7 @@ final public void Expression() throws ParseException {/*@bgen(jjtree) Assignment break; } default: - jj_la1[36] = jj_gen; + jj_la1[39] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1785,14 +1899,14 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[37] = jj_gen; + jj_la1[40] = jj_gen; ; } } final public void NullCoalesceElvisSpaceShipExpression() throws ParseException {Token t=null; ConditionalOrExpression(); - label_14: + label_15: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case SPACESHIP: @@ -1801,8 +1915,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[38] = jj_gen; - break label_14; + jj_la1[41] = jj_gen; + break label_15; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case NULLCOALESCE:{ @@ -1818,7 +1932,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[39] = jj_gen; + jj_la1[42] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1847,7 +1961,7 @@ final public void ConditionalExpression() throws ParseException { final public void ConditionalOrExpression() throws ParseException {Token t=null; ConditionalAndExpression(); - label_15: + label_16: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BOOL_OR: @@ -1855,8 +1969,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[40] = jj_gen; - break label_15; + jj_la1[43] = jj_gen; + break label_16; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BOOL_OR:{ @@ -1868,7 +1982,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[41] = jj_gen; + jj_la1[44] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1897,7 +2011,7 @@ final public void ConditionalExpression() throws ParseException { final public void ConditionalAndExpression() throws ParseException {Token t=null; InclusiveOrExpression(); - label_16: + label_17: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BOOL_AND: @@ -1905,8 +2019,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[42] = jj_gen; - break label_16; + jj_la1[45] = jj_gen; + break label_17; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BOOL_AND:{ @@ -1918,7 +2032,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[43] = jj_gen; + jj_la1[46] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1947,7 +2061,7 @@ final public void ConditionalExpression() throws ParseException { final public void InclusiveOrExpression() throws ParseException {Token t=null; ExclusiveOrExpression(); - label_17: + label_18: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BIT_OR: @@ -1955,8 +2069,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[44] = jj_gen; - break label_17; + jj_la1[47] = jj_gen; + break label_18; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BIT_OR:{ @@ -1968,7 +2082,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[45] = jj_gen; + jj_la1[48] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -1997,7 +2111,7 @@ final public void ConditionalExpression() throws ParseException { final public void ExclusiveOrExpression() throws ParseException {Token t=null; AndExpression(); - label_18: + label_19: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case XOR: @@ -2005,8 +2119,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[46] = jj_gen; - break label_18; + jj_la1[49] = jj_gen; + break label_19; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case XOR:{ @@ -2018,7 +2132,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[47] = jj_gen; + jj_la1[50] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2047,7 +2161,7 @@ final public void ConditionalExpression() throws ParseException { final public void AndExpression() throws ParseException {Token t=null; EqualityExpression(); - label_19: + label_20: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BIT_AND: @@ -2055,8 +2169,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[48] = jj_gen; - break label_19; + jj_la1[51] = jj_gen; + break label_20; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BIT_AND:{ @@ -2068,7 +2182,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[49] = jj_gen; + jj_la1[52] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2097,7 +2211,7 @@ final public void ConditionalExpression() throws ParseException { final public void EqualityExpression() throws ParseException {Token t = null; InstanceOfExpression(); - label_20: + label_21: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case EQ: @@ -2105,8 +2219,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[50] = jj_gen; - break label_20; + jj_la1[53] = jj_gen; + break label_21; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case EQ:{ @@ -2118,7 +2232,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[51] = jj_gen; + jj_la1[54] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2173,14 +2287,14 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[52] = jj_gen; + jj_la1[55] = jj_gen; ; } } final public void RelationalExpression() throws ParseException {Token t = null; ShiftExpression(); - label_21: + label_22: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case GT: @@ -2194,8 +2308,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[53] = jj_gen; - break label_21; + jj_la1[56] = jj_gen; + break label_22; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case LT:{ @@ -2231,7 +2345,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[54] = jj_gen; + jj_la1[57] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2260,7 +2374,7 @@ final public void ConditionalExpression() throws ParseException { final public void ShiftExpression() throws ParseException {Token t = null; AdditiveExpression(); - label_22: + label_23: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case LSHIFT: @@ -2272,8 +2386,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[55] = jj_gen; - break label_22; + jj_la1[58] = jj_gen; + break label_23; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case LSHIFT:{ @@ -2301,7 +2415,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[56] = jj_gen; + jj_la1[59] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2330,7 +2444,7 @@ final public void ConditionalExpression() throws ParseException { final public void AdditiveExpression() throws ParseException {Token t = null; MultiplicativeExpression(); - label_23: + label_24: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case PLUS: @@ -2338,8 +2452,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[57] = jj_gen; - break label_23; + jj_la1[60] = jj_gen; + break label_24; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case PLUS:{ @@ -2351,7 +2465,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[58] = jj_gen; + jj_la1[61] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2380,7 +2494,7 @@ final public void ConditionalExpression() throws ParseException { final public void MultiplicativeExpression() throws ParseException {Token t = null; PowerExpression(); - label_24: + label_25: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case STAR: @@ -2390,8 +2504,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[59] = jj_gen; - break label_24; + jj_la1[62] = jj_gen; + break label_25; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case STAR:{ @@ -2411,7 +2525,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[60] = jj_gen; + jj_la1[63] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2440,7 +2554,7 @@ final public void ConditionalExpression() throws ParseException { final public void PowerExpression() throws ParseException {Token t = null; UnaryExpression(); - label_25: + label_26: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case POWER: @@ -2448,8 +2562,8 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[61] = jj_gen; - break label_25; + jj_la1[64] = jj_gen; + break label_26; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case POWER:{ @@ -2461,7 +2575,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[62] = jj_gen; + jj_la1[65] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2512,7 +2626,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[63] = jj_gen; + jj_la1[66] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2550,7 +2664,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[64] = jj_gen; + jj_la1[67] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2577,10 +2691,10 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[67] = jj_gen; - if (jj_2_13(2147483647)) { + jj_la1[70] = jj_gen; + if (jj_2_15(2147483647)) { LambdaExpression(); - } else if (jj_2_14(2147483647)) { + } else if (jj_2_16(2147483647)) { CastExpression(); } else { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -2621,7 +2735,7 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[65] = jj_gen; + jj_la1[68] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2647,13 +2761,13 @@ final public void ConditionalExpression() throws ParseException { break; } default: - jj_la1[66] = jj_gen; + jj_la1[69] = jj_gen; ; } break; } default: - jj_la1[68] = jj_gen; + jj_la1[71] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2702,11 +2816,11 @@ final public void PrimaryExpression() throws ParseException {/*@bgen(jjtree) Pri jjtreeOpenNodeScope(jjtn000); try { PrimaryPrefix(); - label_26: + label_27: while (true) { - if (jj_2_15(1)) { + if (jj_2_17(1)) { } else { - break label_26; + break label_27; } PrimarySuffix(); } @@ -2782,7 +2896,7 @@ final public void LambdaExpression() throws ParseException {/*@bgen(jjtree) Lamb break; } default: - jj_la1[69] = jj_gen; + jj_la1[72] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2825,7 +2939,7 @@ final public void LambdaExpression() throws ParseException {/*@bgen(jjtree) Lamb break; } default: - jj_la1[70] = jj_gen; + jj_la1[73] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -2870,7 +2984,7 @@ final public void WhenExpression() throws ParseException {/*@bgen(jjtree) WhenEx Expression(); jj_consume_token(RPAREN); jj_consume_token(LBRACE); - label_27: + label_28: while (true) { WhenEntry(); switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -2907,8 +3021,8 @@ final public void WhenExpression() throws ParseException {/*@bgen(jjtree) WhenEx break; } default: - jj_la1[71] = jj_gen; - break label_27; + jj_la1[74] = jj_gen; + break label_28; } } jj_consume_token(RBRACE); @@ -2981,15 +3095,15 @@ final public void WhenEntry() throws ParseException {/*@bgen(jjtree) WhenEntry * case MINUS:{ Expression(); count = 1; - label_28: + label_29: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case COMMA:{ break; } default: - jj_la1[72] = jj_gen; - break label_28; + jj_la1[75] = jj_gen; + break label_29; } jj_consume_token(COMMA); Expression(); @@ -3006,7 +3120,7 @@ final public void WhenEntry() throws ParseException {/*@bgen(jjtree) WhenEntry * break; } default: - jj_la1[73] = jj_gen; + jj_la1[76] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3065,10 +3179,10 @@ final public void PrimaryPrefix() throws ParseException { break; } default: - jj_la1[74] = jj_gen; - if (jj_2_16(2147483647)) { + jj_la1[77] = jj_gen; + if (jj_2_18(2147483647)) { MethodInvocation(); - } else if (jj_2_17(2147483647)) { + } else if (jj_2_19(2147483647)) { Type(); } else { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -3077,7 +3191,7 @@ final public void PrimaryPrefix() throws ParseException { break; } default: - jj_la1[75] = jj_gen; + jj_la1[78] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3091,7 +3205,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary jjtree.openNodeScope(jjtn000); jjtreeOpenNodeScope(jjtn000);Token t = null; try { - if (jj_2_18(2)) { + if (jj_2_20(2)) { jj_consume_token(DOT); jj_consume_token(CLASS); jjtree.closeNodeScope(jjtn000, true); @@ -3139,7 +3253,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[76] = jj_gen; + jj_la1[79] = jj_gen; ; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -3182,7 +3296,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[77] = jj_gen; + jj_la1[80] = jj_gen; ; } jjtn000.slice = true; jjtn000.step = true; @@ -3226,7 +3340,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[78] = jj_gen; + jj_la1[81] = jj_gen; ; } switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -3267,26 +3381,26 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[79] = jj_gen; + jj_la1[82] = jj_gen; ; } break; } default: - jj_la1[80] = jj_gen; + jj_la1[83] = jj_gen; ; } break; } default: - jj_la1[81] = jj_gen; + jj_la1[84] = jj_gen; jj_consume_token(-1); throw new ParseException(); } break; } default: - jj_la1[82] = jj_gen; + jj_la1[85] = jj_gen; ; } jj_consume_token(RBRACKET); @@ -3299,7 +3413,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[86] = jj_gen; + jj_la1[89] = jj_gen; if (getToken(1).kind == COLON_COLON && (getToken(2).kind == IDENTIFIER || getToken(2).kind == NEW ) && getToken(3).kind != RBRACKET) { jj_consume_token(COLON_COLON); switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -3312,7 +3426,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[83] = jj_gen; + jj_la1[86] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3323,7 +3437,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary } jjtn000.operation = BSHPrimarySuffix.METHODREF; jjtn000.field = t.image; - } else if (jj_2_19(2)) { + } else if (jj_2_21(2)) { jj_consume_token(153); t = jj_consume_token(IDENTIFIER); switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -3332,7 +3446,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[84] = jj_gen; + jj_la1[87] = jj_gen; ; } jjtree.closeNodeScope(jjtn000, true); @@ -3343,7 +3457,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary jjtn000.operation = BSHPrimarySuffix.NAME; jjtn000.field = t.image; jjtn000.safeNavigate = true; - } else if (jj_2_20(2)) { + } else if (jj_2_22(2)) { jj_consume_token(DOT); t = jj_consume_token(IDENTIFIER); switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -3352,7 +3466,7 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[85] = jj_gen; + jj_la1[88] = jj_gen; ; } jjtree.closeNodeScope(jjtn000, true); @@ -3377,8 +3491,8 @@ final public void PrimarySuffix() throws ParseException {/*@bgen(jjtree) Primary break; } default: - jj_la1[87] = jj_gen; - if (jj_2_21(2)) { + jj_la1[90] = jj_gen; + if (jj_2_23(2)) { jj_consume_token(DOT); AllocationExpression(); jjtree.closeNodeScope(jjtn000, true); @@ -3546,7 +3660,7 @@ final public void Literal() throws ParseException {/*@bgen(jjtree) Literal */ break; } default: - jj_la1[88] = jj_gen; + jj_la1[91] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3587,7 +3701,7 @@ final public boolean BooleanLiteral() throws ParseException { break; } default: - jj_la1[89] = jj_gen; + jj_la1[92] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3643,7 +3757,7 @@ final public void Arguments() throws ParseException {/*@bgen(jjtree) Arguments * break; } default: - jj_la1[90] = jj_gen; + jj_la1[93] = jj_gen; ; } jj_consume_token(RPAREN); @@ -3674,15 +3788,15 @@ final public void Arguments() throws ParseException {/*@bgen(jjtree) Arguments * // leave these on the stack for Arguments() to handle final public void ArgumentList() throws ParseException { Expression(); - label_29: + label_30: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case COMMA:{ break; } default: - jj_la1[91] = jj_gen; - break label_29; + jj_la1[94] = jj_gen; + break label_30; } jj_consume_token(COMMA); Expression(); @@ -3711,49 +3825,58 @@ final public void AllocationExpression() throws ParseException {/*@bgen(jjtree) ArrayDimensions(); break; } - case IDENTIFIER:{ - AmbiguousName(); - switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { - case LBRACE: - case LBRACKET:{ - ArrayDimensions(); - break; - } - case LPAREN:{ - Arguments(); - if (jj_2_22(2)) { - Block(); - } else { - ; - } - break; - } - default: - jj_la1[92] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - } - case LBRACE: - case LBRACKET:{ - ArrayDimensions(); - break; - } default: - jj_la1[93] = jj_gen; - jj_consume_token(-1); - throw new ParseException(); - } - break; - } - case LBRACE: - case LBRACKET:{ - ArrayDimensions(); + jj_la1[96] = jj_gen; + if (jj_2_25(3)) { + FunctionType(); + ArrayDimensions(); + } else { + switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { + case IDENTIFIER:{ + AmbiguousName(); + switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { + case LBRACE: + case LBRACKET:{ + ArrayDimensions(); + break; + } + case LPAREN:{ + Arguments(); + if (jj_2_24(2)) { + Block(); + } else { + ; + } + break; + } + default: + jj_la1[95] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + break; + } + case LBRACE: + case LBRACKET:{ + ArrayDimensions(); + break; + } + default: + jj_la1[97] = jj_gen; + jj_consume_token(-1); + throw new ParseException(); + } + } + } + break; + } + case LBRACE: + case LBRACKET:{ + ArrayDimensions(); break; } default: - jj_la1[94] = jj_gen; + jj_la1[98] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3787,23 +3910,23 @@ final public void ArrayDimensions() throws ParseException {/*@bgen(jjtree) Array jjtree.openNodeScope(jjtn000); jjtreeOpenNodeScope(jjtn000); try { - if (jj_2_25(2)) { - label_30: + if (jj_2_28(2)) { + label_31: while (true) { jj_consume_token(LBRACKET); Expression(); jj_consume_token(RBRACKET); jjtn000.addDefinedDimension(); - if (jj_2_23(2)) { + if (jj_2_26(2)) { } else { - break label_30; + break label_31; } } - label_31: + label_32: while (true) { - if (jj_2_24(2)) { + if (jj_2_27(2)) { } else { - break label_31; + break label_32; } jj_consume_token(LBRACKET); jj_consume_token(RBRACKET); @@ -3812,7 +3935,7 @@ final public void ArrayDimensions() throws ParseException {/*@bgen(jjtree) Array } else { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case LBRACKET:{ - label_32: + label_33: while (true) { jj_consume_token(LBRACKET); jj_consume_token(RBRACKET); @@ -3822,8 +3945,8 @@ final public void ArrayDimensions() throws ParseException {/*@bgen(jjtree) Array break; } default: - jj_la1[95] = jj_gen; - break label_32; + jj_la1[99] = jj_gen; + break label_33; } } ArrayInitializer(); @@ -3840,7 +3963,7 @@ final public void ArrayDimensions() throws ParseException {/*@bgen(jjtree) Array break; } default: - jj_la1[96] = jj_gen; + jj_la1[100] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -3874,9 +3997,9 @@ final public void ArrayDimensions() throws ParseException {/*@bgen(jjtree) Array */ final public void Statement() throws ParseException { - if (jj_2_26(2)) { + if (jj_2_29(2)) { LabeledStatement(); - } else if (jj_2_27(3)) { + } else if (jj_2_30(3)) { Block(); } else { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -3934,7 +4057,7 @@ void Statement() throws ParseException { break; } default: - jj_la1[97] = jj_gen; + jj_la1[101] = jj_gen; if (isRegularForStatement()) { ForStatement(); } else { @@ -3968,7 +4091,7 @@ void Statement() throws ParseException { break; } default: - jj_la1[98] = jj_gen; + jj_la1[102] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4028,15 +4151,15 @@ final public void Block() throws ParseException {/*@bgen(jjtree) Block */ break; } default: - jj_la1[99] = jj_gen; + jj_la1[103] = jj_gen; ; } jj_consume_token(LBRACE); - label_33: + label_34: while (true) { - if (jj_2_28(1)) { + if (jj_2_31(1)) { } else { - break label_33; + break label_34; } BlockStatement(); } @@ -4072,16 +4195,16 @@ final public void Block() throws ParseException {/*@bgen(jjtree) Block */ } final public void BlockStatement() throws ParseException { - if (jj_2_29(2147483647)) { + if (jj_2_32(2147483647)) { ClassDeclaration(); - } else if (jj_2_30(2147483647)) { + } else if (jj_2_33(2147483647)) { MethodDeclaration(); - } else if (jj_2_31(2147483647)) { + } else if (jj_2_34(2147483647)) { MethodDeclaration(); - } else if (jj_2_32(2147483647)) { + } else if (jj_2_35(2147483647)) { TypedVariableDeclaration(); StatementTerminator(); - } else if (jj_2_33(1)) { + } else if (jj_2_36(1)) { Statement(); } else { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -4094,7 +4217,7 @@ final public void BlockStatement() throws ParseException { break; } default: - jj_la1[100] = jj_gen; + jj_la1[104] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4112,7 +4235,7 @@ final public void MethodDeclTerminator() throws ParseException { break; } default: - jj_la1[101] = jj_gen; + jj_la1[105] = jj_gen; if (isImplicitMethodTerminator()) { } else { @@ -4129,7 +4252,7 @@ final public void StatementTerminator() throws ParseException { break; } default: - jj_la1[102] = jj_gen; + jj_la1[106] = jj_gen; ; } } @@ -4149,7 +4272,7 @@ final public void SwitchStatement() throws ParseException {/*@bgen(jjtree) Switc Expression(); jj_consume_token(RPAREN); jj_consume_token(LBRACE); - label_34: + label_35: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case CASE: @@ -4157,15 +4280,15 @@ final public void SwitchStatement() throws ParseException {/*@bgen(jjtree) Switc break; } default: - jj_la1[103] = jj_gen; - break label_34; + jj_la1[107] = jj_gen; + break label_35; } SwitchLabel(); - label_35: + label_36: while (true) { - if (jj_2_34(1)) { + if (jj_2_37(1)) { } else { - break label_35; + break label_36; } BlockStatement(); } @@ -4219,7 +4342,7 @@ final public void SwitchLabel() throws ParseException {/*@bgen(jjtree) SwitchLab break; } default: - jj_la1[104] = jj_gen; + jj_la1[108] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4264,8 +4387,8 @@ final public void IfStatement() throws ParseException {/*@bgen(jjtree) IfStateme break; } default: - jj_la1[105] = jj_gen; - if (jj_2_35(1)) { + jj_la1[109] = jj_gen; + if (jj_2_38(1)) { Statement(); } else { jj_consume_token(-1); @@ -4279,7 +4402,7 @@ final public void IfStatement() throws ParseException {/*@bgen(jjtree) IfStateme break; } default: - jj_la1[106] = jj_gen; + jj_la1[110] = jj_gen; ; } } catch (Throwable jjte000) { @@ -4443,7 +4566,7 @@ final public void ForStatement() throws ParseException {/*@bgen(jjtree) ForState break; } default: - jj_la1[107] = jj_gen; + jj_la1[111] = jj_gen; ; } jj_consume_token(SEMICOLON); @@ -4482,7 +4605,7 @@ final public void ForStatement() throws ParseException {/*@bgen(jjtree) ForState break; } default: - jj_la1[108] = jj_gen; + jj_la1[112] = jj_gen; ; } jj_consume_token(SEMICOLON); @@ -4521,7 +4644,7 @@ final public void ForStatement() throws ParseException {/*@bgen(jjtree) ForState break; } default: - jj_la1[109] = jj_gen; + jj_la1[113] = jj_gen; ; } jj_consume_token(RPAREN); @@ -4559,7 +4682,7 @@ final public void EnhancedForStatement() throws ParseException {/*@bgen(jjtree) jjtree.openNodeScope(jjtn000); jjtreeOpenNodeScope(jjtn000);Token t = null; try { - if (jj_2_36(4)) { + if (jj_2_39(4)) { jj_consume_token(FOR); jj_consume_token(LPAREN); t = jj_consume_token(IDENTIFIER); @@ -4585,7 +4708,7 @@ final public void EnhancedForStatement() throws ParseException {/*@bgen(jjtree) break; } default: - jj_la1[110] = jj_gen; + jj_la1[114] = jj_gen; ; } Type(); @@ -4603,7 +4726,7 @@ final public void EnhancedForStatement() throws ParseException {/*@bgen(jjtree) break; } default: - jj_la1[111] = jj_gen; + jj_la1[115] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4633,7 +4756,7 @@ final public void EnhancedForStatement() throws ParseException {/*@bgen(jjtree) } final public void ForInit() throws ParseException {Token t = null; - if (jj_2_37(2147483647)) { + if (jj_2_40(2147483647)) { TypedVariableDeclaration(); } else { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { @@ -4670,7 +4793,7 @@ final public void EnhancedForStatement() throws ParseException {/*@bgen(jjtree) break; } default: - jj_la1[112] = jj_gen; + jj_la1[116] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -4692,15 +4815,15 @@ final public void TypedVariableDeclaration() throws ParseException {/*@bgen(jjtr mods = Modifiers(Modifiers.FIELD, false); Type(); VariableDeclarator(); - label_36: + label_37: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case COMMA:{ break; } default: - jj_la1[113] = jj_gen; - break label_36; + jj_la1[117] = jj_gen; + break label_37; } jj_consume_token(COMMA); VariableDeclarator(); @@ -4742,15 +4865,15 @@ final public void StatementExpressionList() throws ParseException {/*@bgen(jjtre jjtreeOpenNodeScope(jjtn000); try { StatementExpression(); - label_37: + label_38: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case COMMA:{ break; } default: - jj_la1[114] = jj_gen; - break label_37; + jj_la1[118] = jj_gen; + break label_38; } jj_consume_token(COMMA); StatementExpression(); @@ -4790,7 +4913,7 @@ final public void BreakStatement() throws ParseException {/*@bgen(jjtree) Return jjtreeOpenNodeScope(jjtn000);Token t = null; try { jj_consume_token(BREAK); - if (jj_2_38(2)) { + if (jj_2_41(2)) { t = jj_consume_token(IDENTIFIER); jj_consume_token(SEMICOLON); jjtn000.label = t.image; @@ -4834,7 +4957,7 @@ final public void ContinueStatement() throws ParseException {/*@bgen(jjtree) Ret jjtreeOpenNodeScope(jjtn000);Token t = null; try { jj_consume_token(CONTINUE); - if (jj_2_39(2)) { + if (jj_2_42(2)) { t = jj_consume_token(IDENTIFIER); jj_consume_token(SEMICOLON); jjtn000.label = t.image; @@ -5001,19 +5124,19 @@ final public void TryStatement() throws ParseException {/*@bgen(jjtree) TryState break; } default: - jj_la1[115] = jj_gen; + jj_la1[119] = jj_gen; ; } Block(); - label_38: + label_39: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case CATCH:{ break; } default: - jj_la1[116] = jj_gen; - break label_38; + jj_la1[120] = jj_gen; + break label_39; } jj_consume_token(CATCH); jj_consume_token(LPAREN); @@ -5030,7 +5153,7 @@ final public void TryStatement() throws ParseException {/*@bgen(jjtree) TryState break; } default: - jj_la1[117] = jj_gen; + jj_la1[121] = jj_gen; ; } jjtree.closeNodeScope(jjtn000, true); @@ -5069,7 +5192,7 @@ final public void MultiCatch() throws ParseException {/*@bgen(jjtree) MultiCatch jjtree.openNodeScope(jjtn000); jjtreeOpenNodeScope(jjtn000);Token t; try { - if (jj_2_40(2)) { + if (jj_2_43(2)) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case FINAL:{ jj_consume_token(FINAL); @@ -5077,19 +5200,19 @@ final public void MultiCatch() throws ParseException {/*@bgen(jjtree) MultiCatch break; } default: - jj_la1[118] = jj_gen; + jj_la1[122] = jj_gen; ; } Type(); - label_39: + label_40: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case BIT_OR:{ break; } default: - jj_la1[119] = jj_gen; - break label_39; + jj_la1[123] = jj_gen; + break label_40; } jj_consume_token(BIT_OR); Type(); @@ -5114,7 +5237,7 @@ final public void MultiCatch() throws ParseException {/*@bgen(jjtree) MultiCatch break; } default: - jj_la1[120] = jj_gen; + jj_la1[124] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -5151,15 +5274,15 @@ final public void TryWithResources() throws ParseException {/*@bgen(jjtree) TryW try { jj_consume_token(LPAREN); AutoCloseable(); - label_40: + label_41: while (true) { switch (jj_ntk == -1 ? jj_ntk_f() : jj_ntk) { case SEMICOLON:{ break; } default: - jj_la1[121] = jj_gen; - break label_40; + jj_la1[125] = jj_gen; + break label_41; } jj_consume_token(SEMICOLON); AutoCloseable(); @@ -5195,7 +5318,7 @@ final public void AutoCloseable() throws ParseException {/*@bgen(jjtree) AutoClo jjtree.openNodeScope(jjtn000); jjtreeOpenNodeScope(jjtn000); try { - if (jj_2_41(2)) { + if (jj_2_44(2)) { Type(); VariableDeclarator(); } else { @@ -5205,7 +5328,7 @@ final public void AutoCloseable() throws ParseException {/*@bgen(jjtree) AutoClo break; } default: - jj_la1[122] = jj_gen; + jj_la1[126] = jj_gen; jj_consume_token(-1); throw new ParseException(); } @@ -5644,195 +5767,192 @@ private boolean jj_2_41(int xla) finally { jj_save(40, xla); } } - private boolean jj_3R_168() + private boolean jj_2_42(int xla) { - if (jj_3R_170()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_171()) { jj_scanpos = xsp; break; } - } - return false; + jj_la = xla; + jj_scanpos = token; + jj_lastpos = token; + try { return (!jj_3_42()); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(41, xla); } + } + + private boolean jj_2_43(int xla) + { + jj_la = xla; + jj_scanpos = token; + jj_lastpos = token; + try { return (!jj_3_43()); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(42, xla); } + } + + private boolean jj_2_44(int xla) + { + jj_la = xla; + jj_scanpos = token; + jj_lastpos = token; + try { return (!jj_3_44()); } + catch(LookaheadSuccess ls) { return true; } + finally { jj_save(43, xla); } } private boolean jj_3R_117() { - if (jj_scan_token(DO)) return true; - if (jj_3R_63()) return true; - if (jj_scan_token(WHILE)) return true; + if (jj_scan_token(SWITCH)) return true; if (jj_scan_token(LPAREN)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; if (jj_scan_token(RPAREN)) return true; - if (jj_3R_48()) return true; + if (jj_scan_token(LBRACE)) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_261()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RBRACE)) return true; return false; } - private boolean jj_3R_171() + private boolean jj_3R_168() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(88)) { - jj_scanpos = xsp; - if (jj_scan_token(89)) { - jj_scanpos = xsp; - if (jj_scan_token(86)) { - jj_scanpos = xsp; - if (jj_scan_token(87)) { - jj_scanpos = xsp; - if (jj_scan_token(93)) { - jj_scanpos = xsp; - if (jj_scan_token(94)) { - jj_scanpos = xsp; - if (jj_scan_token(95)) { + if (jj_scan_token(112)) { jj_scanpos = xsp; - if (jj_scan_token(96)) return true; - } - } - } - } - } - } + if (jj_scan_token(113)) return true; } - if (jj_3R_170()) return true; + if (jj_3R_163()) return true; return false; } - private boolean jj_3R_118() + private boolean jj_3R_261() { - if (jj_scan_token(FOR)) return true; - if (jj_scan_token(LPAREN)) return true; + if (jj_3R_270()) return true; Token xsp; - xsp = jj_scanpos; - if (jj_3R_257()) jj_scanpos = xsp; - if (jj_scan_token(SEMICOLON)) return true; - xsp = jj_scanpos; - if (jj_3R_258()) jj_scanpos = xsp; - if (jj_scan_token(SEMICOLON)) return true; - xsp = jj_scanpos; - if (jj_3R_259()) jj_scanpos = xsp; - if (jj_scan_token(RPAREN)) return true; - if (jj_3R_63()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3_37()) { jj_scanpos = xsp; break; } + } return false; } - private boolean jj_3R_170() + private boolean jj_3R_163() { - if (jj_3R_172()) return true; + if (jj_3R_169()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_173()) { jj_scanpos = xsp; break; } + if (jj_3R_171()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_173() + private boolean jj_3R_171() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(118)) { - jj_scanpos = xsp; - if (jj_scan_token(119)) { - jj_scanpos = xsp; - if (jj_scan_token(120)) { - jj_scanpos = xsp; - if (jj_scan_token(121)) { - jj_scanpos = xsp; - if (jj_scan_token(122)) { + if (jj_scan_token(108)) { jj_scanpos = xsp; - if (jj_scan_token(123)) return true; - } - } - } - } + if (jj_scan_token(109)) return true; } - if (jj_3R_172()) return true; + if (jj_3R_169()) return true; return false; } - private boolean jj_3R_255() + private boolean jj_3R_270() { - if (jj_scan_token(SEMICOLON)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_277()) { + jj_scanpos = xsp; + if (jj_3R_278()) return true; + } return false; } - private boolean jj_3R_258() + private boolean jj_3R_277() { - if (jj_3R_59()) return true; + if (jj_scan_token(CASE)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(COLON)) return true; return false; } - private boolean jj_3R_259() + private boolean jj_3R_278() { - if (jj_3R_265()) return true; + if (jj_scan_token(154)) return true; return false; } - private boolean jj_3R_172() + private boolean jj_3R_169() { - if (jj_3R_174()) return true; + if (jj_3R_172()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_175()) { jj_scanpos = xsp; break; } + if (jj_3R_173()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_257() + private boolean jj_3R_173() { - if (jj_3R_264()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(92)) { + jj_scanpos = xsp; + if (jj_scan_token(97)) return true; + } + if (jj_3R_172()) return true; return false; } - private boolean jj_3_36() + private boolean jj_3_37() { - if (jj_scan_token(FOR)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(COLON)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(RPAREN)) return true; - if (jj_3R_63()) return true; + if (jj_3R_42()) return true; return false; } - private boolean jj_3R_119() + private boolean jj_3R_118() { + if (jj_scan_token(IF)) return true; + if (jj_scan_token(LPAREN)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(RPAREN)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3_36()) { + if (jj_3R_262()) { jj_scanpos = xsp; - if (jj_3R_146()) return true; + if (jj_3_38()) return true; } + xsp = jj_scanpos; + if (jj_3R_263()) jj_scanpos = xsp; return false; } - private boolean jj_3R_175() + private boolean jj_3R_172() { + if (jj_3R_174()) return true; Token xsp; xsp = jj_scanpos; - if (jj_scan_token(104)) { - jj_scanpos = xsp; - if (jj_scan_token(105)) return true; - } - if (jj_3R_174()) return true; + if (jj_3R_175()) jj_scanpos = xsp; return false; } - private boolean jj_3R_146() + private boolean jj_3R_119() { - if (jj_scan_token(FOR)) return true; + if (jj_scan_token(WHILE)) return true; if (jj_scan_token(LPAREN)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_266()) jj_scanpos = xsp; - if (jj_3R_52()) return true; - if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(COLON)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; if (jj_scan_token(RPAREN)) return true; - if (jj_3R_63()) return true; + if (jj_3R_64()) return true; + return false; + } + + private boolean jj_3R_175() + { + if (jj_scan_token(INSTANCEOF)) return true; + if (jj_3R_53()) return true; return false; } @@ -5851,34 +5971,41 @@ private boolean jj_3R_177() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(106)) { + if (jj_scan_token(88)) { jj_scanpos = xsp; - if (jj_scan_token(107)) { + if (jj_scan_token(89)) { jj_scanpos = xsp; - if (jj_scan_token(114)) { + if (jj_scan_token(86)) { jj_scanpos = xsp; - if (jj_scan_token(115)) return true; - } - } - } - if (jj_3R_176()) return true; - return false; - } - - private boolean jj_3R_264() - { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_272()) { + if (jj_scan_token(87)) { + jj_scanpos = xsp; + if (jj_scan_token(93)) { + jj_scanpos = xsp; + if (jj_scan_token(94)) { + jj_scanpos = xsp; + if (jj_scan_token(95)) { jj_scanpos = xsp; - if (jj_3R_273()) return true; + if (jj_scan_token(96)) return true; + } + } + } + } } + } + } + if (jj_3R_176()) return true; return false; } - private boolean jj_3R_272() + private boolean jj_3R_120() { - if (jj_3R_103()) return true; + if (jj_scan_token(DO)) return true; + if (jj_3R_64()) return true; + if (jj_scan_token(WHILE)) return true; + if (jj_scan_token(LPAREN)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(RPAREN)) return true; + if (jj_3R_49()) return true; return false; } @@ -5893,51 +6020,228 @@ private boolean jj_3R_176() return false; } - private boolean jj_3R_273() + private boolean jj_3R_121() { - if (jj_3R_274()) return true; + if (jj_scan_token(FOR)) return true; + if (jj_scan_token(LPAREN)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_264()) jj_scanpos = xsp; + if (jj_scan_token(SEMICOLON)) return true; + xsp = jj_scanpos; + if (jj_3R_265()) jj_scanpos = xsp; + if (jj_scan_token(SEMICOLON)) return true; + xsp = jj_scanpos; + if (jj_3R_266()) jj_scanpos = xsp; + if (jj_scan_token(RPAREN)) return true; + if (jj_3R_64()) return true; + return false; + } + + private boolean jj_3R_179() + { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(118)) { + jj_scanpos = xsp; + if (jj_scan_token(119)) { + jj_scanpos = xsp; + if (jj_scan_token(120)) { + jj_scanpos = xsp; + if (jj_scan_token(121)) { + jj_scanpos = xsp; + if (jj_scan_token(122)) { + jj_scanpos = xsp; + if (jj_scan_token(123)) return true; + } + } + } + } + } + if (jj_3R_178()) return true; + return false; + } + + private boolean jj_3R_262() + { + if (jj_scan_token(SEMICOLON)) return true; + return false; + } + + private boolean jj_3R_178() + { + if (jj_3R_180()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_181()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_265() + { + if (jj_3R_60()) return true; return false; } private boolean jj_3R_266() { - if (jj_scan_token(FINAL)) return true; + if (jj_3R_272()) return true; return false; } - private boolean jj_3R_179() + private boolean jj_3R_181() { Token xsp; xsp = jj_scanpos; - if (jj_scan_token(116)) { + if (jj_scan_token(104)) { jj_scanpos = xsp; - if (jj_scan_token(117)) return true; + if (jj_scan_token(105)) return true; } - if (jj_3R_178()) return true; + if (jj_3R_180()) return true; return false; } - private boolean jj_3_37() + private boolean jj_3R_264() { - if (jj_3R_61()) return true; - if (jj_3R_52()) return true; + if (jj_3R_271()) return true; + return false; + } + + private boolean jj_3_39() + { + if (jj_scan_token(FOR)) return true; + if (jj_scan_token(LPAREN)) return true; if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(COLON)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(RPAREN)) return true; + if (jj_3R_64()) return true; return false; } - private boolean jj_3R_178() + private boolean jj_3R_122() { Token xsp; xsp = jj_scanpos; - if (jj_3R_180()) { + if (jj_3_39()) { jj_scanpos = xsp; - if (jj_3R_181()) { + if (jj_3R_151()) return true; + } + return false; + } + + private boolean jj_3R_180() + { + if (jj_3R_182()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_183()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_151() + { + if (jj_scan_token(FOR)) return true; + if (jj_scan_token(LPAREN)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_273()) jj_scanpos = xsp; + if (jj_3R_53()) return true; + if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(COLON)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(RPAREN)) return true; + if (jj_3R_64()) return true; + return false; + } + + private boolean jj_3R_183() + { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(106)) { jj_scanpos = xsp; - if (jj_3R_182()) { + if (jj_scan_token(107)) { jj_scanpos = xsp; - if (jj_3R_183()) { + if (jj_scan_token(114)) { jj_scanpos = xsp; + if (jj_scan_token(115)) return true; + } + } + } + if (jj_3R_182()) return true; + return false; + } + + private boolean jj_3R_182() + { if (jj_3R_184()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_185()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_271() + { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_279()) { + jj_scanpos = xsp; + if (jj_3R_280()) return true; + } + return false; + } + + private boolean jj_3R_279() + { + if (jj_3R_105()) return true; + return false; + } + + private boolean jj_3R_280() + { + if (jj_3R_281()) return true; + return false; + } + + private boolean jj_3R_273() + { + if (jj_scan_token(FINAL)) return true; + return false; + } + + private boolean jj_3R_185() + { + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(116)) { + jj_scanpos = xsp; + if (jj_scan_token(117)) return true; + } + if (jj_3R_184()) return true; + return false; + } + + private boolean jj_3R_184() + { + Token xsp; + xsp = jj_scanpos; + if (jj_3R_186()) { + jj_scanpos = xsp; + if (jj_3R_187()) { + jj_scanpos = xsp; + if (jj_3R_188()) { + jj_scanpos = xsp; + if (jj_3R_189()) { + jj_scanpos = xsp; + if (jj_3R_190()) return true; } } } @@ -5945,7 +6249,7 @@ private boolean jj_3R_178() return false; } - private boolean jj_3R_180() + private boolean jj_3R_186() { Token xsp; xsp = jj_scanpos; @@ -5959,11 +6263,19 @@ private boolean jj_3R_180() } } } - if (jj_3R_178()) return true; + if (jj_3R_184()) return true; return false; } - private boolean jj_3R_181() + private boolean jj_3_40() + { + if (jj_3R_62()) return true; + if (jj_3R_53()) return true; + if (jj_scan_token(IDENTIFIER)) return true; + return false; + } + + private boolean jj_3R_187() { Token xsp; xsp = jj_scanpos; @@ -5971,66 +6283,66 @@ private boolean jj_3R_181() jj_scanpos = xsp; if (jj_scan_token(103)) return true; } - if (jj_3R_187()) return true; + if (jj_3R_193()) return true; return false; } - private boolean jj_3R_103() + private boolean jj_3R_188() { - if (jj_3R_61()) return true; - if (jj_3R_52()) return true; - if (jj_3R_66()) return true; + if (jj_3R_191()) return true; + return false; + } + + private boolean jj_3R_105() + { + if (jj_3R_62()) return true; + if (jj_3R_53()) return true; + if (jj_3R_67()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_241()) { jj_scanpos = xsp; break; } + if (jj_3R_248()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_182() + private boolean jj_3R_189() { - if (jj_3R_185()) return true; + if (jj_3R_192()) return true; return false; } - private boolean jj_3R_183() + private boolean jj_3R_190() { - if (jj_3R_186()) return true; + if (jj_3R_193()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_194()) jj_scanpos = xsp; return false; } - private boolean jj_3_35() + private boolean jj_3_38() { - if (jj_3R_63()) return true; + if (jj_3R_64()) return true; return false; } - private boolean jj_3R_274() + private boolean jj_3R_281() { - if (jj_3R_113()) return true; + if (jj_3R_116()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_278()) { jj_scanpos = xsp; break; } + if (jj_3R_285()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_184() - { - if (jj_3R_187()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_188()) jj_scanpos = xsp; - return false; - } - - private boolean jj_3_13() + private boolean jj_3_15() { Token xsp; xsp = jj_scanpos; - if (jj_3R_54()) { + if (jj_3R_55()) { jj_scanpos = xsp; if (jj_scan_token(73)) return true; } @@ -6038,86 +6350,86 @@ private boolean jj_3_13() return false; } - private boolean jj_3R_54() + private boolean jj_3R_55() { - if (jj_3R_44()) return true; + if (jj_3R_45()) return true; return false; } - private boolean jj_3R_265() + private boolean jj_3R_192() { - if (jj_3R_274()) return true; + if (jj_scan_token(LPAREN)) return true; + if (jj_3R_53()) return true; + if (jj_scan_token(RPAREN)) return true; + if (jj_3R_184()) return true; return false; } - private boolean jj_3R_186() + private boolean jj_3_16() { if (jj_scan_token(LPAREN)) return true; - if (jj_3R_52()) return true; + if (jj_3R_53()) return true; if (jj_scan_token(RPAREN)) return true; - if (jj_3R_178()) return true; return false; } - private boolean jj_3_14() + private boolean jj_3R_272() { - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_52()) return true; - if (jj_scan_token(RPAREN)) return true; + if (jj_3R_281()) return true; return false; } - private boolean jj_3R_120() + private boolean jj_3R_193() { - if (jj_scan_token(BREAK)) return true; + if (jj_3R_196()) return true; Token xsp; - xsp = jj_scanpos; - if (jj_3_38()) { - jj_scanpos = xsp; - if (jj_3R_158()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3_17()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_187() + private boolean jj_3R_123() { - if (jj_3R_190()) return true; + if (jj_scan_token(BREAK)) return true; Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3_15()) { jj_scanpos = xsp; break; } + xsp = jj_scanpos; + if (jj_3_41()) { + jj_scanpos = xsp; + if (jj_3R_164()) return true; } return false; } - private boolean jj_3R_256() + private boolean jj_3R_263() { if (jj_scan_token(ELSE)) return true; - if (jj_3R_63()) return true; + if (jj_3R_64()) return true; return false; } - private boolean jj_3_38() + private boolean jj_3_41() { if (jj_scan_token(IDENTIFIER)) return true; if (jj_scan_token(SEMICOLON)) return true; return false; } - private boolean jj_3R_158() + private boolean jj_3R_208() { - if (jj_3R_48()) return true; + if (jj_3R_47()) return true; + if (jj_3R_218()) return true; return false; } - private boolean jj_3R_202() + private boolean jj_3R_164() { - if (jj_3R_46()) return true; - if (jj_3R_212()) return true; + if (jj_3R_49()) return true; return false; } - private boolean jj_3R_188() + private boolean jj_3R_194() { Token xsp; xsp = jj_scanpos; @@ -6128,184 +6440,190 @@ private boolean jj_3R_188() return false; } - private boolean jj_3R_241() - { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_66()) return true; - return false; - } - - private boolean jj_3R_121() - { - if (jj_scan_token(CONTINUE)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3_39()) { - jj_scanpos = xsp; - if (jj_3R_159()) return true; - } - return false; - } - - private boolean jj_3R_185() + private boolean jj_3R_191() { Token xsp; xsp = jj_scanpos; - if (jj_3R_189()) { + if (jj_3R_195()) { jj_scanpos = xsp; if (jj_scan_token(73)) return true; } if (jj_scan_token(ARROW)) return true; xsp = jj_scanpos; - if (jj_3R_191()) { + if (jj_3R_197()) { jj_scanpos = xsp; - if (jj_3R_192()) return true; + if (jj_3R_198()) return true; } return false; } - private boolean jj_3R_278() + private boolean jj_3R_195() + { + if (jj_3R_45()) return true; + return false; + } + + private boolean jj_3R_248() + { + if (jj_scan_token(COMMA)) return true; + if (jj_3R_67()) return true; + return false; + } + + private boolean jj_3R_124() { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_113()) return true; + if (jj_scan_token(CONTINUE)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3_42()) { + jj_scanpos = xsp; + if (jj_3R_165()) return true; + } return false; } - private boolean jj_3R_189() + private boolean jj_3R_285() { - if (jj_3R_44()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_116()) return true; return false; } - private boolean jj_3_39() + private boolean jj_3R_197() { - if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(SEMICOLON)) return true; + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_191() + private boolean jj_3_17() { - if (jj_3R_58()) return true; + if (jj_3R_56()) return true; return false; } - private boolean jj_3R_159() + private boolean jj_3_42() { - if (jj_3R_48()) return true; + if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(SEMICOLON)) return true; return false; } - private boolean jj_3_15() + private boolean jj_3R_165() { - if (jj_3R_55()) return true; + if (jj_3R_49()) return true; return false; } - private boolean jj_3R_201() + private boolean jj_3R_207() { if (jj_scan_token(WHEN)) return true; if (jj_scan_token(LPAREN)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; if (jj_scan_token(RPAREN)) return true; if (jj_scan_token(LBRACE)) return true; Token xsp; - if (jj_3R_211()) return true; + if (jj_3R_217()) return true; while (true) { xsp = jj_scanpos; - if (jj_3R_211()) { jj_scanpos = xsp; break; } + if (jj_3R_217()) { jj_scanpos = xsp; break; } } if (jj_scan_token(RBRACE)) return true; return false; } - private boolean jj_3R_122() + private boolean jj_3R_198() { - if (jj_scan_token(RETURN)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_160()) jj_scanpos = xsp; - if (jj_3R_48()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_192() + private boolean jj_3R_125() { - if (jj_3R_59()) return true; + if (jj_scan_token(RETURN)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_166()) jj_scanpos = xsp; + if (jj_3R_49()) return true; return false; } - private boolean jj_3R_211() + private boolean jj_3R_217() { - if (jj_3R_218()) return true; + if (jj_3R_224()) return true; return false; } - private boolean jj_3R_218() + private boolean jj_3R_224() { Token xsp; xsp = jj_scanpos; - if (jj_3R_227()) { + if (jj_3R_234()) { jj_scanpos = xsp; - if (jj_3R_228()) return true; + if (jj_3R_235()) return true; } return false; } - private boolean jj_3R_227() + private boolean jj_3R_234() { if (jj_scan_token(ELSE)) return true; if (jj_scan_token(ARROW)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_123() + private boolean jj_3R_235() + { + if (jj_3R_60()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_242()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(ARROW)) return true; + if (jj_3R_60()) return true; + return false; + } + + private boolean jj_3R_126() { if (jj_scan_token(SYNCHRONIZED)) return true; if (jj_scan_token(LPAREN)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; if (jj_scan_token(RPAREN)) return true; - if (jj_3R_58()) return true; + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_228() + private boolean jj_3_1() { - if (jj_3R_59()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_235()) { jj_scanpos = xsp; break; } - } - if (jj_scan_token(ARROW)) return true; - if (jj_3R_59()) return true; + if (jj_3R_42()) return true; return false; } - private boolean jj_3R_160() + private boolean jj_3R_166() { - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_190() + private boolean jj_3R_196() { Token xsp; xsp = jj_scanpos; - if (jj_3R_193()) { + if (jj_3R_199()) { jj_scanpos = xsp; - if (jj_3R_194()) { + if (jj_3R_200()) { jj_scanpos = xsp; - if (jj_3R_195()) { + if (jj_3R_201()) { jj_scanpos = xsp; - if (jj_3R_196()) { + if (jj_3R_202()) { jj_scanpos = xsp; - if (jj_3R_197()) { + if (jj_3R_203()) { jj_scanpos = xsp; - if (jj_3R_198()) { + if (jj_3R_204()) { jj_scanpos = xsp; - if (jj_3R_199()) return true; + if (jj_3R_205()) return true; } } } @@ -6315,177 +6633,228 @@ private boolean jj_3R_190() return false; } - private boolean jj_3R_193() + private boolean jj_3R_199() { - if (jj_3R_200()) return true; + if (jj_3R_206()) return true; return false; } - private boolean jj_3R_124() + private boolean jj_3R_200() { - if (jj_scan_token(THROW)) return true; - if (jj_3R_59()) return true; - if (jj_3R_48()) return true; + if (jj_scan_token(LPAREN)) return true; + if (jj_3R_60()) return true; + if (jj_scan_token(RPAREN)) return true; return false; } - private boolean jj_3R_194() + private boolean jj_3R_201() { - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(RPAREN)) return true; + if (jj_3R_207()) return true; return false; } - private boolean jj_3R_195() + private boolean jj_3R_127() + { + if (jj_scan_token(THROW)) return true; + if (jj_3R_60()) return true; + if (jj_3R_49()) return true; + return false; + } + + private boolean jj_3R_202() { - if (jj_3R_201()) return true; + if (jj_3R_58()) return true; return false; } - private boolean jj_3R_196() + private boolean jj_3R_203() { - if (jj_3R_57()) return true; + if (jj_3R_208()) return true; return false; } - private boolean jj_3R_197() + private boolean jj_3R_204() { - if (jj_3R_202()) return true; + if (jj_3R_53()) return true; return false; } - private boolean jj_3R_198() + private boolean jj_3R_205() { - if (jj_3R_52()) return true; + if (jj_3R_47()) return true; return false; } - private boolean jj_3R_125() + private boolean jj_3R_128() { if (jj_scan_token(TRY)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_161()) jj_scanpos = xsp; - if (jj_3R_58()) return true; + if (jj_3R_167()) jj_scanpos = xsp; + if (jj_3R_59()) return true; while (true) { xsp = jj_scanpos; - if (jj_3R_260()) { jj_scanpos = xsp; break; } + if (jj_3R_267()) { jj_scanpos = xsp; break; } } xsp = jj_scanpos; - if (jj_3R_261()) jj_scanpos = xsp; + if (jj_3R_268()) jj_scanpos = xsp; return false; } - private boolean jj_3R_199() + private boolean jj_3_18() { - if (jj_3R_46()) return true; + if (jj_3R_47()) return true; + if (jj_scan_token(LPAREN)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_57()) { + jj_scanpos = xsp; + if (jj_scan_token(77)) return true; + } return false; } - private boolean jj_3R_260() + private boolean jj_3R_62() + { + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_88()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_267() { if (jj_scan_token(CATCH)) return true; if (jj_scan_token(LPAREN)) return true; - if (jj_3R_267()) return true; + if (jj_3R_274()) return true; if (jj_scan_token(RPAREN)) return true; - if (jj_3R_58()) return true; + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_261() + private boolean jj_3R_268() { if (jj_scan_token(FINALLY)) return true; - if (jj_3R_58()) return true; + if (jj_3R_59()) return true; return false; } - private boolean jj_3_16() + private boolean jj_3_19() + { + if (jj_3R_53()) return true; + if (jj_scan_token(DOT)) return true; + if (jj_scan_token(CLASS)) return true; + return false; + } + + private boolean jj_3R_88() { - if (jj_3R_46()) return true; - if (jj_scan_token(LPAREN)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_56()) { + if (jj_scan_token(44)) { jj_scanpos = xsp; - if (jj_scan_token(77)) return true; + if (jj_scan_token(45)) { + jj_scanpos = xsp; + if (jj_scan_token(46)) { + jj_scanpos = xsp; + if (jj_scan_token(52)) { + jj_scanpos = xsp; + if (jj_scan_token(28)) { + jj_scanpos = xsp; + if (jj_scan_token(40)) { + jj_scanpos = xsp; + if (jj_scan_token(53)) { + jj_scanpos = xsp; + if (jj_scan_token(59)) { + jj_scanpos = xsp; + if (jj_scan_token(11)) { + jj_scanpos = xsp; + if (jj_scan_token(49)) { + jj_scanpos = xsp; + if (jj_scan_token(50)) { + jj_scanpos = xsp; + if (jj_scan_token(21)) return true; + } + } + } + } + } + } + } + } + } + } } return false; } - private boolean jj_3_17() + private boolean jj_3R_242() { - if (jj_3R_52()) return true; - if (jj_scan_token(DOT)) return true; - if (jj_scan_token(CLASS)) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_161() + private boolean jj_3R_167() { - if (jj_3R_164()) return true; + if (jj_3R_170()) return true; return false; } - private boolean jj_3_40() + private boolean jj_3_43() { Token xsp; xsp = jj_scanpos; - if (jj_3R_64()) jj_scanpos = xsp; - if (jj_3R_52()) return true; + if (jj_3R_65()) jj_scanpos = xsp; + if (jj_3R_53()) return true; while (true) { xsp = jj_scanpos; - if (jj_3R_65()) { jj_scanpos = xsp; break; } + if (jj_3R_66()) { jj_scanpos = xsp; break; } } if (jj_scan_token(IDENTIFIER)) return true; return false; } - private boolean jj_3R_267() + private boolean jj_3R_274() { Token xsp; xsp = jj_scanpos; - if (jj_3_40()) { + if (jj_3_43()) { jj_scanpos = xsp; - if (jj_3R_277()) return true; + if (jj_3R_284()) return true; } return false; } - private boolean jj_3R_235() - { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_59()) return true; - return false; - } - - private boolean jj_3_18() + private boolean jj_3_20() { if (jj_scan_token(DOT)) return true; if (jj_scan_token(CLASS)) return true; return false; } - private boolean jj_3R_55() + private boolean jj_3R_56() { Token xsp; xsp = jj_scanpos; - if (jj_3_18()) { + if (jj_3_20()) { jj_scanpos = xsp; - if (jj_3R_80()) { + if (jj_3R_82()) { jj_scanpos = xsp; jj_lookingAhead = true; jj_semLA = getToken(1).kind == COLON_COLON && (getToken(2).kind == IDENTIFIER || getToken(2).kind == NEW ) && getToken(3).kind != RBRACKET; jj_lookingAhead = false; - if (!jj_semLA || jj_3R_81()) { + if (!jj_semLA || jj_3R_83()) { jj_scanpos = xsp; - if (jj_3_19()) { + if (jj_3_21()) { jj_scanpos = xsp; - if (jj_3_20()) { + if (jj_3_22()) { jj_scanpos = xsp; - if (jj_3R_82()) { + if (jj_3R_84()) { jj_scanpos = xsp; - if (jj_3_21()) return true; + if (jj_3_23()) return true; } } } @@ -6495,310 +6864,325 @@ private boolean jj_3R_55() return false; } - private boolean jj_3R_277() + private boolean jj_3R_284() { if (jj_scan_token(IDENTIFIER)) return true; return false; } - private boolean jj_3_1() + private boolean jj_3R_82() + { + if (jj_scan_token(LBRACKET)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_219()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_220()) jj_scanpos = xsp; + if (jj_scan_token(RBRACKET)) return true; + return false; + } + + private boolean jj_3R_66() + { + if (jj_scan_token(BIT_OR)) return true; + if (jj_3R_53()) return true; + return false; + } + + private boolean jj_3R_170() + { + if (jj_scan_token(LPAREN)) return true; + if (jj_3R_282()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_283()) { jj_scanpos = xsp; break; } + } + if (jj_scan_token(RPAREN)) return true; + return false; + } + + private boolean jj_3R_219() { - if (jj_3R_41()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_80() + private boolean jj_3R_220() { - if (jj_scan_token(LBRACKET)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_213()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_214()) jj_scanpos = xsp; - if (jj_scan_token(RBRACKET)) return true; + if (jj_3R_230()) { + jj_scanpos = xsp; + if (jj_3R_231()) return true; + } return false; } - private boolean jj_3R_65() + private boolean jj_3R_230() { - if (jj_scan_token(BIT_OR)) return true; - if (jj_3R_52()) return true; + if (jj_scan_token(COLON_COLON)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_239()) jj_scanpos = xsp; return false; } - private boolean jj_3R_164() + private boolean jj_3R_231() { - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_275()) return true; + if (jj_scan_token(COLON)) return true; Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_276()) { jj_scanpos = xsp; break; } - } - if (jj_scan_token(RPAREN)) return true; + xsp = jj_scanpos; + if (jj_3R_240()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_241()) jj_scanpos = xsp; return false; } - private boolean jj_3R_213() + private boolean jj_3R_57() { - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_64() + private boolean jj_3R_65() { if (jj_scan_token(FINAL)) return true; return false; } - private boolean jj_3_41() + private boolean jj_3_44() { - if (jj_3R_52()) return true; - if (jj_3R_66()) return true; + if (jj_3R_53()) return true; + if (jj_3R_67()) return true; return false; } - private boolean jj_3R_214() + private boolean jj_3R_282() { Token xsp; xsp = jj_scanpos; - if (jj_3R_223()) { + if (jj_3_44()) { jj_scanpos = xsp; - if (jj_3R_224()) return true; + if (jj_3R_286()) return true; } return false; } - private boolean jj_3R_223() + private boolean jj_3R_83() { if (jj_scan_token(COLON_COLON)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_232()) jj_scanpos = xsp; + if (jj_scan_token(73)) { + jj_scanpos = xsp; + if (jj_scan_token(41)) return true; + } return false; } - private boolean jj_3R_275() + private boolean jj_3R_239() + { + if (jj_3R_60()) return true; + return false; + } + + private boolean jj_3R_241() { + if (jj_scan_token(COLON)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3_41()) { + if (jj_3R_244()) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_103() + { + if (jj_3R_62()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_129()) { jj_scanpos = xsp; - if (jj_3R_279()) return true; + if (jj_3R_130()) return true; } return false; } - private boolean jj_3R_224() + private boolean jj_3_21() { - if (jj_scan_token(COLON)) return true; + if (jj_scan_token(153)) return true; + if (jj_scan_token(IDENTIFIER)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_233()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_234()) jj_scanpos = xsp; + if (jj_3R_221()) jj_scanpos = xsp; return false; } - private boolean jj_3R_56() + private boolean jj_3R_286() { - if (jj_3R_59()) return true; + if (jj_3R_67()) return true; return false; } - private boolean jj_3R_81() + private boolean jj_3R_129() { - if (jj_scan_token(COLON_COLON)) return true; Token xsp; xsp = jj_scanpos; - if (jj_scan_token(73)) { + if (jj_3R_152()) { jj_scanpos = xsp; - if (jj_scan_token(41)) return true; + if (jj_3R_153()) return true; } - return false; - } - - private boolean jj_3R_232() - { if (jj_3R_59()) return true; return false; } - private boolean jj_3R_234() + private boolean jj_3R_152() { - if (jj_scan_token(COLON)) return true; + if (jj_scan_token(CLASS)) return true; + if (jj_scan_token(IDENTIFIER)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_237()) jj_scanpos = xsp; + if (jj_3R_254()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_255()) jj_scanpos = xsp; return false; } - private boolean jj_3R_61() + private boolean jj_3_22() { + if (jj_scan_token(DOT)) return true; + if (jj_scan_token(IDENTIFIER)) return true; Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_86()) { jj_scanpos = xsp; break; } - } + xsp = jj_scanpos; + if (jj_3R_222()) jj_scanpos = xsp; return false; } - private boolean jj_3R_279() + private boolean jj_3R_283() { - if (jj_3R_66()) return true; + if (jj_scan_token(SEMICOLON)) return true; + if (jj_3R_282()) return true; return false; } - private boolean jj_3_19() + private boolean jj_3R_254() { - if (jj_scan_token(153)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_215()) jj_scanpos = xsp; + if (jj_scan_token(EXTENDS)) return true; + if (jj_3R_47()) return true; return false; } - private boolean jj_3R_86() + private boolean jj_3R_255() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(44)) { - jj_scanpos = xsp; - if (jj_scan_token(45)) { - jj_scanpos = xsp; - if (jj_scan_token(46)) { - jj_scanpos = xsp; - if (jj_scan_token(52)) { - jj_scanpos = xsp; - if (jj_scan_token(28)) { - jj_scanpos = xsp; - if (jj_scan_token(40)) { - jj_scanpos = xsp; - if (jj_scan_token(53)) { - jj_scanpos = xsp; - if (jj_scan_token(59)) { - jj_scanpos = xsp; - if (jj_scan_token(11)) { - jj_scanpos = xsp; - if (jj_scan_token(49)) { - jj_scanpos = xsp; - if (jj_scan_token(50)) { - jj_scanpos = xsp; - if (jj_scan_token(21)) return true; - } - } - } - } - } - } - } - } - } - } - } + if (jj_scan_token(IMPLEMENTS)) return true; + if (jj_3R_89()) return true; return false; } - private boolean jj_3R_276() + private boolean jj_3R_153() { - if (jj_scan_token(SEMICOLON)) return true; - if (jj_3R_275()) return true; + if (jj_scan_token(INTERFACE)) return true; + if (jj_scan_token(IDENTIFIER)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_256()) jj_scanpos = xsp; return false; } - private boolean jj_3_20() + private boolean jj_3R_130() { - if (jj_scan_token(DOT)) return true; + if (jj_scan_token(ENUM)) return true; if (jj_scan_token(IDENTIFIER)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_216()) jj_scanpos = xsp; + if (jj_3R_249()) jj_scanpos = xsp; + if (jj_3R_250()) return true; return false; } - private boolean jj_3R_82() + private boolean jj_3R_84() { if (jj_scan_token(LBRACE)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; if (jj_scan_token(RBRACE)) return true; return false; } - private boolean jj_3_21() + private boolean jj_3R_256() { - if (jj_scan_token(DOT)) return true; - if (jj_3R_57()) return true; + if (jj_scan_token(EXTENDS)) return true; + if (jj_3R_89()) return true; return false; } - private boolean jj_3R_233() + private boolean jj_3R_249() { - if (jj_3R_59()) return true; + if (jj_scan_token(IMPLEMENTS)) return true; + if (jj_3R_89()) return true; return false; } - private boolean jj_3R_215() + private boolean jj_3_23() { - if (jj_3R_212()) return true; + if (jj_scan_token(DOT)) return true; + if (jj_3R_58()) return true; return false; } - private boolean jj_3R_237() + private boolean jj_3R_240() { - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_101() + private boolean jj_3R_221() { - if (jj_3R_61()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_126()) { - jj_scanpos = xsp; - if (jj_3R_127()) return true; - } + if (jj_3R_218()) return true; return false; } - private boolean jj_3R_126() + private boolean jj_3R_244() + { + if (jj_3R_60()) return true; + return false; + } + + private boolean jj_3R_269() { + if (jj_scan_token(IDENTIFIER)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_147()) { - jj_scanpos = xsp; - if (jj_3R_148()) return true; - } - if (jj_3R_58()) return true; + if (jj_3R_275()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_276()) jj_scanpos = xsp; return false; } - private boolean jj_3R_216() + private boolean jj_3R_222() { - if (jj_3R_212()) return true; + if (jj_3R_218()) return true; return false; } - private boolean jj_3R_200() + private boolean jj_3R_206() { Token xsp; xsp = jj_scanpos; - if (jj_3R_203()) { + if (jj_3R_209()) { jj_scanpos = xsp; - if (jj_3R_204()) { + if (jj_3R_210()) { jj_scanpos = xsp; - if (jj_3R_205()) { + if (jj_3R_211()) { jj_scanpos = xsp; - if (jj_3R_206()) { + if (jj_3R_212()) { jj_scanpos = xsp; - if (jj_3R_207()) { + if (jj_3R_213()) { jj_scanpos = xsp; - if (jj_3R_208()) { + if (jj_3R_214()) { jj_scanpos = xsp; - if (jj_3R_209()) { + if (jj_3R_215()) { jj_scanpos = xsp; - if (jj_3R_210()) return true; + if (jj_3R_216()) return true; } } } @@ -6809,284 +7193,315 @@ private boolean jj_3R_200() return false; } - private boolean jj_3R_203() + private boolean jj_3R_209() + { + if (jj_scan_token(INTEGER_LITERAL)) return true; + return false; + } + + private boolean jj_3R_250() + { + if (jj_scan_token(LBRACE)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_257()) jj_scanpos = xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_258()) { jj_scanpos = xsp; break; } + } + xsp = jj_scanpos; + if (jj_3R_259()) jj_scanpos = xsp; + if (jj_scan_token(RBRACE)) return true; + return false; + } + + private boolean jj_3R_275() + { + if (jj_3R_218()) return true; + return false; + } + + private boolean jj_3R_257() + { + if (jj_3R_269()) return true; + return false; + } + + private boolean jj_3R_104() + { + if (jj_3R_62()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_131()) { + jj_scanpos = xsp; + if (jj_3R_132()) return true; + } + if (jj_3R_45()) return true; + xsp = jj_scanpos; + if (jj_3R_245()) jj_scanpos = xsp; + xsp = jj_scanpos; + if (jj_3R_246()) { + jj_scanpos = xsp; + if (jj_3R_247()) return true; + } + return false; + } + + private boolean jj_3R_210() + { + if (jj_scan_token(FLOATING_POINT_LITERAL)) return true; + return false; + } + + private boolean jj_3R_131() { - if (jj_scan_token(INTEGER_LITERAL)) return true; + if (jj_3R_43()) return true; + if (jj_3R_44()) return true; return false; } - private boolean jj_3R_147() + private boolean jj_3R_132() { - if (jj_scan_token(CLASS)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_247()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_248()) jj_scanpos = xsp; + if (jj_3R_44()) return true; return false; } - private boolean jj_3R_247() + private boolean jj_3R_245() { - if (jj_scan_token(EXTENDS)) return true; - if (jj_3R_46()) return true; + if (jj_scan_token(THROWS)) return true; + if (jj_3R_89()) return true; return false; } - private boolean jj_3R_248() + private boolean jj_3R_276() { - if (jj_scan_token(IMPLEMENTS)) return true; - if (jj_3R_87()) return true; + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_148() + private boolean jj_3R_246() { - if (jj_scan_token(INTERFACE)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_249()) jj_scanpos = xsp; + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_127() + private boolean jj_3_3() { - if (jj_scan_token(ENUM)) return true; - if (jj_scan_token(IDENTIFIER)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_242()) jj_scanpos = xsp; - if (jj_3R_243()) return true; + if (jj_3R_43()) return true; + if (jj_3R_44()) return true; + if (jj_3R_45()) return true; return false; } - private boolean jj_3R_249() + private boolean jj_3R_107() { - if (jj_scan_token(EXTENDS)) return true; - if (jj_3R_87()) return true; + if (jj_scan_token(PACKAGE)) return true; + if (jj_3R_47()) return true; return false; } - private boolean jj_3R_242() + private boolean jj_3R_211() { - if (jj_scan_token(IMPLEMENTS)) return true; - if (jj_3R_87()) return true; + if (jj_scan_token(CHARACTER_LITERAL)) return true; return false; } - private boolean jj_3R_204() + private boolean jj_3R_258() { - if (jj_scan_token(FLOATING_POINT_LITERAL)) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_269()) return true; return false; } - private boolean jj_3R_262() + private boolean jj_3_4() { - if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(IMPORT)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_268()) jj_scanpos = xsp; + if (jj_3R_46()) jj_scanpos = xsp; + if (jj_3R_47()) return true; xsp = jj_scanpos; - if (jj_3R_269()) jj_scanpos = xsp; + if (jj_3R_48()) jj_scanpos = xsp; + if (jj_3R_49()) return true; return false; } - private boolean jj_3R_205() + private boolean jj_3R_106() { - if (jj_scan_token(CHARACTER_LITERAL)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3_4()) { + jj_scanpos = xsp; + if (jj_3R_133()) return true; + } return false; } - private boolean jj_3R_243() + private boolean jj_3R_247() { - if (jj_scan_token(LBRACE)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_250()) jj_scanpos = xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_251()) { jj_scanpos = xsp; break; } - } - xsp = jj_scanpos; - if (jj_3R_252()) jj_scanpos = xsp; - if (jj_scan_token(RBRACE)) return true; + if (jj_3R_251()) return true; return false; } - private boolean jj_3R_268() + private boolean jj_3R_133() { - if (jj_3R_212()) return true; + if (jj_scan_token(IMPORT)) return true; + if (jj_scan_token(STAR)) return true; + if (jj_3R_49()) return true; return false; } - private boolean jj_3R_206() + private boolean jj_3R_212() { if (jj_scan_token(STRING_LITERAL)) return true; return false; } - private boolean jj_3R_250() + private boolean jj_3R_46() { - if (jj_3R_262()) return true; + if (jj_scan_token(STATIC)) return true; return false; } - private boolean jj_3R_102() + private boolean jj_3R_213() { - if (jj_3R_61()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_128()) { - jj_scanpos = xsp; - if (jj_3R_129()) return true; - } - if (jj_3R_44()) return true; - xsp = jj_scanpos; - if (jj_3R_238()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_3R_239()) { - jj_scanpos = xsp; - if (jj_3R_240()) return true; - } + if (jj_scan_token(LONG_STRING_LITERAL)) return true; return false; } - private boolean jj_3R_128() + private boolean jj_3R_67() { - if (jj_3R_42()) return true; - if (jj_3R_43()) return true; + if (jj_scan_token(IDENTIFIER)) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_252()) { jj_scanpos = xsp; break; } + } + xsp = jj_scanpos; + if (jj_3R_253()) jj_scanpos = xsp; return false; } - private boolean jj_3R_207() + private boolean jj_3R_252() { - if (jj_scan_token(LONG_STRING_LITERAL)) return true; + if (jj_scan_token(LBRACKET)) return true; + if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3R_129() + private boolean jj_3R_253() { - if (jj_3R_43()) return true; + if (jj_scan_token(ASSIGN)) return true; + if (jj_3R_51()) return true; return false; } - private boolean jj_3R_238() + private boolean jj_3R_48() { - if (jj_scan_token(THROWS)) return true; - if (jj_3R_87()) return true; + if (jj_scan_token(DOT)) return true; + if (jj_scan_token(STAR)) return true; return false; } - private boolean jj_3R_269() + private boolean jj_3R_214() { - if (jj_3R_58()) return true; + if (jj_3R_223()) return true; return false; } - private boolean jj_3R_208() + private boolean jj_3R_259() { - if (jj_3R_217()) return true; + if (jj_scan_token(SEMICOLON)) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3_2()) { jj_scanpos = xsp; break; } + } return false; } - private boolean jj_3R_239() + private boolean jj_3_5() { - if (jj_3R_58()) return true; + if (jj_3R_50()) return true; return false; } - private boolean jj_3_3() + private boolean jj_3R_51() { - if (jj_3R_42()) return true; - if (jj_3R_43()) return true; - if (jj_3R_44()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3_5()) { + jj_scanpos = xsp; + if (jj_3R_78()) return true; + } return false; } - private boolean jj_3R_209() + private boolean jj_3R_215() { if (jj_scan_token(42)) return true; return false; } - private boolean jj_3R_105() + private boolean jj_3R_78() { - if (jj_scan_token(PACKAGE)) return true; - if (jj_3R_46()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_251() + private boolean jj_3_2() { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_262()) return true; + if (jj_3R_42()) return true; return false; } - private boolean jj_3R_210() + private boolean jj_3R_216() { if (jj_scan_token(58)) return true; return false; } - private boolean jj_3_4() + private boolean jj_3R_50() { - if (jj_scan_token(IMPORT)) return true; + if (jj_scan_token(LBRACE)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_45()) jj_scanpos = xsp; - if (jj_3R_46()) return true; + if (jj_3R_77()) jj_scanpos = xsp; xsp = jj_scanpos; - if (jj_3R_47()) jj_scanpos = xsp; - if (jj_3R_48()) return true; + if (jj_scan_token(83)) jj_scanpos = xsp; + if (jj_scan_token(RBRACE)) return true; return false; } - private boolean jj_3R_104() + private boolean jj_3R_223() { Token xsp; xsp = jj_scanpos; - if (jj_3_4()) { + if (jj_3R_232()) { jj_scanpos = xsp; - if (jj_3R_130()) return true; + if (jj_3R_233()) return true; } return false; } - private boolean jj_3R_240() - { - if (jj_3R_244()) return true; - return false; - } - - private boolean jj_3R_130() + private boolean jj_3R_232() { - if (jj_scan_token(IMPORT)) return true; - if (jj_scan_token(STAR)) return true; - if (jj_3R_48()) return true; + if (jj_scan_token(TRUE)) return true; return false; } - private boolean jj_3R_217() + private boolean jj_3R_77() { + if (jj_3R_51()) return true; Token xsp; - xsp = jj_scanpos; - if (jj_3R_225()) { - jj_scanpos = xsp; - if (jj_3R_226()) return true; + while (true) { + xsp = jj_scanpos; + if (jj_3_6()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_225() - { - if (jj_scan_token(TRUE)) return true; - return false; - } - - private boolean jj_3R_226() + private boolean jj_3R_233() { if (jj_scan_token(FALSE)) return true; return false; @@ -7094,448 +7509,467 @@ private boolean jj_3R_226() private boolean jj_3R_45() { - if (jj_scan_token(STATIC)) return true; - return false; - } - - private boolean jj_3R_66() - { - if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(LPAREN)) return true; Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_245()) { jj_scanpos = xsp; break; } - } xsp = jj_scanpos; - if (jj_3R_246()) jj_scanpos = xsp; + if (jj_3R_76()) jj_scanpos = xsp; + if (jj_scan_token(RPAREN)) return true; return false; } - private boolean jj_3R_245() + private boolean jj_3_6() { - if (jj_scan_token(LBRACKET)) return true; - if (jj_scan_token(RBRACKET)) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_51()) return true; return false; } - private boolean jj_3R_246() + private boolean jj_3R_76() { - if (jj_scan_token(ASSIGN)) return true; - if (jj_3R_50()) return true; + if (jj_3R_108()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_109()) { jj_scanpos = xsp; break; } + } return false; } - private boolean jj_3R_47() + private boolean jj_3R_108() { - if (jj_scan_token(DOT)) return true; - if (jj_scan_token(STAR)) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3_7()) { + jj_scanpos = xsp; + if (jj_3R_134()) return true; + } + while (true) { + xsp = jj_scanpos; + if (jj_3R_135()) { jj_scanpos = xsp; break; } + } return false; } - private boolean jj_3R_252() + private boolean jj_3_7() { - if (jj_scan_token(SEMICOLON)) return true; Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3_2()) { jj_scanpos = xsp; break; } - } + xsp = jj_scanpos; + if (jj_3R_52()) jj_scanpos = xsp; + if (jj_3R_53()) return true; + xsp = jj_scanpos; + if (jj_3R_54()) jj_scanpos = xsp; + if (jj_scan_token(IDENTIFIER)) return true; return false; } - private boolean jj_3_5() + private boolean jj_3R_134() { - if (jj_3R_49()) return true; + if (jj_scan_token(IDENTIFIER)) return true; return false; } - private boolean jj_3R_50() + private boolean jj_3R_135() { - Token xsp; - xsp = jj_scanpos; - if (jj_3_5()) { - jj_scanpos = xsp; - if (jj_3R_77()) return true; - } + if (jj_scan_token(LBRACKET)) return true; + if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3R_77() + private boolean jj_3R_54() { - if (jj_3R_59()) return true; + if (jj_scan_token(ELLIPSIS)) return true; return false; } - private boolean jj_3R_212() + private boolean jj_3R_218() { if (jj_scan_token(LPAREN)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_222()) jj_scanpos = xsp; + if (jj_3R_229()) jj_scanpos = xsp; if (jj_scan_token(RPAREN)) return true; return false; } - private boolean jj_3_2() - { - if (jj_3R_41()) return true; - return false; - } - - private boolean jj_3R_49() + private boolean jj_3R_52() { - if (jj_scan_token(LBRACE)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_76()) jj_scanpos = xsp; - xsp = jj_scanpos; - if (jj_scan_token(83)) jj_scanpos = xsp; - if (jj_scan_token(RBRACE)) return true; + if (jj_scan_token(FINAL)) return true; return false; } - private boolean jj_3R_222() + private boolean jj_3R_229() { - if (jj_3R_231()) return true; + if (jj_3R_238()) return true; return false; } - private boolean jj_3R_231() + private boolean jj_3R_53() { - if (jj_3R_59()) return true; Token xsp; + xsp = jj_scanpos; + if (jj_3R_79()) { + jj_scanpos = xsp; + if (jj_3R_80()) { + jj_scanpos = xsp; + if (jj_3R_81()) return true; + } + } while (true) { xsp = jj_scanpos; - if (jj_3R_236()) { jj_scanpos = xsp; break; } + if (jj_3_9()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_236() - { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_59()) return true; - return false; - } - - private boolean jj_3R_76() + private boolean jj_3R_238() { - if (jj_3R_50()) return true; + if (jj_3R_60()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3_6()) { jj_scanpos = xsp; break; } + if (jj_3R_243()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_44() + private boolean jj_3R_109() { - if (jj_scan_token(LPAREN)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_75()) jj_scanpos = xsp; - if (jj_scan_token(RPAREN)) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_108()) return true; return false; } - private boolean jj_3_6() + private boolean jj_3R_243() { if (jj_scan_token(COMMA)) return true; - if (jj_3R_50()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_57() + private boolean jj_3R_58() { Token xsp; xsp = jj_scanpos; - if (jj_3R_83()) { + if (jj_3R_85()) { jj_scanpos = xsp; - if (jj_3R_84()) return true; + if (jj_3R_86()) return true; } return false; } - private boolean jj_3R_83() + private boolean jj_3R_85() { if (jj_scan_token(NEW)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_219()) { + if (jj_3R_225()) { + jj_scanpos = xsp; + if (jj_3R_226()) { jj_scanpos = xsp; - if (jj_3R_220()) { + if (jj_3R_227()) { jj_scanpos = xsp; - if (jj_3R_221()) return true; + if (jj_3R_228()) return true; + } } } return false; } - private boolean jj_3R_75() + private boolean jj_3R_79() { - if (jj_3R_106()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_107()) { jj_scanpos = xsp; break; } - } + if (jj_3R_110()) return true; return false; } - private boolean jj_3R_106() + private boolean jj_3R_225() + { + if (jj_3R_110()) return true; + if (jj_3R_113()) return true; + return false; + } + + private boolean jj_3R_80() + { + if (jj_3R_111()) return true; + return false; + } + + private boolean jj_3R_226() + { + if (jj_3R_111()) return true; + if (jj_3R_113()) return true; + return false; + } + + private boolean jj_3R_81() + { + if (jj_3R_47()) return true; + return false; + } + + private boolean jj_3R_227() { + if (jj_3R_47()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3_7()) { + if (jj_3R_236()) { jj_scanpos = xsp; - if (jj_3R_131()) return true; - } - while (true) { - xsp = jj_scanpos; - if (jj_3R_132()) { jj_scanpos = xsp; break; } + if (jj_3R_237()) return true; } return false; } - private boolean jj_3R_219() + private boolean jj_3_9() { - if (jj_3R_108()) return true; - if (jj_3R_110()) return true; + if (jj_scan_token(LBRACKET)) return true; + if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3_7() + private boolean jj_3R_236() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_51()) jj_scanpos = xsp; - if (jj_3R_52()) return true; - xsp = jj_scanpos; - if (jj_3R_53()) jj_scanpos = xsp; - if (jj_scan_token(IDENTIFIER)) return true; + if (jj_3R_113()) return true; return false; } - private boolean jj_3R_220() + private boolean jj_3R_237() { - if (jj_3R_46()) return true; + if (jj_3R_218()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_229()) { - jj_scanpos = xsp; - if (jj_3R_230()) return true; - } + if (jj_3_24()) jj_scanpos = xsp; return false; } - private boolean jj_3R_131() + private boolean jj_3R_86() { - if (jj_scan_token(IDENTIFIER)) return true; + if (jj_3R_113()) return true; return false; } - private boolean jj_3R_229() + private boolean jj_3R_228() { - if (jj_3R_110()) return true; + if (jj_3R_113()) return true; return false; } - private boolean jj_3R_230() + private boolean jj_3R_43() { - if (jj_3R_212()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3_22()) jj_scanpos = xsp; + if (jj_3R_74()) { + jj_scanpos = xsp; + if (jj_3R_75()) return true; + } return false; } - private boolean jj_3R_84() + private boolean jj_3R_74() { - if (jj_3R_110()) return true; + if (jj_scan_token(VOID)) return true; return false; } - private boolean jj_3R_221() + private boolean jj_3_8() { - if (jj_3R_110()) return true; + if (jj_scan_token(LPAREN)) return true; return false; } - private boolean jj_3R_132() + private boolean jj_3R_75() { - if (jj_scan_token(LBRACKET)) return true; - if (jj_scan_token(RBRACKET)) return true; + if (jj_3R_53()) return true; return false; } - private boolean jj_3R_53() + private boolean jj_3_25() { - if (jj_scan_token(ELLIPSIS)) return true; + if (jj_scan_token(LPAREN)) return true; return false; } - private boolean jj_3R_110() + private boolean jj_3R_113() { Token xsp; xsp = jj_scanpos; - if (jj_3_25()) { + if (jj_3_28()) { jj_scanpos = xsp; - if (jj_3R_143()) { + if (jj_3R_148()) { jj_scanpos = xsp; - if (jj_3R_144()) return true; + if (jj_3R_149()) return true; } } return false; } - private boolean jj_3_25() + private boolean jj_3_28() { Token xsp; - if (jj_3_23()) return true; + if (jj_3_26()) return true; while (true) { xsp = jj_scanpos; - if (jj_3_23()) { jj_scanpos = xsp; break; } + if (jj_3_26()) { jj_scanpos = xsp; break; } } while (true) { xsp = jj_scanpos; - if (jj_3_24()) { jj_scanpos = xsp; break; } + if (jj_3_27()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_51() - { - if (jj_scan_token(FINAL)) return true; - return false; - } - - private boolean jj_3_23() + private boolean jj_3_26() { if (jj_scan_token(LBRACKET)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3R_52() + private boolean jj_3R_110() { Token xsp; xsp = jj_scanpos; - if (jj_3R_78()) { + if (jj_3R_136()) { + jj_scanpos = xsp; + if (jj_3R_137()) { + jj_scanpos = xsp; + if (jj_3R_138()) { + jj_scanpos = xsp; + if (jj_3R_139()) { jj_scanpos = xsp; - if (jj_3R_79()) return true; + if (jj_3R_140()) { + jj_scanpos = xsp; + if (jj_3R_141()) { + jj_scanpos = xsp; + if (jj_3R_142()) { + jj_scanpos = xsp; + if (jj_3R_143()) return true; + } + } + } + } + } } - while (true) { - xsp = jj_scanpos; - if (jj_3_8()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3_24() + private boolean jj_3R_136() + { + if (jj_scan_token(BOOLEAN)) return true; + return false; + } + + private boolean jj_3_27() { if (jj_scan_token(LBRACKET)) return true; if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3R_107() + private boolean jj_3R_137() { - if (jj_scan_token(COMMA)) return true; - if (jj_3R_106()) return true; + if (jj_scan_token(CHAR)) return true; return false; } - private boolean jj_3R_143() + private boolean jj_3R_138() + { + if (jj_scan_token(BYTE)) return true; + return false; + } + + private boolean jj_3R_148() { Token xsp; - if (jj_3R_150()) return true; + if (jj_3R_156()) return true; while (true) { xsp = jj_scanpos; - if (jj_3R_150()) { jj_scanpos = xsp; break; } + if (jj_3R_156()) { jj_scanpos = xsp; break; } } - if (jj_3R_49()) return true; + if (jj_3R_50()) return true; return false; } - private boolean jj_3_22() + private boolean jj_3R_139() { - if (jj_3R_58()) return true; + if (jj_scan_token(SHORT)) return true; return false; } - private boolean jj_3R_150() + private boolean jj_3_24() + { + if (jj_3R_59()) return true; + return false; + } + + private boolean jj_3R_140() + { + if (jj_scan_token(INT)) return true; + return false; + } + + private boolean jj_3R_156() { if (jj_scan_token(LBRACKET)) return true; if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3R_144() + private boolean jj_3R_141() { - if (jj_3R_49()) return true; + if (jj_scan_token(LONG)) return true; return false; } - private boolean jj_3R_78() + private boolean jj_3R_149() { - if (jj_3R_108()) return true; + if (jj_3R_50()) return true; return false; } - private boolean jj_3_8() + private boolean jj_3R_142() { - if (jj_scan_token(LBRACKET)) return true; - if (jj_scan_token(RBRACKET)) return true; + if (jj_scan_token(FLOAT)) return true; return false; } - private boolean jj_3_26() + private boolean jj_3R_143() { - if (jj_3R_60()) return true; + if (jj_scan_token(DOUBLE)) return true; return false; } - private boolean jj_3R_42() + private boolean jj_3_29() { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_73()) { - jj_scanpos = xsp; - if (jj_3R_74()) return true; - } + if (jj_3R_61()) return true; return false; } - private boolean jj_3R_63() + private boolean jj_3R_64() { Token xsp; xsp = jj_scanpos; - if (jj_3_26()) { + if (jj_3_29()) { jj_scanpos = xsp; - if (jj_3_27()) { + if (jj_3_30()) { jj_scanpos = xsp; if (jj_scan_token(82)) { jj_scanpos = xsp; - if (jj_3R_88()) { - jj_scanpos = xsp; - if (jj_3R_89()) { - jj_scanpos = xsp; if (jj_3R_90()) { jj_scanpos = xsp; if (jj_3R_91()) { jj_scanpos = xsp; if (jj_3R_92()) { jj_scanpos = xsp; - jj_lookingAhead = true; - jj_semLA = isRegularForStatement(); - jj_lookingAhead = false; - if (!jj_semLA || jj_3R_93()) { + if (jj_3R_93()) { jj_scanpos = xsp; if (jj_3R_94()) { jj_scanpos = xsp; - if (jj_3R_95()) { + jj_lookingAhead = true; + jj_semLA = isRegularForStatement(); + jj_lookingAhead = false; + if (!jj_semLA || jj_3R_95()) { jj_scanpos = xsp; if (jj_3R_96()) { jj_scanpos = xsp; @@ -7545,7 +7979,11 @@ private boolean jj_3R_63() jj_scanpos = xsp; if (jj_3R_99()) { jj_scanpos = xsp; - if (jj_3R_100()) return true; + if (jj_3R_100()) { + jj_scanpos = xsp; + if (jj_3R_101()) { + jj_scanpos = xsp; + if (jj_3R_102()) return true; } } } @@ -7564,192 +8002,133 @@ private boolean jj_3R_63() return false; } - private boolean jj_3R_73() - { - if (jj_scan_token(VOID)) return true; - return false; - } - - private boolean jj_3R_74() - { - if (jj_3R_52()) return true; - return false; - } - - private boolean jj_3_27() - { - if (jj_3R_58()) return true; - return false; - } - - private boolean jj_3R_108() + private boolean jj_3R_111() { + if (jj_scan_token(LPAREN)) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_133()) { - jj_scanpos = xsp; - if (jj_3R_134()) { - jj_scanpos = xsp; - if (jj_3R_135()) { - jj_scanpos = xsp; - if (jj_3R_136()) { - jj_scanpos = xsp; - if (jj_3R_137()) { - jj_scanpos = xsp; - if (jj_3R_138()) { - jj_scanpos = xsp; - if (jj_3R_139()) { - jj_scanpos = xsp; - if (jj_3R_140()) return true; - } - } - } - } - } - } - } - return false; - } - - private boolean jj_3R_133() - { - if (jj_scan_token(BOOLEAN)) return true; - return false; - } - - private boolean jj_3R_88() - { - if (jj_3R_113()) return true; - if (jj_3R_48()) return true; - return false; - } - - private boolean jj_3R_134() - { - if (jj_scan_token(CHAR)) return true; - return false; - } - - private boolean jj_3R_135() - { - if (jj_scan_token(BYTE)) return true; - return false; - } - - private boolean jj_3R_79() - { - if (jj_3R_46()) return true; + if (jj_3R_144()) jj_scanpos = xsp; + if (jj_scan_token(LPAREN)) return true; + xsp = jj_scanpos; + if (jj_3R_145()) jj_scanpos = xsp; + if (jj_scan_token(RPAREN)) return true; + if (jj_scan_token(ARROW)) return true; + if (jj_3R_43()) return true; + if (jj_scan_token(RPAREN)) return true; return false; } - private boolean jj_3R_89() + private boolean jj_3_30() { - if (jj_3R_114()) return true; + if (jj_3R_59()) return true; return false; } - private boolean jj_3R_136() + private boolean jj_3R_90() { - if (jj_scan_token(SHORT)) return true; + if (jj_3R_116()) return true; + if (jj_3R_49()) return true; return false; } - private boolean jj_3R_137() + private boolean jj_3R_144() { - if (jj_scan_token(INT)) return true; + if (jj_3R_47()) return true; + if (jj_scan_token(DOT)) return true; return false; } - private boolean jj_3R_90() + private boolean jj_3R_91() { - if (jj_3R_115()) return true; + if (jj_3R_117()) return true; return false; } - private boolean jj_3R_138() + private boolean jj_3R_92() { - if (jj_scan_token(LONG)) return true; + if (jj_3R_118()) return true; return false; } - private boolean jj_3R_139() + private boolean jj_3R_93() { - if (jj_scan_token(FLOAT)) return true; + if (jj_3R_119()) return true; return false; } - private boolean jj_3R_91() + private boolean jj_3R_145() { - if (jj_3R_116()) return true; + if (jj_3R_53()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_154()) { jj_scanpos = xsp; break; } + } return false; } - private boolean jj_3R_140() + private boolean jj_3R_94() { - if (jj_scan_token(DOUBLE)) return true; + if (jj_3R_120()) return true; return false; } - private boolean jj_3R_92() + private boolean jj_3_10() { - if (jj_3R_117()) return true; + if (jj_3R_47()) return true; + if (jj_scan_token(DOT)) return true; return false; } - private boolean jj_3R_93() + private boolean jj_3R_95() { - if (jj_3R_118()) return true; + if (jj_3R_121()) return true; return false; } - private boolean jj_3R_94() + private boolean jj_3R_96() { - if (jj_3R_119()) return true; + if (jj_3R_122()) return true; return false; } - private boolean jj_3R_95() + private boolean jj_3R_97() { - if (jj_3R_120()) return true; + if (jj_3R_123()) return true; return false; } - private boolean jj_3R_96() + private boolean jj_3R_154() { - if (jj_3R_121()) return true; + if (jj_scan_token(COMMA)) return true; + if (jj_3R_53()) return true; return false; } - private boolean jj_3R_46() + private boolean jj_3R_47() { if (jj_scan_token(IDENTIFIER)) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3_9()) { jj_scanpos = xsp; break; } + if (jj_3_11()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_97() - { - if (jj_3R_122()) return true; - return false; - } - private boolean jj_3R_98() { - if (jj_3R_123()) return true; + if (jj_3R_124()) return true; return false; } private boolean jj_3R_99() { - if (jj_3R_124()) return true; + if (jj_3R_125()) return true; return false; } - private boolean jj_3_9() + private boolean jj_3_11() { if (jj_scan_token(DOT)) return true; if (jj_scan_token(IDENTIFIER)) return true; @@ -7758,19 +8137,23 @@ private boolean jj_3_9() private boolean jj_3R_100() { - if (jj_3R_125()) return true; + if (jj_3R_126()) return true; return false; } - private boolean jj_3R_60() + private boolean jj_3R_101() { - if (jj_scan_token(IDENTIFIER)) return true; - if (jj_scan_token(COLON)) return true; - if (jj_3R_63()) return true; + if (jj_3R_127()) return true; return false; } - private boolean jj_3R_43() + private boolean jj_3R_102() + { + if (jj_3R_128()) return true; + return false; + } + + private boolean jj_3R_44() { Token xsp; xsp = jj_scanpos; @@ -7801,16 +8184,24 @@ private boolean jj_3R_43() } while (true) { xsp = jj_scanpos; - if (jj_3_10()) { jj_scanpos = xsp; break; } + if (jj_3_12()) { jj_scanpos = xsp; break; } } while (true) { xsp = jj_scanpos; - if (jj_3_11()) { jj_scanpos = xsp; break; } + if (jj_3_13()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_58() + private boolean jj_3R_61() + { + if (jj_scan_token(IDENTIFIER)) return true; + if (jj_scan_token(COLON)) return true; + if (jj_3R_64()) return true; + return false; + } + + private boolean jj_3R_59() { Token xsp; xsp = jj_scanpos; @@ -7818,55 +8209,66 @@ private boolean jj_3R_58() if (jj_scan_token(LBRACE)) return true; while (true) { xsp = jj_scanpos; - if (jj_3_28()) { jj_scanpos = xsp; break; } + if (jj_3_31()) { jj_scanpos = xsp; break; } } if (jj_scan_token(RBRACE)) return true; return false; } - private boolean jj_3_10() + private boolean jj_3_12() { if (jj_scan_token(LBRACKET)) return true; if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3_11() + private boolean jj_3_13() { if (jj_scan_token(DOT)) return true; if (jj_scan_token(IDENTIFIER)) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3_12()) { jj_scanpos = xsp; break; } + if (jj_3_14()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3_12() + private boolean jj_3_14() { if (jj_scan_token(LBRACKET)) return true; if (jj_scan_token(RBRACKET)) return true; return false; } - private boolean jj_3R_41() + private boolean jj_3R_89() + { + if (jj_3R_47()) return true; + Token xsp; + while (true) { + xsp = jj_scanpos; + if (jj_3R_115()) { jj_scanpos = xsp; break; } + } + return false; + } + + private boolean jj_3R_42() { Token xsp; xsp = jj_scanpos; - if (jj_3R_67()) { - jj_scanpos = xsp; if (jj_3R_68()) { jj_scanpos = xsp; if (jj_3R_69()) { jj_scanpos = xsp; if (jj_3R_70()) { jj_scanpos = xsp; - if (jj_3_33()) { - jj_scanpos = xsp; if (jj_3R_71()) { jj_scanpos = xsp; - if (jj_3R_72()) return true; + if (jj_3_36()) { + jj_scanpos = xsp; + if (jj_3R_72()) { + jj_scanpos = xsp; + if (jj_3R_73()) return true; } } } @@ -7876,38 +8278,36 @@ private boolean jj_3R_41() return false; } - private boolean jj_3R_67() + private boolean jj_3R_68() { - if (jj_3R_101()) return true; + if (jj_3R_103()) return true; return false; } - private boolean jj_3R_87() + private boolean jj_3R_69() { - if (jj_3R_46()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_112()) { jj_scanpos = xsp; break; } - } + if (jj_3R_104()) return true; return false; } - private boolean jj_3R_68() + private boolean jj_3R_70() { - if (jj_3R_102()) return true; + if (jj_3R_104()) return true; return false; } - private boolean jj_3R_69() + private boolean jj_3R_60() { - if (jj_3R_102()) return true; + if (jj_3R_87()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_112()) jj_scanpos = xsp; return false; } - private boolean jj_3_29() + private boolean jj_3_32() { - if (jj_3R_61()) return true; + if (jj_3R_62()) return true; Token xsp; xsp = jj_scanpos; if (jj_scan_token(14)) { @@ -7920,76 +8320,49 @@ private boolean jj_3_29() return false; } - private boolean jj_3R_59() - { - if (jj_3R_85()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_109()) jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_70() - { - if (jj_3R_103()) return true; - if (jj_3R_48()) return true; - return false; - } - - private boolean jj_3_28() + private boolean jj_3R_112() { - if (jj_3R_41()) return true; + if (jj_3R_147()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3_30() + private boolean jj_3R_71() { - if (jj_3R_61()) return true; - if (jj_3R_42()) return true; - if (jj_3R_43()) return true; - if (jj_scan_token(LPAREN)) return true; + if (jj_3R_105()) return true; + if (jj_3R_49()) return true; return false; } - private boolean jj_3R_109() + private boolean jj_3_31() { - if (jj_3R_142()) return true; - if (jj_3R_59()) return true; + if (jj_3R_42()) return true; return false; } private boolean jj_3_33() { - if (jj_3R_63()) return true; + if (jj_3R_62()) return true; + if (jj_3R_43()) return true; + if (jj_3R_44()) return true; + if (jj_scan_token(LPAREN)) return true; return false; } - private boolean jj_3R_112() + private boolean jj_3R_115() { if (jj_scan_token(COMMA)) return true; - if (jj_3R_46()) return true; - return false; - } - - private boolean jj_3R_71() - { - if (jj_3R_104()) return true; + if (jj_3R_47()) return true; return false; } - private boolean jj_3_31() + private boolean jj_3_36() { - if (jj_3R_61()) return true; - if (jj_3R_43()) return true; - if (jj_3R_44()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_62()) jj_scanpos = xsp; - if (jj_scan_token(LBRACE)) return true; + if (jj_3R_64()) return true; return false; } - private boolean jj_3R_142() + private boolean jj_3R_147() { Token xsp; xsp = jj_scanpos; @@ -8062,28 +8435,46 @@ private boolean jj_3R_142() private boolean jj_3R_72() { - if (jj_3R_105()) return true; + if (jj_3R_106()) return true; return false; } - private boolean jj_3_32() + private boolean jj_3_34() { - if (jj_3R_61()) return true; - if (jj_3R_52()) return true; + if (jj_3R_62()) return true; + if (jj_3R_44()) return true; + if (jj_3R_45()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_3R_63()) jj_scanpos = xsp; + if (jj_scan_token(LBRACE)) return true; + return false; + } + + private boolean jj_3R_73() + { + if (jj_3R_107()) return true; + return false; + } + + private boolean jj_3_35() + { + if (jj_3R_62()) return true; + if (jj_3R_53()) return true; if (jj_scan_token(IDENTIFIER)) return true; return false; } - private boolean jj_3R_85() + private boolean jj_3R_87() { - if (jj_3R_111()) return true; + if (jj_3R_114()) return true; Token xsp; xsp = jj_scanpos; - if (jj_3R_141()) jj_scanpos = xsp; + if (jj_3R_146()) jj_scanpos = xsp; return false; } - private boolean jj_3R_244() + private boolean jj_3R_251() { Token xsp; xsp = jj_scanpos; @@ -8092,36 +8483,28 @@ private boolean jj_3R_244() jj_lookingAhead = true; jj_semLA = isImplicitMethodTerminator(); jj_lookingAhead = false; - if (!jj_semLA || jj_3R_253()) return true; + if (!jj_semLA || jj_3R_260()) return true; } return false; } - private boolean jj_3R_253() - { - return false; - } - - private boolean jj_3R_111() + private boolean jj_3R_114() { - if (jj_3R_145()) return true; + if (jj_3R_150()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_149()) { jj_scanpos = xsp; break; } + if (jj_3R_155()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_48() + private boolean jj_3R_260() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(82)) jj_scanpos = xsp; return false; } - private boolean jj_3R_149() + private boolean jj_3R_155() { Token xsp; xsp = jj_scanpos; @@ -8132,22 +8515,30 @@ private boolean jj_3R_149() if (jj_scan_token(145)) return true; } } - if (jj_3R_145()) return true; + if (jj_3R_150()) return true; return false; } - private boolean jj_3R_145() + private boolean jj_3R_49() { - if (jj_3R_151()) return true; + Token xsp; + xsp = jj_scanpos; + if (jj_scan_token(82)) jj_scanpos = xsp; + return false; + } + + private boolean jj_3R_150() + { + if (jj_3R_157()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_152()) { jj_scanpos = xsp; break; } + if (jj_3R_158()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_152() + private boolean jj_3R_158() { Token xsp; xsp = jj_scanpos; @@ -8155,35 +8546,35 @@ private boolean jj_3R_152() jj_scanpos = xsp; if (jj_scan_token(99)) return true; } - if (jj_3R_151()) return true; + if (jj_3R_157()) return true; return false; } - private boolean jj_3R_62() + private boolean jj_3R_63() { if (jj_scan_token(THROWS)) return true; - if (jj_3R_87()) return true; + if (jj_3R_89()) return true; return false; } - private boolean jj_3R_113() + private boolean jj_3R_116() { - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; return false; } - private boolean jj_3R_151() + private boolean jj_3R_157() { - if (jj_3R_153()) return true; + if (jj_3R_159()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_154()) { jj_scanpos = xsp; break; } + if (jj_3R_160()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_154() + private boolean jj_3R_160() { Token xsp; xsp = jj_scanpos; @@ -8191,22 +8582,22 @@ private boolean jj_3R_154() jj_scanpos = xsp; if (jj_scan_token(101)) return true; } - if (jj_3R_153()) return true; + if (jj_3R_159()) return true; return false; } - private boolean jj_3R_153() + private boolean jj_3R_159() { - if (jj_3R_155()) return true; + if (jj_3R_161()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_156()) { jj_scanpos = xsp; break; } + if (jj_3R_162()) { jj_scanpos = xsp; break; } } return false; } - private boolean jj_3R_156() + private boolean jj_3R_162() { Token xsp; xsp = jj_scanpos; @@ -8214,186 +8605,27 @@ private boolean jj_3R_156() jj_scanpos = xsp; if (jj_scan_token(111)) return true; } - if (jj_3R_155()) return true; + if (jj_3R_161()) return true; return false; } - private boolean jj_3R_141() + private boolean jj_3R_146() { if (jj_scan_token(HOOK)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(COLON)) return true; - if (jj_3R_85()) return true; - return false; - } - - private boolean jj_3R_114() - { - if (jj_scan_token(SWITCH)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(RPAREN)) return true; - if (jj_scan_token(LBRACE)) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_254()) { jj_scanpos = xsp; break; } - } - if (jj_scan_token(RBRACE)) return true; - return false; - } - - private boolean jj_3R_155() - { - if (jj_3R_157()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_162()) { jj_scanpos = xsp; break; } - } - return false; - } - - private boolean jj_3R_254() - { - if (jj_3R_263()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3_34()) { jj_scanpos = xsp; break; } - } - return false; - } - - private boolean jj_3R_162() - { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(112)) { - jj_scanpos = xsp; - if (jj_scan_token(113)) return true; - } - if (jj_3R_157()) return true; - return false; - } - - private boolean jj_3R_263() - { - Token xsp; - xsp = jj_scanpos; - if (jj_3R_270()) { - jj_scanpos = xsp; - if (jj_3R_271()) return true; - } - return false; - } - - private boolean jj_3R_270() - { - if (jj_scan_token(CASE)) return true; - if (jj_3R_59()) return true; + if (jj_3R_60()) return true; if (jj_scan_token(COLON)) return true; + if (jj_3R_87()) return true; return false; } - private boolean jj_3R_157() - { - if (jj_3R_163()) return true; - Token xsp; - while (true) { - xsp = jj_scanpos; - if (jj_3R_165()) { jj_scanpos = xsp; break; } - } - return false; - } - - private boolean jj_3R_271() - { - if (jj_scan_token(154)) return true; - return false; - } - - private boolean jj_3R_165() + private boolean jj_3R_161() { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(108)) { - jj_scanpos = xsp; - if (jj_scan_token(109)) return true; - } if (jj_3R_163()) return true; - return false; - } - - private boolean jj_3R_163() - { - if (jj_3R_166()) return true; Token xsp; while (true) { xsp = jj_scanpos; - if (jj_3R_167()) { jj_scanpos = xsp; break; } - } - return false; - } - - private boolean jj_3_34() - { - if (jj_3R_41()) return true; - return false; - } - - private boolean jj_3R_115() - { - if (jj_scan_token(IF)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(RPAREN)) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_255()) { - jj_scanpos = xsp; - if (jj_3_35()) return true; - } - xsp = jj_scanpos; - if (jj_3R_256()) jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_167() - { - Token xsp; - xsp = jj_scanpos; - if (jj_scan_token(92)) { - jj_scanpos = xsp; - if (jj_scan_token(97)) return true; + if (jj_3R_168()) { jj_scanpos = xsp; break; } } - if (jj_3R_166()) return true; - return false; - } - - private boolean jj_3R_116() - { - if (jj_scan_token(WHILE)) return true; - if (jj_scan_token(LPAREN)) return true; - if (jj_3R_59()) return true; - if (jj_scan_token(RPAREN)) return true; - if (jj_3R_63()) return true; - return false; - } - - private boolean jj_3R_166() - { - if (jj_3R_168()) return true; - Token xsp; - xsp = jj_scanpos; - if (jj_3R_169()) jj_scanpos = xsp; - return false; - } - - private boolean jj_3R_169() - { - if (jj_scan_token(INSTANCEOF)) return true; - if (jj_3R_52()) return true; return false; } @@ -8411,7 +8643,7 @@ private boolean jj_3R_169() private boolean jj_lookingAhead = false; private boolean jj_semLA; private int jj_gen; - final private int[] jj_la1 = new int[123]; + final private int[] jj_la1 = new int[127]; static private int[] jj_la1_0; static private int[] jj_la1_1; static private int[] jj_la1_2; @@ -8425,21 +8657,21 @@ private boolean jj_3R_169() jj_la1_init_4(); } private static void jj_la1_init_0() { - jj_la1_0 = new int[] {0x1,0x10200800,0x10200800,0x4000000,0x0,0x4000000,0x4000,0x0,0x2004000,0x0,0x0,0x0,0x0,0x0,0x40849000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48849000,0x48849000,0x0,0x0,0x50849000,0x10000000,0x0,0x0,0x40849000,0x40849000,0x40849000,0x40849000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48849000,0x0,0x48849000,0x49849000,0x0,0x49849000,0x8000000,0x0,0x48849000,0x48849000,0x48849000,0x48849000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x8000000,0x48849000,0x0,0x0,0x40849000,0x0,0x0,0x0,0x48c49000,0x80102000,0x0,0x0,0x0,0x0,0x10000,0x10000,0x0,0x1000000,0x58a49800,0x48849000,0x48849000,0x10000000,0x80000000,0x48849000,0x0,0x0,0x0,0x20000,0x20000000,0x10000000,0x0,0x0,0x0,0x0,}; + jj_la1_0 = new int[] {0x1,0x10200800,0x10200800,0x4000000,0x0,0x4000000,0x4000,0x0,0x2004000,0x0,0x0,0x0,0x0,0x0,0x40849000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48849000,0x48849000,0x0,0x0,0x50849000,0x10000000,0x0,0x0,0x40849000,0x0,0x40849000,0x40849000,0x0,0x40849000,0x40849000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x48849000,0x0,0x48849000,0x49849000,0x0,0x49849000,0x8000000,0x0,0x48849000,0x48849000,0x48849000,0x48849000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8000000,0x8000000,0x48849000,0x0,0x0,0x40849000,0x0,0x0,0x0,0x0,0x48c49000,0x80102000,0x0,0x0,0x0,0x0,0x10000,0x10000,0x0,0x1000000,0x58a49800,0x48849000,0x48849000,0x10000000,0x80000000,0x48849000,0x0,0x0,0x0,0x20000,0x20000000,0x10000000,0x0,0x0,0x0,0x0,}; } private static void jj_la1_init_1() { - jj_la1_1 = new int[] {0x0,0x8367100,0x8367100,0x0,0x4,0x0,0x40,0x4,0x40,0x0,0x20000,0x0,0x0,0x0,0x100a0,0x800000,0x20000,0x20000,0x0,0x8,0x0,0x0,0x550106a0,0x550106a0,0x0,0x0,0x100a0,0x0,0x0,0x0,0x100a0,0x40100a0,0x100a0,0x100a0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x550106a0,0x0,0x550306a0,0x550106a0,0x0,0x550106a0,0x55000600,0x0,0x550106a0,0x550106a0,0x550106a0,0x550106a0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x45000400,0x1000000,0x550106a0,0x0,0x0,0x100a0,0x200,0x0,0x0,0x750906a2,0x2508000,0x20000,0x808,0x0,0x0,0x0,0x0,0x0,0x0,0x5d3777a0,0x550106a0,0x550106a0,0x0,0x0,0x550106a0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; + jj_la1_1 = new int[] {0x0,0x8367100,0x8367100,0x0,0x4,0x0,0x40,0x4,0x40,0x0,0x20000,0x0,0x0,0x0,0x100a0,0x800000,0x20000,0x20000,0x0,0x8,0x0,0x0,0x550106a0,0x550106a0,0x0,0x0,0x100a0,0x0,0x0,0x0,0x100a0,0x0,0x40100a0,0x100a0,0x0,0x100a0,0x100a0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x550106a0,0x0,0x550306a0,0x550106a0,0x0,0x550106a0,0x55000600,0x0,0x550106a0,0x550106a0,0x550106a0,0x550106a0,0x0,0x0,0x0,0x200,0x0,0x0,0x0,0x0,0x45000400,0x1000000,0x550106a0,0x0,0x0,0x100a0,0x0,0x200,0x0,0x0,0x750906a2,0x2508000,0x20000,0x808,0x0,0x0,0x0,0x0,0x0,0x0,0x5d3777a0,0x550106a0,0x550106a0,0x0,0x0,0x550106a0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; } private static void jj_la1_init_2() { - jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x4000,0x200,0x80000,0x40000,0x200,0x0,0x4000,0x0,0x100000,0x0,0x10000,0x200000,0xc0153c8,0xc0153c8,0x80000,0x80000,0x200,0x0,0x0,0x200,0x200,0x200,0x0,0x200,0x80000,0x200000,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x10000000,0x0,0xe3c00000,0xe3c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000000,0x0,0x0,0x0,0xc000000,0x153c8,0x1200,0xc0153c8,0xc0153c8,0x80000,0xc0153c8,0x151c8,0x200,0xc0153c8,0xc0153c8,0xc0153c8,0xc0153c8,0x0,0x0,0x0,0x200,0x1000,0x1000,0x10000,0x4000,0x1c8,0x0,0xc0153c8,0x80000,0x15000,0x14200,0x14000,0x10000,0x14000,0xc0553c8,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x40000,0x0,0xc0153c8,0xc0153c8,0xc0153c8,0x0,0x0,0xc0153c8,0x80000,0x80000,0x1000,0x0,0x0,0x0,0x0,0x200,0x40000,0x200,}; + jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000,0x4000,0x200,0x80000,0x40000,0x200,0x0,0x4000,0x0,0x100000,0x0,0x10000,0x200000,0xc0153c8,0xc0153c8,0x80000,0x80000,0x1200,0x0,0x0,0x200,0x0,0x200,0x1200,0x0,0x80000,0x1200,0x200,0x80000,0x200000,0x200000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10000000,0x10000000,0x0,0xe3c00000,0xe3c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xc000000,0x0,0x0,0x0,0xc000000,0x153c8,0x1200,0xc0153c8,0xc0153c8,0x80000,0xc0153c8,0x151c8,0x200,0xc0153c8,0xc0153c8,0xc0153c8,0xc0153c8,0x0,0x0,0x0,0x200,0x1000,0x1000,0x10000,0x4000,0x1c8,0x0,0xc0153c8,0x80000,0x15000,0x0,0x14200,0x14000,0x10000,0x14000,0xc0553c8,0x0,0x0,0x0,0x40000,0x40000,0x0,0x0,0x40000,0x0,0xc0153c8,0xc0153c8,0xc0153c8,0x0,0x0,0xc0153c8,0x80000,0x80000,0x1000,0x0,0x0,0x0,0x0,0x200,0x40000,0x200,}; } private static void jj_la1_init_3() { - jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000000,0xf0000000,0x0,0x0,0x0,0xc,0xc,0x30,0x30,0xc000,0xc000,0x30000,0x30000,0x3000,0x3000,0x2,0x2,0x0,0x1,0x1,0xfc00000,0xfc00000,0x300,0x300,0xc0c00,0xc0c00,0x300000,0x300000,0x300,0xc0,0xc0,0xc0,0x3c0,0x0,0x0,0x3c0,0x3c0,0x0,0x3c0,0x0,0x0,0x3c0,0x3c0,0x3c0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x3c0,0x3c0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000,0x0,0x0,0x0,}; + jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf0000000,0xf0000000,0x0,0x0,0x0,0xc,0xc,0x30,0x30,0xc000,0xc000,0x30000,0x30000,0x3000,0x3000,0x2,0x2,0x0,0x1,0x1,0xfc00000,0xfc00000,0x300,0x300,0xc0c00,0xc0c00,0x300000,0x300000,0x300,0xc0,0xc0,0xc0,0x3c0,0x0,0x0,0x3c0,0x3c0,0x0,0x3c0,0x0,0x0,0x3c0,0x3c0,0x3c0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3c0,0x3c0,0x3c0,0x0,0x0,0x3c0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000,0x0,0x0,0x0,}; } private static void jj_la1_init_4() { - jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x4ffff,0x4ffff,0x200000,0x1a0000,0x1a0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0xc00000,0xc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; + jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4ffff,0x4ffff,0x200000,0x1a0000,0x1a0000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0xc00000,0xc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4000000,0x4000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,}; } - private final JJCalls[] jj_2_rtns = new JJCalls[41]; + private final JJCalls[] jj_2_rtns = new JJCalls[44]; private boolean jj_rescan = false; private int jj_gc = 0; @@ -8454,7 +8686,7 @@ public Parser(final java.io.InputStream stream, final java.nio.charset.Charset e token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 123; i++) jj_la1[i] = -1; + for (int i = 0; i < 127; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -8469,7 +8701,7 @@ public void ReInit(final java.io.InputStream stream, final java.nio.charset.Char token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 123; i++) jj_la1[i] = -1; + for (int i = 0; i < 127; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -8483,7 +8715,7 @@ public Parser(final java.io.Reader stream) { token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 123; i++) + for (int i = 0; i < 127; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -8507,7 +8739,7 @@ public void ReInit(final java.io.Reader stream) { token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 123; i++) + for (int i = 0; i < 127; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); @@ -8522,7 +8754,7 @@ public Parser(final ParserTokenManager tm) { token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 123; i++) jj_la1[i] = -1; + for (int i = 0; i < 127; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -8535,7 +8767,7 @@ public void ReInit(final ParserTokenManager tm) { token = new Token(); jj_ntk = -1; jj_gen = 0; - for (int i = 0; i < 123; i++) jj_la1[i] = -1; + for (int i = 0; i < 127; i++) jj_la1[i] = -1; for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls(); } @@ -8685,7 +8917,7 @@ public ParseException generateParseException() { la1tokens[jj_kind] = true; jj_kind = -1; } - for (int i = 0; i < 123; i++) { + for (int i = 0; i < 127; i++) { if (jj_la1[i] == jj_gen) { for (int j = 0; j < 32; j++) { if ((jj_la1_0[i] & (1< getInterface(BshClassManager bcm, BSHFunctionType.SignatureInfo info) { + String hash = Integer.toHexString(generateSignatureHash(info)); + String shortName = (info.receiver != null ? "Func_R_" : "Func_") + hash; + String fqName = GENERATED_PACKAGE_FQ + shortName; + + Class existing = bcm.classForName(fqName); + if (existing != null) return existing; + + synchronized (this) { + + byte[] jvmBytecode = generateInterfaceBytecode(shortName, info); + try { + + Class genClass = bcm.loadGeneratedClass(fqName, jvmBytecode); + bcm.cacheClassInfo(fqName, genClass); + return genClass; + } catch (Exception e) { + Interpreter.debug("Failed to inject synthetic interface: " + e.getMessage()); + } + } + return null; + } + + /** + * Generates a unique hash for the function signature. + */ + private int generateSignatureHash(BSHFunctionType.SignatureInfo info) { + + int result = info.returnType.getName().hashCode(); + result = 31 * result + (info.receiver != null ? info.receiver.getName().hashCode() : 0); + for (Class p : info.params) { + result = 31 * result + (p != null ? p.getName().hashCode() : 0); + } + return result & 0x7FFFFFFF; // Ensure positive + } + + private byte[] generateInterfaceBytecode(String shortName, BSHFunctionType.SignatureInfo info) { + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES); + String internalName = "bsh/generated/" + shortName; + + /** + * Select the appropriate marker interface. + * Using $ for inner class internal name. + */ + String marker = info.receiver != null + ? "bsh/SyntheticInterfaceFactory$BshReceiverLambdaMarker" + : "bsh/SyntheticInterfaceFactory$BshLambdaMarker"; + + cw.visit(V1_8, ACC_PUBLIC + ACC_ABSTRACT + ACC_INTERFACE, + internalName, null, "java/lang/Object", new String[] { marker }); + + // Build method descriptor: (Params)Return + StringBuilder desc = new StringBuilder("("); + if (info.receiver != null) { + desc.append(BSHType.getTypeDescriptor(info.receiver)); + } + for (Class p : info.params) { + desc.append(BSHType.getTypeDescriptor(p)); + } + desc.append(")").append(BSHType.getTypeDescriptor(info.returnType)); + + cw.visitMethod(ACC_PUBLIC + ACC_ABSTRACT, "invoke", desc.toString(), null, null).visitEnd(); + cw.visitEnd(); + + return cw.toByteArray(); + } + + /** + * Internal marker interface for all synthetic BeanShell lambda functions. + */ + public interface BshLambdaMarker {} + + /** + * Internal marker interface specifically for lambdas with receivers. + */ + public interface BshReceiverLambdaMarker extends BshLambdaMarker {} +} \ No newline at end of file diff --git a/bsh-lambda-300-eee36c8/src/main/java/bsh/Types.java b/bsh-lambda-300-eee36c8/src/main/java/bsh/Types.java index 870ba2e..829e80e 100644 --- a/bsh-lambda-300-eee36c8/src/main/java/bsh/Types.java +++ b/bsh-lambda-300-eee36c8/src/main/java/bsh/Types.java @@ -381,7 +381,7 @@ public static boolean isJavaBaseAssignable( Class lhsType, Class rhsType ) // a quick fix to auto wide for magic math methods else if ((lhsType == BigInteger.class||lhsType == BigDecimal.class) && Types.isNumeric(rhsType)) return true; - else if ( lhsType.isAssignableFrom(rhsType) ) + else if ( isClassAssignable(lhsType, rhsType) ) return true; return false; @@ -422,7 +422,83 @@ static boolean isJavaBoxTypesAssignable( return isJavaBaseAssignable(lhsType, rhsType); } + + /** + * Structural subtyping for function types: + * 1. Parameters are contravariant (Target -> Source). + * 2. Return type is covariant (Source -> Target). + */ + public static boolean isFunctionTypeAssignable(Class from, Class to) { + Method fromMethod = null; + Method toMethod = null; + + for (Method m : from.getDeclaredMethods()) { + if (m.getName().equals("invoke")) { + fromMethod = m; + break; + } + } + for (Method m : to.getDeclaredMethods()) { + if (m.getName().equals("invoke")) { + toMethod = m; + break; + } + } + + if (fromMethod == null || toMethod == null) { + return false; + } + + Class[] fromParams = fromMethod.getParameterTypes(); + Class[] toParams = toMethod.getParameterTypes(); + + if (fromParams.length != toParams.length) { + return false; + } + + for (int i = 0; i < fromParams.length; i++) { + if (!Types.isAssignable(toParams[i], fromParams[i], Types.BSH_ASSIGNABLE)) { + return false; + } + } + + Class fromReturn = fromMethod.getReturnType(); + Class toReturn = toMethod.getReturnType(); + + if (toReturn != void.class) { + if (!Types.isAssignable(fromReturn, toReturn, Types.BSH_ASSIGNABLE)) { + return false; + } + } + + return true; + } + // [IMPORTANT] Use this method instead of native Class.isAssignableFrom() + public static boolean isClassAssignable(Class to, Class from) { + if (to == null || from == null) { + return false; + } + + if (SyntheticInterfaceFactory.BshLambdaMarker.class.isAssignableFrom(to)) { + Class actualFrom = from; + if (Proxy.isProxyClass(from)) { + for (Class iface : from.getInterfaces()) { + if (SyntheticInterfaceFactory.BshLambdaMarker.class.isAssignableFrom(iface)) { + actualFrom = iface; + break; + } + } + } + + if (SyntheticInterfaceFactory.BshLambdaMarker.class.isAssignableFrom(actualFrom)) { + return isFunctionTypeAssignable(actualFrom, to); + } + } + + return to.isAssignableFrom(from); + } + /** Test if a type can be converted to another type via BeanShell extended syntax rules (a superset of Java conversion rules). @@ -469,7 +545,7 @@ public static int arrayDimensions(Class arrType) { public static Class getCommonType(Class common, Class compare) { if ( null == common ) return compare; - if ( null == compare || common.isAssignableFrom(compare) ) + if ( isClassAssignable(common, compare) ) return common; // pick the largest number type based on NUMBER_ORDER definitions @@ -483,7 +559,7 @@ public static Class getCommonType(Class common, Class compare) { // find a common super class Class supr = common; while ( null != (supr = supr.getSuperclass()) && Object.class != supr ) - if ( supr.isAssignableFrom(compare) ) + if ( isClassAssignable(common, compare) ) return supr; // common type can only be Object @@ -651,7 +727,7 @@ public static Object castObject( Class toType, Class fromType, Object from } // Test if a directly assignable reference type and avoid widening conversions - if ( fromType != null && !fromType.isPrimitive() && toType.isAssignableFrom( fromType ) ) + if ( fromType != null && !fromType.isPrimitive() && isClassAssignable( toType, fromType ) ) return checkOnly ? VALID_CAST : fromValue; // Primitive to arbitrary object type. @@ -669,7 +745,7 @@ public static Object castObject( Class toType, Class fromType, Object from // We do this last to allow various errors above to be caught. // e.g cast Primitive.Void to Object would pass this // returns class instance This for generated super types - if ( toType.isAssignableFrom( fromType ) ) + if ( isClassAssignable( toType, fromType ) ) return checkOnly ? VALID_CAST : Reflect.isGeneratedClass(toType) && !Proxy.isProxyClass(fromType) ? Reflect.getClassInstanceThis(fromValue, toType.getSimpleName()) diff --git a/bsh-lambda-300-eee36c8/src/main/jjtree/bsh.jjt b/bsh-lambda-300-eee36c8/src/main/jjtree/bsh.jjt index 0ca314d..104790f 100644 --- a/bsh-lambda-300-eee36c8/src/main/jjtree/bsh.jjt +++ b/bsh-lambda-300-eee36c8/src/main/jjtree/bsh.jjt @@ -837,7 +837,17 @@ void Type() #Type : PrimaryPrefix. ( )* is a choice point. It took me a while to figure out where to put that. This stuff is annoying. */ - ( PrimitiveType() | AmbiguousName() ) + ( + PrimitiveType() + | + /* + Use LOOKAHEAD to distinguish between a parenthesized expression + and a Function Type declaration starting with '(' + */ + LOOKAHEAD(3, "(") FunctionType() + | + AmbiguousName() + ) ( LOOKAHEAD(2) "[" "]" { jjtThis.addArrayDimension(); } )* } @@ -864,6 +874,25 @@ void PrimitiveType() #PrimitiveType : | "double" { jjtThis.type = Double.TYPE; } } +/** + * Syntax: ((ParamTypes) -> ReturnType) + * or with receiver: (ReceiverType.(ParamTypes) -> ReturnType) + */ +void FunctionType() #FunctionType : +{ } +{ + "(" + /* Optional Extension Receiver: e.g., String.(int) -> void */ + [ LOOKAHEAD(AmbiguousName() ".") AmbiguousName() #ReceiverType "." ] + + "(" [ Type() ( "," Type() )* ] ")" + + "->" + + ReturnType() + ")" +} + void AmbiguousName() #AmbiguousName : /* A lookahead of 2 is required below since "Name" can be followed by a ".*" @@ -1324,6 +1353,9 @@ void AllocationExpression() #AllocationExpression : { "new" ( PrimitiveType() ArrayDimensions() + | + /* Support for allocating arrays of function types */ + LOOKAHEAD(3, "(") FunctionType() ArrayDimensions() | AmbiguousName() ( ArrayDimensions()