marc@eiffel.UUCP (Jean-Marc Nerson) (10/20/89)
An oversight in the preparation of the C files of the 2.2 Eiffel run-time will prevent ``deep_clone'' and ``deep_equal'' (the deep equality and deep copy routines, inherited by every class from the universal class ANY) from working properly. The bug can be fixed as follows in the Eiffel deliveries made so far. 1. Changes in kernel library ---------------------------- In Eiffel library file installation/Eiffel/library/kernel/any.e, change the name of the external C function called from deep_clone to Deepcopy (instead of DeepCopy). This means replacing the line c_deep_copy name "DeepCopy" language "C" by c_deep_copy name "Deepcopy" language "C" Similarly, the external function called by deep_equal should be Deepequal (instead of DeepEqual). This means replacing the line c_deep_copy name "DeepEqual" language "C" by c_deep_copy name "Deepequal" language "C" You may want to recompile ANY at this point. 2. Changes in run-time. ----------------------- 2.1 Edit the file installation/Eiffel/files/_deep.c and do the corresponding substitutions (one for each): DeepCopy -> Deepcopy DeepEqual -> Deepequal 2.2 In the same file, change the body of routine ``deepCopy'', as follows: ----------------------------------------------------------------------- static OBJPTR deepCopy(src, flag) OBJPTR src; BOOL flag; { /* 8 lines skipped */ } else { dst = Allocate(DType(src)); dst->info &= ungenmask; dst->info |= genmask & src->info; } /* ----> BEGIN: LINES ADDED */ #ifdef BSD bcopy((char *)Access(src), (char *)Access(dst), nrfields * _rt_40d); #endif #ifdef SYSTEMV memcpy((char *)Access(dst), (char *)Access(src), nrfields * _rt_40d); #endif /* ---> END */ } else dst = destination; EXPCOPY(dst,src); ..... ----------------------------------------------------------------------- 2.3 Finally, re-build your run-time system archive _run_time.a by running the following: If you are under BSD: make f _makeD "CFLAGS= -O -DBSD" If you are under SYSTEM V: make f _makeD "CFLAGS= -O -DSYSTEMV" -- Jean-Marc Nerson marc@eiffel.com