From: <bi...@us...> - 2014-07-20 23:31:23
|
Revision: 10319 http://sourceforge.net/p/oorexx/code-0/10319 Author: bigrixx Date: 2014-07-20 23:31:08 +0000 (Sun, 20 Jul 2014) Log Message: ----------- An end-of-day checkin Modified Paths: -------------- sandbox/rick/newsource/CMakeLists.txt sandbox/rick/newsource/interpreter/RexxClasses/CoreClasses.orx sandbox/rick/newsource/interpreter/behaviour/MethodDictionary.hpp sandbox/rick/newsource/interpreter/behaviour/PrimitiveClasses.xml sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.cpp sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.hpp sandbox/rick/newsource/interpreter/behaviour/VirtualFunctionTable.cpp sandbox/rick/newsource/interpreter/classes/ArrayClass.cpp sandbox/rick/newsource/interpreter/classes/ArrayClass.hpp sandbox/rick/newsource/interpreter/classes/ClassClass.cpp sandbox/rick/newsource/interpreter/classes/ClassClass.hpp sandbox/rick/newsource/interpreter/classes/ContextClass.cpp sandbox/rick/newsource/interpreter/classes/ContextClass.hpp sandbox/rick/newsource/interpreter/classes/DirectoryClass.cpp sandbox/rick/newsource/interpreter/classes/DirectoryClass.hpp sandbox/rick/newsource/interpreter/classes/IntegerClass.cpp sandbox/rick/newsource/interpreter/classes/IntegerClass.hpp sandbox/rick/newsource/interpreter/classes/ListClass.cpp sandbox/rick/newsource/interpreter/classes/ListClass.hpp sandbox/rick/newsource/interpreter/classes/MessageClass.cpp sandbox/rick/newsource/interpreter/classes/MessageClass.hpp sandbox/rick/newsource/interpreter/classes/MethodClass.cpp sandbox/rick/newsource/interpreter/classes/MethodClass.hpp sandbox/rick/newsource/interpreter/classes/MutableBufferClass.cpp sandbox/rick/newsource/interpreter/classes/MutableBufferClass.hpp sandbox/rick/newsource/interpreter/classes/NumberStringClass.cpp sandbox/rick/newsource/interpreter/classes/NumberStringClass.hpp sandbox/rick/newsource/interpreter/classes/ObjectClass.cpp sandbox/rick/newsource/interpreter/classes/ObjectClass.hpp sandbox/rick/newsource/interpreter/classes/PackageClass.cpp sandbox/rick/newsource/interpreter/classes/PackageClass.hpp sandbox/rick/newsource/interpreter/classes/RoutineClass.cpp sandbox/rick/newsource/interpreter/classes/RoutineClass.hpp sandbox/rick/newsource/interpreter/classes/StackFrameClass.cpp sandbox/rick/newsource/interpreter/classes/StackFrameClass.hpp sandbox/rick/newsource/interpreter/classes/StemClass.cpp sandbox/rick/newsource/interpreter/classes/StemClass.hpp sandbox/rick/newsource/interpreter/classes/StringClass.cpp sandbox/rick/newsource/interpreter/classes/StringClass.hpp sandbox/rick/newsource/interpreter/classes/SupplierClass.cpp sandbox/rick/newsource/interpreter/classes/SupplierClass.hpp sandbox/rick/newsource/interpreter/classes/WeakReferenceClass.cpp sandbox/rick/newsource/interpreter/classes/WeakReferenceClass.hpp sandbox/rick/newsource/interpreter/classes/support/HashCollection.cpp sandbox/rick/newsource/interpreter/classes/support/HashCollection.hpp sandbox/rick/newsource/interpreter/classes/support/HashContents.cpp sandbox/rick/newsource/interpreter/classes/support/HashContents.hpp sandbox/rick/newsource/interpreter/classes/support/RexxCollection.cpp sandbox/rick/newsource/interpreter/classes/support/RexxCollection.hpp sandbox/rick/newsource/interpreter/classes/support/RexxCompoundElement.cpp sandbox/rick/newsource/interpreter/classes/support/RexxCompoundElement.hpp sandbox/rick/newsource/interpreter/classes/support/RexxHashTable.cpp sandbox/rick/newsource/interpreter/classes/support/RexxHashTable.hpp sandbox/rick/newsource/interpreter/classes/support/RexxListTable.cpp sandbox/rick/newsource/interpreter/classes/support/RexxListTable.hpp sandbox/rick/newsource/interpreter/concurrency/RexxActivity.cpp sandbox/rick/newsource/interpreter/concurrency/RexxActivity.hpp sandbox/rick/newsource/interpreter/execution/CPPCode.cpp sandbox/rick/newsource/interpreter/execution/CPPCode.hpp sandbox/rick/newsource/interpreter/execution/RexxCode.cpp sandbox/rick/newsource/interpreter/execution/RexxCode.hpp sandbox/rick/newsource/interpreter/execution/RexxNativeCode.cpp sandbox/rick/newsource/interpreter/execution/RexxNativeCode.hpp sandbox/rick/newsource/interpreter/execution/RexxVariable.cpp sandbox/rick/newsource/interpreter/execution/RexxVariable.hpp sandbox/rick/newsource/interpreter/execution/RexxVariableDictionary.cpp sandbox/rick/newsource/interpreter/execution/RexxVariableDictionary.hpp sandbox/rick/newsource/interpreter/expression/ExpressionCompoundVariable.cpp sandbox/rick/newsource/interpreter/expression/ExpressionCompoundVariable.hpp sandbox/rick/newsource/interpreter/expression/ExpressionDotVariable.cpp sandbox/rick/newsource/interpreter/expression/ExpressionDotVariable.hpp sandbox/rick/newsource/interpreter/expression/ExpressionFunction.cpp sandbox/rick/newsource/interpreter/expression/ExpressionFunction.hpp sandbox/rick/newsource/interpreter/expression/ExpressionLogical.cpp sandbox/rick/newsource/interpreter/expression/ExpressionLogical.hpp sandbox/rick/newsource/interpreter/expression/ExpressionMessage.cpp sandbox/rick/newsource/interpreter/expression/ExpressionMessage.hpp sandbox/rick/newsource/interpreter/expression/ExpressionOperator.cpp sandbox/rick/newsource/interpreter/expression/ExpressionOperator.hpp sandbox/rick/newsource/interpreter/expression/ExpressionStem.cpp sandbox/rick/newsource/interpreter/expression/ExpressionStem.hpp sandbox/rick/newsource/interpreter/expression/ExpressionVariable.cpp sandbox/rick/newsource/interpreter/expression/ExpressionVariable.hpp sandbox/rick/newsource/interpreter/expression/IndirectVariableReference.cpp sandbox/rick/newsource/interpreter/expression/IndirectVariableReference.hpp sandbox/rick/newsource/interpreter/instructions/AddressInstruction.cpp sandbox/rick/newsource/interpreter/instructions/AddressInstruction.hpp sandbox/rick/newsource/interpreter/instructions/AssignmentInstruction.cpp sandbox/rick/newsource/interpreter/instructions/AssignmentInstruction.hpp sandbox/rick/newsource/interpreter/instructions/BaseDoInstruction.cpp sandbox/rick/newsource/interpreter/instructions/CallInstruction.cpp sandbox/rick/newsource/interpreter/instructions/CallInstruction.hpp sandbox/rick/newsource/interpreter/instructions/ClassDirective.cpp sandbox/rick/newsource/interpreter/instructions/ClassDirective.hpp sandbox/rick/newsource/interpreter/instructions/ControlledDoInstruction.cpp sandbox/rick/newsource/interpreter/instructions/DoCountInstruction.cpp sandbox/rick/newsource/interpreter/instructions/DoInstruction.hpp sandbox/rick/newsource/interpreter/instructions/DoOverInstruction.cpp sandbox/rick/newsource/interpreter/instructions/DoWhileInstruction.cpp sandbox/rick/newsource/interpreter/instructions/DropInstruction.cpp sandbox/rick/newsource/interpreter/instructions/DropInstruction.hpp sandbox/rick/newsource/interpreter/instructions/ElseInstruction.cpp sandbox/rick/newsource/interpreter/instructions/ElseInstruction.hpp sandbox/rick/newsource/interpreter/instructions/EndIf.cpp sandbox/rick/newsource/interpreter/instructions/EndIf.hpp sandbox/rick/newsource/interpreter/instructions/EndInstruction.cpp sandbox/rick/newsource/interpreter/instructions/EndInstruction.hpp sandbox/rick/newsource/interpreter/instructions/ExposeInstruction.cpp sandbox/rick/newsource/interpreter/instructions/ExposeInstruction.hpp sandbox/rick/newsource/interpreter/instructions/ForwardInstruction.cpp sandbox/rick/newsource/interpreter/instructions/ForwardInstruction.hpp sandbox/rick/newsource/interpreter/instructions/GuardInstruction.cpp sandbox/rick/newsource/interpreter/instructions/GuardInstruction.hpp sandbox/rick/newsource/interpreter/instructions/IfInstruction.cpp sandbox/rick/newsource/interpreter/instructions/IfInstruction.hpp sandbox/rick/newsource/interpreter/instructions/LeaveInstruction.cpp sandbox/rick/newsource/interpreter/instructions/LeaveInstruction.hpp sandbox/rick/newsource/interpreter/instructions/LibraryDirective.cpp sandbox/rick/newsource/interpreter/instructions/LibraryDirective.hpp sandbox/rick/newsource/interpreter/instructions/MessageInstruction.cpp sandbox/rick/newsource/interpreter/instructions/MessageInstruction.hpp sandbox/rick/newsource/interpreter/instructions/ParseInstruction.cpp sandbox/rick/newsource/interpreter/instructions/ParseInstruction.hpp sandbox/rick/newsource/interpreter/instructions/ParseTrigger.cpp sandbox/rick/newsource/interpreter/instructions/ParseTrigger.hpp sandbox/rick/newsource/interpreter/instructions/ProcedureInstruction.cpp sandbox/rick/newsource/interpreter/instructions/ProcedureInstruction.hpp sandbox/rick/newsource/interpreter/instructions/RaiseInstruction.cpp sandbox/rick/newsource/interpreter/instructions/RaiseInstruction.hpp sandbox/rick/newsource/interpreter/instructions/RequiresDirective.cpp sandbox/rick/newsource/interpreter/instructions/RequiresDirective.hpp sandbox/rick/newsource/interpreter/instructions/RexxInstruction.cpp sandbox/rick/newsource/interpreter/instructions/RexxInstruction.hpp sandbox/rick/newsource/interpreter/instructions/SelectInstruction.cpp sandbox/rick/newsource/interpreter/instructions/SelectInstruction.hpp sandbox/rick/newsource/interpreter/instructions/SignalInstruction.cpp sandbox/rick/newsource/interpreter/instructions/SignalInstruction.hpp sandbox/rick/newsource/interpreter/instructions/ThenInstruction.cpp sandbox/rick/newsource/interpreter/instructions/ThenInstruction.hpp sandbox/rick/newsource/interpreter/instructions/TraceInstruction.cpp sandbox/rick/newsource/interpreter/instructions/TraceInstruction.hpp sandbox/rick/newsource/interpreter/instructions/UseStrictInstruction.cpp sandbox/rick/newsource/interpreter/instructions/UseStrictInstruction.hpp sandbox/rick/newsource/interpreter/memory/RexxMemory.cpp sandbox/rick/newsource/interpreter/memory/RexxMemory.hpp sandbox/rick/newsource/interpreter/memory/Setup.cpp sandbox/rick/newsource/interpreter/parser/ProgramSource.cpp sandbox/rick/newsource/interpreter/parser/ProgramSource.hpp sandbox/rick/newsource/interpreter/parser/SourceFile.cpp sandbox/rick/newsource/interpreter/parser/SourceFile.hpp sandbox/rick/newsource/interpreter/runtime/Interpreter.cpp sandbox/rick/newsource/interpreter/runtime/RexxCore.h Added Paths: ----------- sandbox/rick/newsource/interpreter/memory/Envelope.cpp sandbox/rick/newsource/interpreter/memory/Envelope.hpp sandbox/rick/newsource/interpreter/memory/InternalStack.cpp sandbox/rick/newsource/interpreter/memory/InternalStack.hpp sandbox/rick/newsource/interpreter/memory/NumberArray.cpp sandbox/rick/newsource/interpreter/memory/NumberArray.hpp sandbox/rick/newsource/interpreter/memory/SmartBuffer.cpp sandbox/rick/newsource/interpreter/memory/SmartBuffer.hpp Removed Paths: ------------- sandbox/rick/newsource/interpreter/memory/RexxEnvelope.cpp sandbox/rick/newsource/interpreter/memory/RexxEnvelope.hpp sandbox/rick/newsource/interpreter/memory/RexxInternalStack.cpp sandbox/rick/newsource/interpreter/memory/RexxInternalStack.hpp sandbox/rick/newsource/interpreter/memory/RexxSmartBuffer.cpp sandbox/rick/newsource/interpreter/memory/RexxSmartBuffer.hpp Modified: sandbox/rick/newsource/CMakeLists.txt =================================================================== --- sandbox/rick/newsource/CMakeLists.txt 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/CMakeLists.txt 2014-07-20 23:31:08 UTC (rev 10319) @@ -541,10 +541,11 @@ ${build_memory_dir}/MemorySegment.cpp ${build_memory_dir}/MemoryStack.cpp ${build_memory_dir}/MemoryStats.cpp + ${build_memory_dir}/NumberArray.cpp ${build_memory_dir}/ProtectedObject.cpp - ${build_memory_dir}/RexxEnvelope.cpp - ${build_memory_dir}/RexxInternalStack.cpp - ${build_memory_dir}/RexxSmartBuffer.cpp + ${build_memory_dir}/Envelope.cpp + ${build_memory_dir}/InternalStack.cpp + ${build_memory_dir}/SmartBuffer.cpp ${build_memory_dir}/UninitDispatcher.cpp ${build_memory_dir}/Setup.cpp ${build_memory_dir}/RexxMemory.cpp) @@ -561,7 +562,7 @@ ${build_execution_dir}/SecurityManager.cpp) set (behaviour_sources ${build_behaviour_dir}/PrimitiveBehaviours.cpp ${build_behaviour_dir}/RexxBehaviour.cpp - ${build_behaviour_dir}/ScopeTable.cpp + ${build_behaviour_dir}/MethodDictionary.cpp ${build_behaviour_dir}/VirtualFunctionTable.cpp) set (concurrency_sources ${build_concurrency_dir}/ActivityDispatcher.cpp ${build_concurrency_dir}/ActivityManager.cpp Modified: sandbox/rick/newsource/interpreter/RexxClasses/CoreClasses.orx =================================================================== --- sandbox/rick/newsource/interpreter/RexxClasses/CoreClasses.orx 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/RexxClasses/CoreClasses.orx 2014-07-20 23:31:08 UTC (rev 10319) @@ -42,21 +42,20 @@ /* */ /******************************************************************************/ -use arg kernel_methods +use arg systemEnvironment /* name the common objects */ .environment~objectname = "The Environment Directory" -.kernel~objectname = "The kernel directory" +systemEnvironment~objectname = "The System Directory" .nil~objectname = "The NIL object" --- Add serialization support -call "Serializable.orx" - -- add string class constant methods .String~!define_class_method("NL", .methods~string_cls_nl) .String~!define_class_method("CR", .methods~string_cls_cr) .String~!define_class_method("TAB", .methods~string_cls_tab) .String~!define_class_method("NULL", .methods~string_cls_null) +// TODO: Set these up as small classes that we can just pass to classes. + set_methods = .table~new /* get a table directory */ /* add the many item methods */ set_methods~put(.methods~many_union, 'UNION') @@ -104,57 +103,10 @@ server~!define_methods(server_mdict) server~!rexxdefined /* Mark as unchangeable */ -.environment~setentry('!server', server) +.systemEnvironment~setentry('!server', server) -/* make references to .local return the local environment */ -.environment~setmethod('LOCAL',kernel_methods['LOCAL']) - - .Monitor~!REXXDefined /* define this as "unchangeable" */ -.Set~define('PUT', .methods['PUT']) /* add common methods to SET and BAG */ -.Set~define('[]=', .methods['PUT']) -.Set~!REXXDefined -.Bag~define('PUT', .methods['PUT']) -.Bag~define('[]=', .methods['PUT']) -.Bag~!REXXDefined - -.Array~inherit(.Serializable) -array_methods = .Table~new -array_methods~put(.methods~array_wo, "WRITEOBJECT") -array_methods~put(.methods~array_ro, "READOBJECT") -.Array~!define_methods(array_methods) - -.Directory~inherit(.Serializable) -directory_methods = .Table~new -directory_methods~put(.methods~directory_wo, "WRITEOBJECT") -directory_methods~put(.methods~directory_ro, "READOBJECT") -.Directory~!define_methods(directory_methods) - -mb_methods = .Table~new -mb_methods~put(.methods~mutablebuffer_wo, "WRITEOBJECT") -mb_methods~put(.methods~mutablebuffer_ro, "READOBJECT") -.MutableBuffer~inherit(.Serializable) -.MutableBuffer~!define_methods(mb_methods) - -.Relation~inherit(.Serializable) -.Relation~!define_methods(directory_methods) - -.Table~inherit(.Serializable) -.Table~!define_methods(directory_methods) - -.Stem~inherit(.Serializable) -stem_methods = .Table~new -stem_methods~put(.methods~stem_wo, "WRITEOBJECT") -stem_methods~put(.methods~stem_ro, "READOBJECT") -.Stem~!define_methods(stem_methods) - -.Queue~inherit(.Serializable) -queue_methods = .Table~new -queue_methods~put(.methods~queue_wo, "WRITEOBJECT") -queue_methods~put(.methods~queue_ro, "READOBJECT") -.Queue~!define_methods(queue_methods) - .Alarm~!REXXDefined .CircularQueue~!REXXDefined .Properties~!REXXDefined @@ -172,9 +124,6 @@ .environment~setentry('TIMESPAN', .TimeSpan) .environment~setentry('ARGUTIL', .ArgUtil) -.environment~setEntry('SERIALIZABLE', .Serializable) -.environment~setEntry('SERIALIZEFUNCTIONS', .SerializeFunctions) - call 'StreamClasses.orx' call 'PlatformObjects.orx' -- now load platform-specific builtin classes @@ -203,101 +152,8 @@ ::METHOD string_cls_null return "00"x -/* Serializable support methods */ -::METHOD array_wo - use strict arg handler - handler~writeNumber(self~items) - do i over self - handler~writeObject(i) - end -::METHOD array_ro - use strict arg handler - count = handler~readNumber - self[count] = .nil - do i = 1 to count - self[i] = handler~readObject - end - -::METHOD queue_wo - use strict arg handler - handler~writeNumber(self~items) - do i over self - handler~writeObject(i) - end - -::METHOD queue_ro - use strict arg handler - count = handler~readNumber - do i = 1 to count - self~append(handler~readObject) - end - -::METHOD stem_wo - use strict arg handler - handler~writeObject(self[]) - handler~writeNumber(self~items) - do i over self - handler~writeObject(i) - end - -::METHOD stem_ro - use strict arg handler - self[] = handler~readObject - count = handler~readNumber - self[count] = .nil - do i = 1 to count - self[i] = handler~readObject - end - --- directory methods are also used for relation and table -::METHOD directory_wo - use strict arg handler - handler~writeNumber(self~items) - content = self~supplier - do while content~available - handler~writeObject(content~index) - handler~writeObject(content~item) - content~next - end - -::METHOD directory_ro - use strict arg handler - count = handler~readNumber - do i = 1 to count - index = handler~readObject - item = handler~readObject - self[index] = item - end - -::METHOD mutablebuffer_wo - use strict arg handler - handler~writeObject(self~string) - -::METHOD mutablebuffer_ro - use strict arg handler - -- just append the string representation to the empty buffer - self~append(handler~readObject) - --- Methods cannot be serialized at the moment - later this code may be used. -/* -::METHOD method_wo - use strict arg handler - if Object~source~size = 0 then - raise syntax 93.900 array ("Unable to serialize method without source") - handler~writeNumber(self~isGuarded*4+self~isPrivate*2+self~isProtected) - handler~writeObject(self~source) - --- This does not work yet. -::METHOD method_ro - use strict arg handler - m = .Method~new('', Caller~FromSerializedData(arguments)) - if mode~bitAnd(4) = 4 then m~setGuarded - if mode~bitAnd(2) = 2 then m~setPrivate - if mode~bitAnd(1) = 1 then m~setProtected - return m - -*/ +// TODO: implement these in the C code...not that complicated. /*============================================================================*/ /* Additional S U P P L I E R methods */ /*============================================================================*/ @@ -1073,22 +929,7 @@ ::CLASS 'SetCollection' MIXINCLASS Collection INHERIT Serializable -::METHOD writeObject - use strict arg handler - handler~writeNumber(items) - do i over self - handler~writeObject(i) - end -::METHOD readObject - use strict arg handler - count = handler~readNumber - do i = 1 to count - o = handler~readObject - self~put(o, o) - end - - -- sort comparison classes. ::CLASS 'Comparable' MIXINCLASS Object ::METHOD compareTo ABSTRACT Modified: sandbox/rick/newsource/interpreter/behaviour/MethodDictionary.hpp =================================================================== --- sandbox/rick/newsource/interpreter/behaviour/MethodDictionary.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/behaviour/MethodDictionary.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -63,7 +63,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope *); + virtual void flatten(Envelope *); virtual RexxObject *copy(); Modified: sandbox/rick/newsource/interpreter/behaviour/PrimitiveClasses.xml =================================================================== --- sandbox/rick/newsource/interpreter/behaviour/PrimitiveClasses.xml 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/behaviour/PrimitiveClasses.xml 2014-07-20 23:31:08 UTC (rev 10319) @@ -116,9 +116,7 @@ <Class id="ConstantGetterCode" class="ConstantGetterCode" include="CPPCode.hpp"/> <Class id="AbstractCode" class="AbstractCode" include="CPPCode.hpp"/> -<Class id="HashTable" class="RexxHashTable" include="RexxHashTable.hpp"/> -<Class id="ListTable" class="RexxListTable" include="RexxListTable.hpp"/> -<Class id="SmartBuffer" class="RexxSmartBuffer" include="RexxSmartBuffer.hpp"/> +<Class id="SmartBuffer" class="SmartBuffer" include="SmartBuffer.hpp"/> <Class id="IdentityHashContents" class="IdentityHashContents" include="HashContents.hpp"/> <Class id="EqualityHashContents" class="EqualityHashContents" include="HashContents.hpp"/> @@ -199,17 +197,18 @@ <Class id="ArrayProgramSource" class="ArrayProgramSource" include="ProgramSource.hpp"/> <Class id="BufferProgramSource" class="BufferProgramSource" include="ProgramSource.hpp"/> <Class id="FileProgramSource" class="FileProgramSource" include="ProgramSource.hpp"/> +<Class id="NumberArray" class="NumberArray" include="NumberArray.hpp"/> </Internal> <Transient> <Class id="Memory" class="RexxMemory" include="RexxMemory.hpp" objectvirtual="true"/> -<Class id="InternalStack" class="RexxInternalStack" include="RexxInternalStack.hpp"/> +<Class id="InternalStack" class="InternalStack" include="InternalStack.hpp"/> <Class id="LiveStack" class="LiveStack" include="MemoryStack.hpp"/> <Class id="PushThroughStack" class="PushThroughStack" include="MemoryStack.hpp"/> <Class id="Activity" class="RexxActivity" include="RexxActivity.hpp"/> <Class id="Activation" class="RexxActivation" include="RexxActivation.hpp"/> <Class id="NativeActivation" class="RexxNativeActivation" include="RexxNativeActivation.hpp"/> <Class id="ActivationFrameBuffer" class="RexxActivationFrameBuffer" include="RexxActivationStack.hpp"/> -<Class id="Envelope" class="RexxEnvelope" include="RexxEnvelope.hpp"/> +<Class id="Envelope" class="Envelope" include="Envelope.hpp"/> <Class id="LanguageParser" class="LanguageParser" include="LanguageParser.hpp"/> <Class id="Clause" class="RexxClause" include="Clause.hpp"/> <Class id="Token" class="RexxToken" include="Token.hpp"/> Modified: sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.cpp =================================================================== --- sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -158,7 +158,7 @@ * * @param envelope The envelope we're flattening into. */ -void RexxBehaviour::flatten(RexxEnvelope *envelope) +void RexxBehaviour::flatten(Envelope *envelope) { setUpFlatten(RexxBehaviour) Modified: sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.hpp =================================================================== --- sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/behaviour/RexxBehaviour.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -69,7 +69,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope*); + virtual void flatten(Envelope*); virtual RexxObject *copy(); void copyBehaviour(RexxBehaviour *source); Modified: sandbox/rick/newsource/interpreter/behaviour/VirtualFunctionTable.cpp =================================================================== --- sandbox/rick/newsource/interpreter/behaviour/VirtualFunctionTable.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/behaviour/VirtualFunctionTable.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -86,7 +86,7 @@ #include "CPPCode.hpp" #include "RexxHashTable.hpp" #include "ListClassTable.hpp" -#include "RexxSmartBuffer.hpp" +#include "SmartBuffer.hpp" #include "HashContents.hpp" #include "RexxVariable.hpp" #include "RexxVariableDictionary.hpp" @@ -141,13 +141,13 @@ #include "ParseTrigger.hpp" #include "ProgramSource.hpp" #include "RexxMemory.hpp" -#include "RexxInternalStack.hpp" +#include "InternalStack.hpp" #include "MemoryStack.hpp" #include "RexxActivity.hpp" #include "RexxActivation.hpp" #include "RexxNativeActivation.hpp" #include "RexxActivationStack.hpp" -#include "RexxEnvelope.hpp" +#include "Envelope.hpp" #include "LanguageParser.hpp" #include "Clause.hpp" #include "Token.hpp" @@ -377,7 +377,7 @@ objectPtr = new (objectLoc) ListTable(RESTOREIMAGE); virtualFunctionTable[T_ListTable] = getVftPointer(objectLoc); - objectPtr = new (objectLoc) RexxSmartBuffer(RESTOREIMAGE); + objectPtr = new (objectLoc) SmartBuffer(RESTOREIMAGE); virtualFunctionTable[T_SmartBuffer] = getVftPointer(objectLoc); objectPtr = new (objectLoc) HashContents(RESTOREIMAGE); @@ -608,7 +608,7 @@ objectPtr = new (objectLoc) RexxObject(RESTOREIMAGE); virtualFunctionTable[T_Memory] = getVftPointer(objectLoc); - objectPtr = new (objectLoc) RexxInternalStack(RESTOREIMAGE); + objectPtr = new (objectLoc) InternalStack(RESTOREIMAGE); virtualFunctionTable[T_InternalStack] = getVftPointer(objectLoc); objectPtr = new (objectLoc) LiveStack(RESTOREIMAGE); @@ -629,7 +629,7 @@ objectPtr = new (objectLoc) RexxActivationFrameBuffer(RESTOREIMAGE); virtualFunctionTable[T_ActivationFrameBuffer] = getVftPointer(objectLoc); - objectPtr = new (objectLoc) RexxEnvelope(RESTOREIMAGE); + objectPtr = new (objectLoc) Envelope(RESTOREIMAGE); virtualFunctionTable[T_Envelope] = getVftPointer(objectLoc); objectPtr = new (objectLoc) LanguageParser(RESTOREIMAGE); Modified: sandbox/rick/newsource/interpreter/classes/ArrayClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ArrayClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ArrayClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -127,7 +127,7 @@ // a dimension array so dimension cannot be changed later. if (totalSize == 0) { - temp->dimensions = new_array(IntegerZero); + temp->dimensions = new (1) NumberArray(1); } // finish the class initialization and init calls. @@ -171,7 +171,7 @@ ArrayClass *ArrayClass::createMultidimensional(RexxObject **dims, size_t count, RexxClass *classThis) { // Working with a multi-dimension array, so get a dimension array - Protected<ArrayClass> dim_array = new_array(count); + Protected<NumberArray> dim_array = new (count) NumberArray(count); // we need to calculate total size needed for this array // since we multiply each additional size in, start with a zeroth size of 1 @@ -195,7 +195,7 @@ // add this to our dimensions array, using a new integer object so // we know what is there. - dim_array->put(new_integer(currentSize), i + 1); + dim_array->put(currentSize, i + 1); } // a final sanity check for out of bounds @@ -410,7 +410,7 @@ * * @param envelope The envelope we're flattening into. */ -void ArrayClass::flatten(RexxEnvelope *envelope) +void ArrayClass::flatten(Envelope *envelope) { setUpFlatten(ArrayClass) @@ -1053,7 +1053,7 @@ else { // return a copy of the dimensions array - return dimensions->copy(); + return dimensions->toArray(); } } @@ -1117,7 +1117,7 @@ // return the specific dimension value else { - return dimensions->get(position); + return new_integer(dimensions->get(position)); } } } @@ -1347,7 +1347,7 @@ position = positionArgument(value, argPosition + i); // get the current dimension - size_t dimension = ((RexxInteger *)dimensions->get(i))->getValue(); + size_t dimension = *dimensions[i]; // is this position larger than the current dimension? Check how // the out of bounds situation should be handled. if (position > dimension) @@ -2124,12 +2124,10 @@ // do work with. idx--; // get the number of dimensions specified. - size_t dims = dimensions(); + size_t dims = dimensions->size(); // get an array we fill in as we go - ArrayClass * index = new_array(dims); + Protected<ArrayClass> index = new_array(dims); - ProtectedObject p(index); - for (size_t i = dims; i > 0; i--) { // get the next dimension size @@ -2242,7 +2240,7 @@ { return 0; } - return (size_t)((RexxInteger *)dimensions->get(i))->value(); + return dimensions->get(i); } @@ -2296,7 +2294,7 @@ // to be applied when we return back if (newDimSize > oldDimSize) { - for (size_t i = newArray->dimensions(), skipAmount = 1; i > newDimension; i--) + for (size_t i = newArray->getDimensions(), skipAmount = 1; i > newDimension; i--) { skipAmount *= newArray->dimensionSize(i); } @@ -2325,11 +2323,10 @@ void ArrayClass::extendMulti(RexxObject **index, size_t indexCount, size_t argPosition) { // our new dimensions array will be the same as the number of indexes. - Protected<ArrayClass> newDimArray = new_array(indexCount); - ProtectedObject p(newDimArray); + Protected<NumberArray> newDimArray = new (indexCount) NumberArray(indexCount); // used for optimizing the copy operations - size_t firstChangedDimensions = dimensions() + 1; + size_t firstChangedDimensions = getDimensions() + 1; // extending from a single dimension into multi-dimension? // the subscripts determine everything. @@ -2345,7 +2342,7 @@ // parse them as position arguments. Validate each one // and just copy into the dimensions array size_t dimensionSize = positionArgument(index[i], i + 1); - newDimArray->put(new_integer(dimensionSize), i + 1); + newDimArray->put(dimensionSize, i + 1); } } else @@ -2375,7 +2372,7 @@ // Now create the new array for this dimension. This also // creates the dimensions array in the new array - Protected<ArrayClass> newArray = new_array(indexCount, newDimArray->data()); + Protected<ArrayClass> newArray = new_array(indexCount, newDimArray); // anything in the original? @@ -2388,7 +2385,7 @@ size_t accumSize = 1; // For all dimensions before the first to change, we can // move things in bulk.... - for (size_t i = dimensions(); i > firstChangedDimension; i--) + for (size_t i = getDimensions(); i > firstChangedDimension; i--) { accumSize *= dimensionSize(i); } Modified: sandbox/rick/newsource/interpreter/classes/ArrayClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ArrayClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ArrayClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -44,6 +44,7 @@ #ifndef Included_ArrayClass #define Included_ArrayClass +#include "NumberArray.hpp" /** * The implementation of the Rexx Array class. @@ -150,7 +151,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope *); + virtual void flatten(Envelope *); virtual RexxObject *copy(); @@ -192,7 +193,8 @@ RexxObject *itemsRexx(); RexxObject *dimensionRexx(RexxObject *); RexxObject *getDimensionsRexx(); - size_t getDimension(); + size_t getDimensions() { return dimensions == OREF_NULL ? 1 : dimensions->size(); } + size_t dimensionSize(size_t i) { return dimensions->get(i); } SupplierClass *supplier(); RexxObject *join(ArrayClass *); ArrayClass *extend(size_t); @@ -318,7 +320,7 @@ size_t maximumSize; // The allocation size of the array size_t lastItem; // location of last set element size_t itemCount; // the count of items in the array - ArrayClass *dimensions; // Array containing dimensions - null if 1-dimensional + NumberArray *dimensions; // Array containing dimensions - null if 1-dimensional ArrayClass *expansionArray; // actual array containing data (will be self-referential originall) RexxInternalObject *objects[1]; // the start of the array of stored objects. }; Modified: sandbox/rick/newsource/interpreter/classes/ClassClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ClassClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ClassClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -157,7 +157,7 @@ * * @return A string proxy name for this object. */ -RexxObject *RexxClass::makeProxy(RexxEnvelope *envelope) +RexxObject *RexxClass::makeProxy(Envelope *envelope) { return new_proxy(id->getStringData()); } @@ -411,9 +411,9 @@ } - /** - * Add a full table of methods to a class definition. + * Add a full table of methods to a class definition. This is + * only used during the initial image build. * * @param newMethods The new methods to add. */ @@ -433,12 +433,42 @@ method = OREF_NULL; } // define this method - behaviour->define(method_name, OREF_NULL); + behaviour->define(method_name, method); } + return OREF_NULL; } /** + * Inherit the instance methods from another class definition. + * This is not an true inherit operation where the class is part + * of the hierarchy. This directly grabs the instance methods + * defined directly by the other class and merges them into the + * class method dictionary. This is a special method that is + * only done during the initial image build. + * + * @param newMethods The new methods to add. + */ +void RexxClass::inheritInstanceMethods(RexxClass *source) +{ + MethodDictionary *sourceMethods = source->instanceMethodDictionary; + + // loop through the table with an iterator. + HashContents::TableIterator iterator = sourceMethods->iterator(); + + while (iterator.isAvailable()) + { + // get the name and the value, then add to this class object + RexxString *methodName = (RexxString *)iterator.index(); + // if this is the Nil object, that's an override. Make it OREF_NULL. + RexxObject *method = (MethodClass *)iterator.value(); + // define this method + behaviour->define(methodName, method); + } +} + + +/** * Retrieve a class default name value...this is composed * from the class id value. * Modified: sandbox/rick/newsource/interpreter/classes/ClassClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ClassClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ClassClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -66,7 +66,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual RexxObject *makeProxy(RexxEnvelope*); + virtual RexxObject *makeProxy(Envelope*); virtual bool isEqual(RexxObject *); HashCode hash(); @@ -83,7 +83,9 @@ ArrayClass *getSuperClasses(); ArrayClass *getClassSuperClasses() { return classSuperClasses; } ArrayClass *getSubClasses(); - void defineMethods(TableClass *); + RexxObject *defineMethods(TableClass *); + RexxObject *inheritMethods(RexxClass *); + void setInstanceBehaviour(RexxBehaviour *); TableClass *getInstanceBehaviourDictionary(); TableClass *getBehaviourDictionary(); Modified: sandbox/rick/newsource/interpreter/classes/ContextClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ContextClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ContextClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -123,7 +123,7 @@ * * @param envelope The flattening envelope. */ -void RexxContext::flatten(RexxEnvelope *envelope) +void RexxContext::flatten(Envelope *envelope) { setUpFlatten(RexxContext) Modified: sandbox/rick/newsource/interpreter/classes/ContextClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ContextClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ContextClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -60,7 +60,7 @@ void live(size_t); void liveGeneral(MarkReason reason); - void flatten(RexxEnvelope*); + void flatten(Envelope*); RexxContext(RexxActivation *); inline RexxContext(RESTORETYPE restoreType) { ; }; Modified: sandbox/rick/newsource/interpreter/classes/DirectoryClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/DirectoryClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/DirectoryClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -95,7 +95,7 @@ * * @param envelope The envelope we're flattening into. */ -void DirectoryClass::flatten(RexxEnvelope *envelope) +void DirectoryClass::flatten(Envelope *envelope) { setUpFlatten(DirectoryClass) Modified: sandbox/rick/newsource/interpreter/classes/DirectoryClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/DirectoryClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/DirectoryClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -61,7 +61,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope *); + virtual void flatten(Envelope *); virtual RexxObject *copy(); Modified: sandbox/rick/newsource/interpreter/classes/IntegerClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/IntegerClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/IntegerClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -109,7 +109,7 @@ memory_mark_general(stringrep); } -void RexxInteger::flatten(RexxEnvelope *envelope) +void RexxInteger::flatten(Envelope *envelope) /******************************************************************************/ /* Function: Flatten an object */ /******************************************************************************/ Modified: sandbox/rick/newsource/interpreter/classes/IntegerClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/IntegerClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/IntegerClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -63,7 +63,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope*); + virtual void flatten(Envelope*); virtual HashCode getHashValue(); bool numberValue(wholenumber_t &result, size_t precision); Modified: sandbox/rick/newsource/interpreter/classes/ListClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ListClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ListClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -154,7 +154,7 @@ * * @param envelope The envelope we're flattening into. */ -void ListClass::flatten(RexxEnvelope *envelope) +void ListClass::flatten(Envelope *envelope) { setUpFlatten(ListClass) Modified: sandbox/rick/newsource/interpreter/classes/ListClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ListClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ListClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -58,7 +58,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope *); + virtual void flatten(Envelope *); virtual void RexxObject *copy(); virtual ArrayClass *makeArray(); Modified: sandbox/rick/newsource/interpreter/classes/MessageClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/MessageClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/MessageClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -154,7 +154,7 @@ * * @param envelope The envelope that will hold the flattened object. */ -void MessageClass::flatten(RexxEnvelope *envelope) +void MessageClass::flatten(Envelope *envelope) { setUpFlatten(MessageClass) Modified: sandbox/rick/newsource/interpreter/classes/MessageClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/MessageClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/MessageClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -73,7 +73,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope *); + virtual void flatten(Envelope *); RexxObject *notify(MessageClass *); RexxObject *result(); Modified: sandbox/rick/newsource/interpreter/classes/MethodClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/MethodClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/MethodClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -138,7 +138,7 @@ * * @param envelope The envelope that will hold the flattened object. */ -void MethodClass::flatten(RexxEnvelope *envelope) +void MethodClass::flatten(Envelope *envelope) { setUpFlatten(MethodClass) Modified: sandbox/rick/newsource/interpreter/classes/MethodClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/MethodClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/MethodClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -72,12 +72,12 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope*); + virtual void flatten(Envelope*); void run(RexxActivity *, RexxObject *, RexxString *, RexxObject **, size_t, ProtectedObject &); MethodClass *newScope(RexxClass *); void setScope(RexxClass *); - RexxSmartBuffer *saveMethod(); + SmartBuffer *saveMethod(); RexxObject *setUnguardedRexx(); RexxObject *setGuardedRexx(); RexxObject *setPrivateRexx(); Modified: sandbox/rick/newsource/interpreter/classes/MutableBufferClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/MutableBufferClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/MutableBufferClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -188,7 +188,7 @@ } -void MutableBuffer::flatten(RexxEnvelope *envelope) +void MutableBuffer::flatten(Envelope *envelope) /******************************************************************************/ /* Function: Flatten a mutable buffer */ /******************************************************************************/ Modified: sandbox/rick/newsource/interpreter/classes/MutableBufferClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/MutableBufferClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/MutableBufferClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -61,7 +61,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope *envelope); + virtual void flatten(Envelope *envelope); RexxObject *copy(); void ensureCapacity(size_t addedLength); Modified: sandbox/rick/newsource/interpreter/classes/NumberStringClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/NumberStringClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/NumberStringClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -132,7 +132,7 @@ memory_mark_general(stringObject); } -void NumberString::flatten(RexxEnvelope *envelope) +void NumberString::flatten(Envelope *envelope) /******************************************************************************/ /* Function: Flatten an object */ /******************************************************************************/ Modified: sandbox/rick/newsource/interpreter/classes/NumberStringClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/NumberStringClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/NumberStringClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -96,7 +96,7 @@ virtual HashCode getHashValue(); void live(size_t); void liveGeneral(MarkReason reason); - void flatten(RexxEnvelope *); + void flatten(Envelope *); bool numberValue(wholenumber_t &result, size_t precision); bool numberValue(wholenumber_t &result); Modified: sandbox/rick/newsource/interpreter/classes/ObjectClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ObjectClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ObjectClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -45,7 +45,7 @@ #include "ObjectClass.hpp" #include "StringClass.hpp" #include "BufferClass.hpp" -#include "RexxSmartBuffer.hpp" +#include "SmartBuffer.hpp" #include "DirectoryClass.hpp" #include "RexxVariableDictionary.hpp" #include "ArrayClass.hpp" @@ -123,7 +123,7 @@ * * @param envelope the target envelope we're flatting in. */ -void RexxObject::flatten(RexxEnvelope *envelope) +void RexxObject::flatten(Envelope *envelope) { setUpFlatten(RexxObject) @@ -140,7 +140,7 @@ * * @return The proxy object, which is usually a name. */ -RexxObject * RexxInternalObject::makeProxy(RexxEnvelope *envelope) +RexxObject * RexxInternalObject::makeProxy(Envelope *envelope) { // we are generally only called if the class is marked as a proxy class. // we recognize .nil, but don't handle any other special objects here. Modified: sandbox/rick/newsource/interpreter/classes/ObjectClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/ObjectClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/ObjectClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -52,9 +52,8 @@ class RexxBehaviour; class RexxCompoundTail; class RexxCompoundElement; -class RexxInternalStack; class SupplierClass; -class RexxEnvelope; +class Envelope; class RexxVariableDictionary; class NumberString; class MethodClass; @@ -186,8 +185,8 @@ // are defined at this level. virtual void live(size_t) {;} virtual void liveGeneral(MarkReason reason) {;} - virtual void flatten(RexxEnvelope *) {;} - virtual RexxObject *unflatten(RexxEnvelope *) { return (RexxObject *)this; }; + virtual void flatten(Envelope *) {;} + virtual RexxObject *unflatten(Envelope *) { return (RexxObject *)this; }; }; class RexxObject; @@ -301,7 +300,7 @@ inline bool isSameType(RexxInternalObject *o) { return behaviour == o->getObjectType(); } inline void setBehaviour(RexxBehaviour *b) { behaviour = b; } - virtual RexxObject *makeProxy(RexxEnvelope *); + virtual RexxObject *makeProxy(Envelope *); virtual RexxObject *copy(); virtual RexxObject *evaluate(RexxActivation *, RexxExpressionStack *) { return OREF_NULL; } virtual RexxObject *getValue(RexxActivation *) { return OREF_NULL; } @@ -441,7 +440,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope *); + virtual void flatten(Envelope *); RexxObject *copy(); HashCode hash(); Modified: sandbox/rick/newsource/interpreter/classes/PackageClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/PackageClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/PackageClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -106,7 +106,7 @@ } -void PackageClass::flatten(RexxEnvelope *envelope) +void PackageClass::flatten(Envelope *envelope) { setUpFlatten(PackageClass) Modified: sandbox/rick/newsource/interpreter/classes/PackageClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/PackageClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/PackageClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -60,7 +60,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope*); + virtual void flatten(Envelope*); static void createInstance(); static RexxClass *classInstance; Modified: sandbox/rick/newsource/interpreter/classes/RoutineClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/RoutineClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/RoutineClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -55,7 +55,7 @@ #include "DirectoryClass.hpp" #include "ProtectedObject.hpp" #include "BufferClass.hpp" -#include "RexxSmartBuffer.hpp" +#include "SmartBuffer.hpp" #include "ProgramMetaData.hpp" #include "Utilities.hpp" #include "PackageManager.hpp" @@ -136,7 +136,7 @@ * * @param envelope The envelope that will hold the flattened object. */ -void RoutineClass::flatten(RexxEnvelope *envelope) +void RoutineClass::flatten(Envelope *envelope) { setUpFlatten(RoutineClass) @@ -286,7 +286,7 @@ // detach the source from this routine object before saving detachSource(); - RexxEnvelope *envelope = new RexxEnvelope; + Envelope *envelope = new Envelope; ProtectedObject p(envelope); // now pack into an envelope; return envelope->pack(this); @@ -371,7 +371,7 @@ RoutineClass *RoutineClass::restore(BufferClass *buffer, char *startPointer, size_t length) { // get an envelope and puff up the object - Protected<RexxEnvelope> envelope = new RexxEnvelope; + Protected<Envelope> envelope = new Envelope; envelope->puff(buffer, startPointer, length); // the envelope receiver object is our return value. return (RoutineClass *)envelope->getReceiver(); Modified: sandbox/rick/newsource/interpreter/classes/RoutineClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/RoutineClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/RoutineClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -57,7 +57,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope*); + virtual void flatten(Envelope*); virtual void call(RexxActivity *, RexxString *, RexxObject **, size_t, RexxString *, RexxString *, int, ProtectedObject &); virtual void call(RexxActivity *, RexxString *, RexxObject **, size_t, ProtectedObject &); Modified: sandbox/rick/newsource/interpreter/classes/StackFrameClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/StackFrameClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/StackFrameClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -144,7 +144,7 @@ memory_mark_general(objectVariables); } -void StackFrameClass::flatten(RexxEnvelope *envelope) +void StackFrameClass::flatten(Envelope *envelope) /******************************************************************************/ /* Function: Flatten an object */ /******************************************************************************/ Modified: sandbox/rick/newsource/interpreter/classes/StackFrameClass.hpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/StackFrameClass.hpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/StackFrameClass.hpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -59,7 +59,7 @@ virtual void live(size_t); virtual void liveGeneral(MarkReason reason); - virtual void flatten(RexxEnvelope*); + virtual void flatten(Envelope*); static void createInstance(); static RexxClass *classInstance; Modified: sandbox/rick/newsource/interpreter/classes/StemClass.cpp =================================================================== --- sandbox/rick/newsource/interpreter/classes/StemClass.cpp 2014-07-20 19:23:12 UTC (rev 10318) +++ sandbox/rick/newsource/interpreter/classes/StemClass.cpp 2014-07-20 23:31:08 UTC (rev 10319) @@ -86,19 +86,21 @@ } +/** + * Copy a stem collection object. + * + * @return A copy of the stem object. + */ RexxObject *StemClass::copy() -/******************************************************************************/ -/* Function: Copy a stem collection object */ -/******************************************************************************/ { - /* make a copy of ourself (this also */ - /* copies the object variables */ - StemClass *newObj = (StemClass *)this->RexxObject::copy(); - ProtectedObject p(newObj); - newObj->copyFrom(tails); /* have the tail table copy itself */ - return newObj; /* return the new object */ + // do the base object copy + Protected<StemClass> newObj = (StemClass *)RexxObject::copy(); + // have the object copy the tail table + newObj->copyFrom(tails); + return newObj; } + /** * Copy the tails from another stem object into this stem. * @@ -106,15 +108,20 @@ */ void StemClass::copyFrom(RexxCompoundTable &_tails) { + // initialize the tails so that it points back to the correct parent + // table. tails.init(this); + // and perform the copy operation tails.copyFrom(_tails); } +/** + * Generalized object marking. + * + * @param reason The reason for this live marking operation. + */ void StemClass::live(size_t liveMark) -/******************************************************************************/ -/* Function: Normal garbage collection live marking */ -/******************************************************************************/ { memory_mark(value); memory_mark(stemName); @@ -122,10 +129,13 @@ markCompoundTable(); } + +/** + * Generalized object marking. + * + * @param reason The reason for this live marking operation. + */ void StemClass::liveGeneral(MarkReason reason) -/******************************************************************************/ -/* Function: Generalized object marking */ -/******************************************************************************/ { memory_mark_general(value); memory_mark_general(stemName); @@ -133,39 +143,45 @@ markGeneralCompoundTable(); } -void StemClass::flatten(RexxEnvelope *envelope) -/******************************************************************************/ -/* Function: Flatten an object */ -/******************************************************************************/ + +/** + * Flatten the table contents as part of a saved program. + * + * @param envelope The envelope we're flattening into. + */ +void StemClass::flatten(Envelope *envelope) { - setUpFlatten(StemClass) + setUpFlatten(StemClass) - flattenRef(value); - flattenRef(stemName); - flattenRef(objectVariables); - flattenCompoundTable(); + flattenRef(value); + flattenRef(stemName); + flattenRef(objectVariables); + flattenCompoundTable(); - cleanUpFlatten + cleanUpFlatten } -void StemClass::setValue( - RexxObject *_value) /* new variable value */ -/******************************************************************************/ -/* Function: Set a new stem default value */ -/******************************************************************************/ + +/** + * Set a new stem default value. + * + * @param _value The new value to set. + */ +void StemClass::setValue(RexxObject *_value) { - OrefSet(this, this->value, _value); /* set the new value */ - this->dropped = false; /* now have an explict value */ + setField(value, _value); // set the new value + dropped = false; // now have an explict value } + +/** + * Drop the stem value and revert to the default initial name. + */ void StemClass::dropValue() -/******************************************************************************/ -/* Function: Drop a stem value -- this reinitializes it */ -/******************************************************************************/ { - /* reset to the default value */ - OrefSet(this, this->value, this->stemName); - this->dropped = true; /* no explict value any more */ + // revert back to the default stem value of the stem name. + setField(value, stemName); + dropped = true; // we no longer have an explicit value } @@ -180,42 +196,47 @@ } -RexxObject *StemClass::unknown( - RexxString *msgname, /* unknown message name */ - ArrayClass *arguments) /* message arguments */ +/** + * Forward an unknown method to the default stem value. + * + * @param msgname The message name. + * @param arguments The unknown a... [truncated message content] |