This function creates a new mortal and copies the argument pVar into this new mortal.
pFixSizeMemoryObject memory_DupVar(pMemoryObject pMo,
pFixSizeMemoryObject pVar,
pMortalList pMyMortal,
int *piErrorCode
){
This function is vital, when used in operations that convert the
values to long or double. Expression evaluation may return an immortal
value, when the expression is a simple variable access. Conversion of the
result would modify the value of the variable itself. Therefore functions and
operators call this function to duplicate the result to be sure that the value
they convert is mortal and to be sure they do not change the value of a variable
when they are not supposed to.
Note that you can duplicate long, double and string values, but you can not duplicate arrays! The string value is duplicated and the characters are copied to the new location. This is perfect. However if you do the same with an array the array pointers will point to the same variables, which are not going to be duplicated. This result multiple reference to a single value. This situation is currently not supported by this system as we do not have either garbage collection or any other solution to support such memory structures.