
Last modified: Fri Sep 30 01:36:02 1994
By: Juki <jtv@hut.fi>

The GPC compiler does not yet implement the whole ISO 7185 Pascal
standard, so please take this into account when you consider
using this for any purpose.

See the file version.c to find out the version number of this GPC
(or run gpc -v)

Problems in this GPC version:

	- type checking is mostly what C does, not what Pascal requires,
	  so GPC does not yet implement a strongly typed language.
	  Although correct programs compile, incorrect ones compile also.

	- run time errors are not checked.

	- the inline set operations have some problems
	  with operations on two sets if the sets do not contain
	  equally many segments.

	  In addition, the set code generated in the alpha causes
	  runtime runtime errors in the generated code.

	  I'm fixing the remaining bugs in setop.c,
	  but I wanted to get this version out so you can play with it.

	- No GPC texinfo file exists yet. See GPC.GUIDE instead.

	- Error recovery on parse errors could still be better.

	- Conformant arrays don't yet work very well.
	  Until they do, this is a LEVEL-0 compiler.

	- On a HP-PA Snake gcc routines generate incorrect
	  label type for non-local gotos. I reported this problem,
	  it will be fixed in the next (or the one after that)
	  release. (I have not checked if this is still true in 2.6)

	- BUG: the following program is not compiled correctly

	       program zap;
	       type
		 node = integer;
	       procedure foo;
	       type
		 p = ^node;	 (* GPC takes the upper scope type  *)
		 node = boolean; (*  but it should use this instead *)
	       var
		 ptr : p;
	       begin
	       end.

	  The problem is that GPC currently thinks the NODE is
	  of type integer when the ^node is used in the definition
	  of P. However, this is not the case. The P is a pointer
	  to a BOOLEAN type as the "node of type integer" is excluded
	  from the type definition part of FOO. This affect
	  also structured types with pointers. Sigh.

Inconveniences:

	- NEW & DISPOSE optional tag field arguments are ignored
	  (warning given, code works)

	- GDB does not yet understand pascal sets, files or subranges.
	  Now GDB allows you to debug these things, even though it does
	  not yet understand some stabs.

	- PACKED does not pack. (This is not a bug, it's implementation
	  dependent)

	- TYPE foo=^foo; is badly implemented, and although it
	  passes the conformance tests it gives a warning.
	  I could disable the warning, but I want to fix the
	  implementation.

	- cpp is not used for Pascal programs, since cccp does not
	  recognize Pascal comments (a single apostrophe inside a
	  comment prevents compilation). Until I get to fix it,
	  we have to live without macros and includes.

Note for debugging:

	- When debugging, please note that the Initial Letter
	  In Each Identifier Is In Upper Case And The Rest
	  Are In Lower Case. If  you wish to call C-routines
	  declare them with the "C" directive, as follows:

		procedure FooBAR(i:integer);c;

	  This makes the external name to be "_foobar"
	  (replace "_" with you machine prefix.)

		Procedure FooBAR(i:Integer); External;

	  Uses external name "_Foobar".

	  It is done like this to reduce name clashes	
	  with libc.a and other possible libraries.

	  All visible GPC runtime system library routines are
	  named "_p_....".
