SVN commit 438245 by porten: harmonize diverging return-outside-of-function checks M +5 -0 ChangeLog M +0 -2 function.cpp M +0 -2 internal.cpp M +6 -11 nodes.cpp M +0 -5 nodes.h --- trunk/KDE/kdelibs/kjs/ChangeLog #438244:438245 @@ -1,3 +1,8 @@ +2005-07-24 Harri Porten + + * nodes.cpp: the return-outside-of-function check got duplicated + in JSC. Harmonize them. + 2005-06-22 Harri Porten * function.cpp: pre-process var declaration in eval() --- trunk/KDE/kdelibs/kjs/function.cpp #438244:438245 @@ -778,8 +778,6 @@ #endif SourceCode *source; FunctionBodyNode *progNode = Parser::parse(s.data(),s.size(),&source,&errLine,&errMsg); - if (progNode) - progNode->setProgram(true); // notify debugger that source has been parsed Debugger *dbg = exec->interpreter()->imp()->debugger(); --- trunk/KDE/kdelibs/kjs/internal.cpp #438244:438245 @@ -830,8 +830,6 @@ UString errMsg; SourceCode *source; FunctionBodyNode *progNode = Parser::parse(code.data(),code.size(),&source,&errLine,&errMsg); - if (progNode) - progNode->setProgram(true); // notify debugger that source has been parsed if (dbg) { --- trunk/KDE/kdelibs/kjs/nodes.cpp #438244:438245 @@ -2390,6 +2390,11 @@ { KJS_BREAKPOINT; + CodeType codeType = exec->context().imp()->codeType(); + if (codeType != FunctionCode) { + return Completion(Throw, throwError(exec, SyntaxError, "Invalid return statement.")); + } + if (!value) return Completion(ReturnValue, Undefined()); @@ -2930,7 +2935,7 @@ FunctionBodyNode::FunctionBodyNode(SourceElementsNode *s) - : BlockNode(s), program(false) + : BlockNode(s) { //fprintf(stderr,"FunctionBodyNode::FunctionBodyNode %p\n",this); } @@ -2941,16 +2946,6 @@ source->processFuncDecl(exec); } -Completion FunctionBodyNode::execute(ExecState *exec) -{ - Completion c = BlockNode::execute(exec); - if (program && c.complType() == ReturnValue) - return Completion(Throw, - throwError(exec, SyntaxError, "return outside of function body")); - else - return c; -} - // ----------------------------- FuncDeclNode --------------------------------- void FuncDeclNode::ref() --- trunk/KDE/kdelibs/kjs/nodes.h #438244:438245 @@ -1023,11 +1023,6 @@ public: FunctionBodyNode(SourceElementsNode *s); virtual void processFuncDecl(ExecState *exec); - virtual Completion execute(ExecState *exec); - void setProgram(bool _program) { program = _program; } - bool isProgram() const { return program; } - private: - bool program; }; class FuncDeclNode : public StatementNode {