JS parser: added insideFunction flag
This commit is contained in:
@@ -33,9 +33,9 @@ public class JsParser {
|
||||
|
||||
public static List<JsStatement> parse(
|
||||
SourceInfo rootSourceInfo,
|
||||
JsScope scope, Reader r
|
||||
JsScope scope, Reader r, boolean insideFunction
|
||||
) throws IOException, JsParserException {
|
||||
return new JsParser().parseImpl(rootSourceInfo, scope, r);
|
||||
return new JsParser().parseImpl(rootSourceInfo, scope, r, insideFunction);
|
||||
}
|
||||
|
||||
private final Stack<JsScope> scopeStack = new Stack<JsScope>();
|
||||
@@ -50,7 +50,7 @@ public class JsParser {
|
||||
|
||||
List<JsStatement> parseImpl(
|
||||
final SourceInfo rootSourceInfo, JsScope scope,
|
||||
Reader r
|
||||
Reader r, boolean insideFunction
|
||||
) throws JsParserException, IOException {
|
||||
// Create a custom error handler so that we can throw our own exceptions.
|
||||
Context.enter().setErrorReporter(new ErrorReporter() {
|
||||
@@ -79,7 +79,7 @@ public class JsParser {
|
||||
// Parse using the Rhino parser.
|
||||
//
|
||||
TokenStream ts = new TokenStream(r, sourceNameStub, rootSourceInfo.getLine());
|
||||
Parser parser = new Parser(new IRFactory(ts));
|
||||
Parser parser = new Parser(new IRFactory(ts), insideFunction);
|
||||
Node topNode = (Node) parser.parse(ts);
|
||||
|
||||
// Map the Rhino AST to ours.
|
||||
|
||||
@@ -52,9 +52,9 @@ import java.io.IOException;
|
||||
*/
|
||||
|
||||
public class Parser {
|
||||
|
||||
public Parser(IRFactory nf) {
|
||||
this.nf = nf;
|
||||
public Parser(IRFactory nf, boolean insideFunction) {
|
||||
this.nf = nf;
|
||||
this.insideFunction = insideFunction;
|
||||
}
|
||||
|
||||
private void mustMatchToken(TokenStream ts, int toMatch, String messageId)
|
||||
@@ -729,8 +729,9 @@ public class Parser {
|
||||
sourceAdd((char) ts.RETURN);
|
||||
|
||||
// bail if we're not in a (toplevel) function
|
||||
if ((ts.flags & ts.TSF_FUNCTION) == 0)
|
||||
reportError(ts, "msg.bad.return");
|
||||
if ((!insideFunction) && ((ts.flags & ts.TSF_FUNCTION) == 0)) {
|
||||
reportError(ts, "msg.bad.return");
|
||||
}
|
||||
|
||||
/* This is ugly, but we don't want to require a semicolon. */
|
||||
ts.flags |= ts.TSF_REGEXP;
|
||||
@@ -1516,4 +1517,5 @@ public class Parser {
|
||||
private char[] sourceBuffer = new char[128];
|
||||
private int sourceTop;
|
||||
private int functionNumber;
|
||||
private final boolean insideFunction;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user