From 900de6cf01da5bd288d3306064a8c26b36768930 Mon Sep 17 00:00:00 2001 From: "rogerl%netscape.com" Date: Wed, 19 Mar 2003 21:29:47 +0000 Subject: [PATCH] Fixed GC-leakage for FunctionObjects. git-svn-id: svn://10.0.0.236/trunk@139793 18797224-902f-48f8-a5cc-f745e15eee43 --- mozilla/js2/src/js2function.cpp | 2 ++ mozilla/js2/src/js2metadata.cpp | 9 +++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/mozilla/js2/src/js2function.cpp b/mozilla/js2/src/js2function.cpp index f16aa1d0556..f401dd2dfae 100644 --- a/mozilla/js2/src/js2function.cpp +++ b/mozilla/js2/src/js2function.cpp @@ -76,6 +76,8 @@ namespace MetaData { FunctionExprNode *fnExpr = parser.parseFunctionExpression(meta->engine->errorPos()); ASSERT(parser.lexer.peek(true).hasKind(Token::end)); ASSERT(fnExpr); // otherwise, an exception would have been thrown out of here + fnExpr->obj = NULL; + RootKeeper rk(&fnExpr->obj); JS2Class *exprType; meta->ValidateExpression(&meta->cxt, meta->env, fnExpr); meta->SetupExprNode(meta->env, RunPhase, fnExpr, &exprType); diff --git a/mozilla/js2/src/js2metadata.cpp b/mozilla/js2/src/js2metadata.cpp index 6a1db37b05e..f9adda97a61 100644 --- a/mozilla/js2/src/js2metadata.cpp +++ b/mozilla/js2/src/js2metadata.cpp @@ -88,22 +88,23 @@ namespace MetaData { JS2Object *JS2Metadata::validateStaticFunction(FunctionDefinition *fnDef, js2val compileThis, bool prototype, bool unchecked, Context *cxt, Environment *env) { ParameterFrame *compileFrame = new ParameterFrame(compileThis, prototype); - JS2Object *result; + RootKeeper rk1(&compileFrame); + JS2Object *result = NULL; + RootKeeper rk2(&result); if (prototype) { FunctionInstance *fInst = new FunctionInstance(this, functionClass->prototype, functionClass); + result = fInst; fInst->fWrap = new FunctionWrapper(unchecked, compileFrame, env); fnDef->fWrap = fInst->fWrap; - result = fInst; } else { SimpleInstance *sInst = new SimpleInstance(functionClass); + result = sInst; sInst->fWrap = new FunctionWrapper(unchecked, compileFrame, env); fnDef->fWrap = sInst->fWrap; - result = sInst; } - RootKeeper rk(&result); Frame *curTopFrame = env->getTopFrame(); CompilationData *oldData = startCompilationUnit(fnDef->fWrap->bCon, bCon->mSource, bCon->mSourceLocation); try {