From f4fb09ddd501d6ecc7e9377179c4f1bd078cfb1a Mon Sep 17 00:00:00 2001 From: Stefan Urbanek Date: Tue, 25 Mar 2003 18:31:18 +0000 Subject: [PATCH] guard compilation exception and release the compiler git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/steptalk/trunk@16262 72102866-910b-0410-8b05-ffd578937521 --- Languages/Smalltalk/ChangeLog | 1 + Languages/Smalltalk/STCompiler.m | 2 ++ Languages/Smalltalk/SmalltalkEngine.m | 12 +++++++++--- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/Languages/Smalltalk/ChangeLog b/Languages/Smalltalk/ChangeLog index 762bbbc..a9d7a35 100644 --- a/Languages/Smalltalk/ChangeLog +++ b/Languages/Smalltalk/ChangeLog @@ -3,6 +3,7 @@ * STSourceReader: added missing [super dealloc] * STCompiledCode: do not retain bytecode data * STCompiler: various memory leak fixes + * SmalltalkEngine: guard compilation exception and release the compiler 2003 Mar 23 diff --git a/Languages/Smalltalk/STCompiler.m b/Languages/Smalltalk/STCompiler.m index 47776c9..b443bf7 100644 --- a/Languages/Smalltalk/STCompiler.m +++ b/Languages/Smalltalk/STCompiler.m @@ -157,6 +157,8 @@ extern int STCparse(void *context); if ([[localException name] isEqualToString: STCompilerSyntaxException]) { RELEASE(reader); + RELEASE(receiverVars); + receiverVars = nil; reader = nil; [NSException raise:STCompilerSyntaxException diff --git a/Languages/Smalltalk/SmalltalkEngine.m b/Languages/Smalltalk/SmalltalkEngine.m index 6f119ba..985bb20 100644 --- a/Languages/Smalltalk/SmalltalkEngine.m +++ b/Languages/Smalltalk/SmalltalkEngine.m @@ -70,9 +70,15 @@ [compiler setEnvironment:env]; - script = [compiler compileString:sourceCode]; - retval = [script executeInEnvironment:env]; - + NS_DURING + script = [compiler compileString:sourceCode]; + retval = [script executeInEnvironment:env]; + NS_HANDLER + RELEASE(compiler); + compiler = nil; + [localException raise]; + NS_ENDHANDLER + RELEASE(compiler); return retval;