Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!csd4.milw.wisc.edu!lll-winken!uunet!yale!jellinghaus-robert From: jellinghaus-robert@CS.Yale.EDU (Rob Jellinghaus) Newsgroups: comp.lang.eiffel Subject: Copy semantics for expanded types Message-ID: <61105@yale-celray.yale.UUCP> Date: 19 May 89 06:17:00 GMT Sender: root@yale.UUCP Reply-To: jellinghaus-robert@CS.Yale.EDU (Rob Jellinghaus) Organization: Yale University Computer Science Dept, New Haven CT 06520-2158 Lines: 65 The expanded type facility (defined in a previous posting) seems like a tremndously useful and powerful extension to the language. But I have a question: In the document as posted, it says that a feature invocation of the form "a.Copy(b)" will copy the fields of b onto those of a, if both a and b are of expanded type. But consider the following: expanded class X export i, set_i feature i: INTEGER; set_i(a: like i) is do i := a end end -- class X expanded class Y export i, set_i, j, set_j inherit X feature j: INTEGER; set_j(a: like j) is do j := a end end -- class Y Now if we assume a is of type X and b of type Y, and we perform a.Copy(b), what happens to b's j attribute? I assume it is not copied? (The call is allowed, as b's type is a descendant of a's.) Now what if Y is redefined as expanded class Y export i, set_i inherit X redefine i feature i: REAL end -- class Y Now the problem with a.Copy(b) is obvious. How can one copy a real onto an integer field? The call is still valid, but it is not clear to me what Eiffel will do in this situation. I eagerly await clarification (and version 2.2 documentation). On another note: will it be possible, in version 2.2, to create an object of some type which is only known at runtime? For example, if I determine (using the hazardous class INTERNAL) that some object a has type denoted by "class_name(a)", how can I define some object b with that same type, and then (for example) do "b.Copy(a)"? (This could be useful if one is attempting to implement a STORABLE class with extensions, or if one simply wants to be able to duplicate generic objects at runtime.) Thanks for your assistance. Rob Jellinghaus | "Next time you see a lie being spread or a jellinghaus-robert@CS.Yale.EDU | bad decision being made out of sheer ignor- ROBERTJ@{yalecs,yalevm}.BITNET | ance, pause, and think of hypertext." {everyone}!decvax!yale!robertj | -- K. Eric Drexler, _Engines of Creation_