--- Begin Message ---
Hi Peter,

Yes. More basically :
1) you compile a method with parameter anObject
2) you add an instance anObject
3) you try to modify/compile the method and you have a message error. 

Maybe there should be a kind of warning message

Abdelghani
--------------------------------------------
En date de : Lun 27.11.17, Peter Uhnák <i.uh...@gmail.com> a écrit :

 Objet: Re: [Pharo-users] Removing instance variables doesn't recompile the 
methods
 À: "Any question about pharo is welcome" <pharo-users@lists.pharo.org>
 Cc: "abdelghani ALIDRA" <alidran...@yahoo.fr>
 Date: Lundi 27 novembre 2017, 10h21
 
 As far as
 I know this has been a _feature_ for a very long
 time.Automatic recompiling methods is not the best
 idea, because:
 1) you
 compile a method with temp var "hello" that uses
 inst var "world"2) you add a inst var
 "hello"3) you remove
 "world"4) trying to recompile the
 method will fail, because suddenly there's a clash
 between temp var "hello" and inst var
 "hello"
 Don't forget that the methods
 are compiled, not interpreted. So this behavior is
 expected.
 Peter
 On Mon, Nov 27, 2017 at
 6:03 AM, Ben Coman <b...@openinworld.com>
 wrote:
 Thanks for reporting Abdelghani.Now it would
 be doubly useful if you could isolate which build introduced
 the problem.PharoLauncher can be used to help
 bisect working/non-working images.
 cheers -ben
 
 On 27 November 2017 at
 04:08, abdelghani ALIDRA via Pharo-users <pharo-users@lists.pharo.org>
 wrote:
 
 
 ---------- Forwarded message ----------
 From: abdelghani ALIDRA <alidran...@yahoo.fr>
 To: "pharo-users@lists.pharo.
 org" <pharo-users@lists.pharo.org>
 Cc: 
 Bcc: 
 Date: Sun, 26 Nov 2017 20:08:29 +0000 (UTC)
 Subject: Removing instance variables
 doesn't recompile the methods
 
 Hi,
 
 In
 a fresh pharo 6 image, I add a class with an instance
 variable x and implement accessors.
 Then
 I write a test method for the accessors of x
 MyClassTest>>testReadWriteX
    
 self assert (MyClass new x: 0) x equals: 0
 
 I
 run the test and obviously it is green
 
 BUT
 
 I
 remove the instance variable x. Obviously, the accessors are
 broken and the test should be red when I execute it again
 but it is not!!!
 
 I
 can even change the class again (to recompile it I thought)
 or even load the code in a new image and the tests are still
 green. 
 I
 can also invoque the broken methods in a playground or in an
 inspector : MyClass new x: 0; increment; x then printIt. and
 astonishingly 1 is printed.
 The
 only way to detect the error is to recompile the method but
 this does not happen (maybe it should) when instance
 variables are modified or removed in the class (even when
 you use the refactoring tool!) 
 
 I
 think this is annoying because one can no more really trust
 his tests.
 
 Cheers
 Abdelghani
 
 
 
 
 
 
 


--- End Message ---

Reply via email to