[comp.lang.eiffel] Bugs in Eiffel 2.2 Level A MicroVax/Ultrix

donnelly@cs.tcd.ie (Alexis Donnelly) (12/20/89)

We have received version 2.2 Level A, of Eiffel for a Microvax running 
Ultrix Version 3.0, and are evaluating the language. We have found the 
following few bugs, which I'm posting for the benefit of other Eiffel 
users out there.  
Anybody else encountered similar problems ? If you have, I would 
greatly appreciate an e-mail, if not a posting to this newsgroup. Many 
thanks in advance. Here goes with the bug-list:

  1. Hash sign as a character constant is not accepted.
     This bug has previously been reported to comp.lang.eiffel, but 
     not fixed yet. (Message-ID: <4503@vlot.cs.vu.nl> from jos@cs.vu.nl 
     <Jos Warmer>.) It causes the "cc-compilation" to fail.


  2. Compiler accepts the illegal character constant '\"'.
     The construct is accepted and appears to be valued as a backslash, except
     in inspect statements.  (see 5 below)


  3. _Deepcopy and _Deepequal are missing from 
      $INSTALLATION/Eiffel/files/_run_time.a
      The loader (ld) fails during the final part of the compilation (even of
      a simple hello world program), because it can't find the global symbols
      _Deepcopy and _Deepequal. 
      _run_time.a is supposed to supply these. These symbols are the names of
      externally visible routines in the support library (source file 
      $INSTALLATION/Eiffel/files/_deep.c). If compiled correctly, _deep.c 
      should export these symbols as entry-points. However, they are not 
      in _run_time.a !!! _run_time.a in fact exports _DeepCopy and _DeepEqual !
      CURE:
       I deleted _deep.o from a copy of _run_time.a (using ar), and added the 
      new _deep.o (again with ar). (_deep.o was cc-compiled from _deep.c).
      I then used ranlib to re-build a 
      random-acces library. The new _run_time.a was placed in 
      $INSTALLATION/Eiffel/files and subsequent compiles have not failed in 
      this way since.
       I phoned ISE and spoke to John Sarkela. A mail describing how to fix 
      this (and other bugs they know of) is supposed to be underway. To date 
      I have not received anything yet !!!!!  What's happening guys ??? 
      BTW, the run-time library can be fully re-built using make -f _makeD,
      which can be found in the same sub-directory.
  

   4. The .out function of ANY doesn't appear to work for character constants.
      It works fine for variables though.
      Pass 4 cancels when it encouters the .out function invoked on a 
      character constant:
      ===================source: hello.e==================================
      class HELLO feature
      
      	Quote_char : CHARACTER is '\'';
      	Backslash_char : CHARACTER is '\\';
      	s : STRING;
      	c : CHARACTER;
      
      	Create is
      			-- Print Hello World
      		      do
      		  io.putstring("Hello World");
      		  io.new_line;
      		  io.putstring(Backslash_char.out); -- pass 4 cancels
      		  s.Create(3); 
      		  s := Backslash_char.out;  -- pass 4 cancels
      		  c := '?'; io.putstring(c.out); -- works fine
      		end -- Create
      
      end -- class HELLO
      ===================session log:=====================================
      Eiffel compilation manager
         (version 2.2 level A)
      Pass 1 on class hello
      	class hello: pass 2 output is older than pass 1 output
      Pass 2 on class hello
      	Interface may have changed.
      	class hello: pass 3 output is older than pass 2 output
      Pass 3 on class hello
      	class hello: pass 4 output is older than pass 3 output
      Pass 4 on class hello
      es: pass4 canceled
      ====================================================================
      The language manual seems to imply that this should work (p173).

   5. The compiler (pass 4) complains about when-constants in an inspect 
      being identical, when one of the when-constants is an illegal 
      character constant, but is accepted by the compiler and appears
      to work in many other situations. First noticed when compiling 
      $INSTALLATION/Eiffel/lexical/high_builder.e. (line 302)
      =======================source: hello.e============================
      class HELLO feature
      
      	TC1 : CHARACTER is '\"'; -- compiler accepts this illegal syntax
      	Quote_char : CHARACTER is '\'';
      	Backslash_char : CHARACTER is '\\';
      	scanning_char : CHARACTER;
      	c : CHARACTER;
      
      	Create is
      			-- Print Hello World
      		do
		  io.putstring("Hello World");
		  io.putchar(TC1); -- Double quote printed
		  io.putchar(Quote_char); -- Single quote printed
		  io.new_line;
		  inspect scanning_char
		  when Backslash_char then 
			io.putstring("Got a backslash\n")
		  when '\"' then -- complains here
			io.putstring("Got a double-quote\n")
		  else  io.putstring("Got something else\n")
		  end;
		  if Backslash_char = TC1 then -- everything else works OK
			io.putstring("They're the same\n")
	  	  else
			io.putstring("They're different\n")
		  end;
		  if Backslash_char = '\"' then
			io.putstring("They're the same\n")
	  	  else
			io.putstring("They're different\n")
		  end;
		  c := TC1; io.putstring(c.out); 
		  io.putchar(TC1); io.new_line;
		  c := Backslash_char; io.putstring(c.out); 
		  io.putchar(Backslash_char); io.new_line;
		  c := Quote_char; io.putstring(c.out); 
		  io.putchar(Quote_char); io.new_line;
		end -- Create

      end -- class HELLO
      =======================session log:===============================
      Eiffel compilation manager
         (version 2.2 level A)
      Pass 1 on class hello
      	class hello: pass 2 output is not available
      Pass 2 on class hello
      	Interface may have changed.
      	class hello: pass 3 output is older than pass 2 output
      Pass 3 on class hello
      	class hello: pass 4 output is not available
      Pass 4 on class hello
      "hello", 19: Inspect values appearing in different When clauses 
                        of an inspect instruction must be different.
      es: error in pass4
      ==================================================================


  6. "canceled" is spelt wrong in the output when ec cancels a particular
     compilation pass. It should be "cancelled" !!!

I have been in contact with Interactive Software Engineering (ISE)
re one of these bugs, but have not yet received a promised fix. 
I'd also like to know when the next release (with these bugs fixed) will 
be available, I have to date received no updates from the french distributor
(SOL in Paris), as per our maintenance agreement.

Despite, these implementation bugs I still think Eiffel is in many respects 
an elegant language.  The tools supplied with it are quite useful too.
Happy Christmas Eiffel NetLanders....


Alex Donnelly,
Distributed Systems Group, 
Department of Computer Science,
Trinity College Dublin.
Newsgroups: comp.lang.eiffel
Subject: Bugs
Expires: 
References: 
Sender: 
Reply-To: donnelly@cs.tcd.ie (Alexis Donnelly)
Followup-To: 
Distribution: world
Organization: DSG, Dept. of Comp.Sc., Trinity College, Dublin, Ireland.
Keywords: 

bertrand@eiffel.UUCP (Bertrand Meyer) (12/22/89)

<1989Dec19.165420.7477@cs.tcd.ie>, by donnelly@cs.tcd.ie (Alexis
Donnelly) includes a comment which is too tempting to pass:

>   6. "canceled" is spelt wrong in the output when ec cancels a particular
>      compilation pass. It should be "cancelled" !!!
> 

    Both the Unix ``spell'' command (which I wouldn't, however, trust
as the final arbiter) and my big ``Webster's Deluxe Unabridged
Dictionary'', Dorset & Baber, Second Edition, accept both ``cancelled''
and ``canceled''. (As an aside, the dictionary accepts ``spelt'' but the
Unix command rejects it!)

    This may be a case of British vs. American spelling,
although ``spell -b'' (``British usage'') also accepts both. This option
of ``spell'' is openly advertized as a fake, however. I don't have
a trustworthy British dictionary within reach of hand.

	This nitpicking is not a device to avoid answering the other
(non-grammatical) aspects of Prof. Donnelly's message. I or someone else
will post an answer shortly.
-- 
-- Bertrand Meyer
bertrand@eiffel.com

sommar@enea.se (Erland Sommarskog) (12/23/89)

Alexis Donnelly (donnelly@cs.tcd.ie) writes:
>  6. "canceled" is spelt wrong in the output when ec cancels a particular
>     compilation pass. It should be "cancelled" !!!

If I am to believe my grammar, "canceled" is perfectly correct
American English.
-- 
Erland Sommarskog - ENEA Data, Stockholm - sommar@enea.se
Mail me your votes on comp.lang.cobol. 

kim@helios.enea.se (Kim Wald`n) (01/03/90)

My reference "Engelsk universitetsgrammatik" by Svartvik and Sager,
which is the standard reference grammar used by the Swedish universities,
states (p 435):

	[... for verbs with non-stressed last syllable and for the adjective 
	`cruel', the ending `l' is doubled in British English, but
	NOT in American English:

		cancel	  cancelling    cancelled
		travel    travelling    travelled
		cruel     crueller      cruellest  
	]

So according to this work `canceled' is the correct spelling for Eiffel,
being developed in Santa Barbara, US, and `cancelled' would be inconsistent.

-- Kim Walden
Enea Data, Sweden
kim@enea.se