diff -r f7e573226c2b -r 40746ab0a30b jitcraft/Parser.cpp --- a/jitcraft/Parser.cpp Sat Jul 14 18:43:34 2012 -0700 +++ b/jitcraft/Parser.cpp Sat Jul 14 21:01:52 2012 -0700 @@ -621,11 +621,15 @@ if (!expect(TOK_RETURN)) return NULL; - Expression *expr = expression(); - if (!expr) - return NULL; + Expression *expr = NULL; + if (scanner_.peek() != TOK_SEMICOLON) { + if ((expr = expression()) == NULL) + return NULL; - encounteredReturn_ = true; + // We only care about non-void returns when determining whether a + // tagless function is non-void. + encounteredReturn_ = true; + } return new (pool_) ReturnStatement(pos, expr); } @@ -1100,7 +1104,8 @@ prefix(); fprintf(fp_, "[ ReturnStatement\n"); indent(); - node->expression()->accept(this); + if (node->expression()) + node->expression()->accept(this); unindent(); } void visit(ForStatement *node) {