From: <bi...@us...> - 2010-02-22 23:29:26
|
Revision: 5578 http://oorexx.svn.sourceforge.net/oorexx/?rev=5578&view=rev Author: bigrixx Date: 2010-02-22 23:29:19 +0000 (Mon, 22 Feb 2010) Log Message: ----------- [ oorexx-Bugs-2840151 ] SysAddRexxMacro Segmentation Fault Modified Paths: -------------- main/branches/4.0.1/trunk/interpreter/api/InterpreterAPI.cpp main/branches/4.0.1/trunk/interpreter/classes/ObjectClass.hpp Property Changed: ---------------- main/branches/4.0.1/trunk/ Property changes on: main/branches/4.0.1/trunk ___________________________________________________________________ Modified: svn:mergeinfo - /main/trunk:4387,4396-4397,4460,4464,4466,4468,4506,4543-4544,4547,4562,4564,4603,4605,4696,4917,4922,4950-4952,4967,4969,5090,5539 + /main/trunk:4387,4396-4397,4460,4464,4466,4468,4506,4543-4544,4547,4562,4564,4603,4605,4696,4917,4922,4950-4952,4967,4969,5090,5092,5539 Modified: main/branches/4.0.1/trunk/interpreter/api/InterpreterAPI.cpp =================================================================== --- main/branches/4.0.1/trunk/interpreter/api/InterpreterAPI.cpp 2010-02-22 23:13:48 UTC (rev 5577) +++ main/branches/4.0.1/trunk/interpreter/api/InterpreterAPI.cpp 2010-02-22 23:29:19 UTC (rev 5578) @@ -221,9 +221,6 @@ arguments.image = image; // go run this program arguments.invoke(NULL, NULL); - // terminate and clean up the interpreter runtime. This only works - // if there are no active instances - Interpreter::terminateInterpreter(); return (RexxReturnCode)arguments.rc; /* return the error code (negated) */ } Modified: main/branches/4.0.1/trunk/interpreter/classes/ObjectClass.hpp =================================================================== --- main/branches/4.0.1/trunk/interpreter/classes/ObjectClass.hpp 2010-02-22 23:13:48 UTC (rev 5577) +++ main/branches/4.0.1/trunk/interpreter/classes/ObjectClass.hpp 2010-02-22 23:29:19 UTC (rev 5578) @@ -160,9 +160,20 @@ /* function table pointer at */ /* different locations. This forces */ /* to the front location */ - protected: - virtual ~RexxVirtualBase() { ; } - virtual void baseVirtual() {;} + protected: + virtual ~RexxVirtualBase() { ; } + virtual void baseVirtual() {;} + + public: + // the following need to be defined at the base virtual level. When + // an exception is thrown from within an object constructor, the destructors + // unwind and the constructed object just ends up with a virtual base + // vft. If the garbage collector sees this, it will crash unless these + // are defined at this level. + virtual void live(size_t) {;} + virtual void liveGeneral(int reason) {;} + virtual void flatten(RexxEnvelope *) {;} + virtual RexxObject *unflatten(RexxEnvelope *) { return (RexxObject *)this; }; }; class RexxObject; @@ -252,13 +263,6 @@ inline bool isSameType(RexxInternalObject *o) { return behaviour == o->getObjectType(); } inline void setBehaviour(RexxBehaviour *b) { behaviour = b; } - /* the following are virtual */ - /* functions required for every */ - /* class */ - virtual void live(size_t) {;} - virtual void liveGeneral(int reason) {;} - virtual void flatten(RexxEnvelope *) {;} - virtual RexxObject *unflatten(RexxEnvelope *) { return (RexxObject *)this; }; virtual RexxObject *makeProxy(RexxEnvelope *); virtual RexxObject *copy(); virtual RexxObject *evaluate(RexxActivation *, RexxExpressionStack *) { return OREF_NULL; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |