GPC's new or changed features since the last (non alpha/beta) GPC release are listed here. Items without further description refer to new routines, variables or options.
Features implemented for compatibility to other compilers are marked
with, e.g., (B) for BP compatibility.
A few old and obsolete features have been dropped or replaced by
cleaner, more flexible or otherwise more useful ones. This might
lead to minor problems with old code, but we suppose they're rare
and easy to overcome. Backward-incompatible changes are marked with
(@).
Exit with an argument (non-local exits not yet supported) (fjf988*.pas) (U)
--[no-]propagate-units (on by default with --mac-pascal, off in other dialects) (fjf987*.pas) (M)
Pointer in --mac-pascal mode (Mac Pascal has a Pointer function which does the same as a type-cast to Pointer; though adding Pointer as a type allows more, it's backward-compatible) (M)
& and | (shortcut and and or) (fjf981*.pas) (M)
Leave and Cycle (equivalent to Break and Continue) (avo3.pas) (M)
WriteLn (... string_constant) and Write (... string_constant, string_constant ...)
BindingType is now a packed record as EP demands (fjf975a.pas) (E)
gp: PC now sets the compiler for both Pascal and C unless CC is set explicitly
Discard
Integer, Word, Cardinal are now equivalent to PtrInt, PtrWord, PtrCard, no more (necessarily) to C's int and unsigned int (@)
CInteger, CWord, CCardinal
GPC_PAGESIZE to set the page size when building the manual (PDF, PostScript, DVI)
qualified and import lists are no more allowed after uses (only after import, as EP demands) (@)
GMP unit doesn't support gmp-2.x anymore (if you used it, just upgrade to a newer GMP version) (@)
forward declarations and interfaces) are checked stricter: if one has a result variable, so must the other (according to the OOE draft) (@) (O)
Pipe unit was renamed to Pipes because of a name conflict (@)
() (chief54*.pas, delphi6*.pas) (D)
mpf_sin, mpf_cos
gpc.log and gpc.sum in the p/test/ directory; other available test targets are pascal.check-short and pascal.check-long (@)
-W[no-]dynamic-arrays (fjf931*.pas)
_p_initialize (@)
UMask
--no-debug-source
CompilerAssert (fjf904*.pas)
--[no]-assert renamed to --[no]-assertions (necessary to avoid a conflict with GCC) (@)
--[no-]range-checking, also as short compiler directives {$R+}/{$R-} (default is on) (C, E, B, @)
--[no-]methods-always-virtual (fjf903*.pas) (M)
--[no-]pointer-arithmetic, --[no-]cstrings-as-strings, -W[no-]absolute (all of which --[no-]extended-syntax implies)
Integer2StringBase, Integer2StringBaseExt
NumericBaseDigits, NumericBaseDigitsUpper
p/test/fjf451h.pas) (B)
-W[no-]object-assignment
--borland-pascal) if a virtual method overrides a non-virtual one (chief52*.pas)
--maximum-field-alignment does not apply to packed records
ArcSin, ArcCos
EQPad etc.) (fjf873.pas)
-W[no-]interface-file-name
SeekEOF and SeekEOLn use Input implicitly when no file is given (fjf871.pas) (B)
with statements (tom6.pas) <200012022215.eB2MFD614424@wsinpa16.win.tue.nl> (Sun Pascal)
--sun-pascal
-W[no-]field-name-problem removed, @)
published, public (both equivalent), protected (scope limited to object type and derived object types), private (scope limited to current unit/module) (fjf864*.pas) (options -W[no-]object-directives removed, @)
+ and - is now as defined in EP by default (and as in BP with --borland-pascal) <Pine.LNX.4.44.0210251249500.6181-100000@duch.mimuw.edu.pl> (fjf863*.pas) (@)
Integer (16) etc. changed to Integer attribute (Size = 16) (works for integer and Boolean types) (fjf861.pas) (@)
;) (fjf860*.pas)
--borland-pascal mode, Assign unconditionally (re-)initializes its file parameter (fjf858.pas) (B)
gpm files anymore (instead, each module has an implicit modulename-all.gpi interface which is a regular gpi file)
static in C sense), omit them if easily possible
-W[no-]parentheses (fjf848*.pas)
interface modules with empty implementation part (pmod1.pas, fjf843.pas)
maximum-field-alignment and [no-]field-widths work as local compiler directives now (fjf842.pas)
{$debug-statement} (should not be necessary anymore, now that debug info mostly works)
--[no-]longjmp-all-nonlocal-labels
iocritical (fjf824*.pas), ignorable (fjf839*.pas) for routines
goto (never worked for nonlocal goto into the main program, implementing it would be quite difficult, probably not worth it) (@)
AnyFile for parameters and pointer targets (fjf821*.pas)
TimeStamp is now a packed record as EP demands (fjf975b.pas) (E)
--interface-only does not require -S or -c anymore (and does not create an object file)
initialization, finalization (D)
TimeZone in TimeStamp counts seconds east of UTC now (not west, as before) (datetimedemo.pas) (@)
export Foo = all (...) (fjf811*.pas)
-W[no-]local-external (implied by -Wall)
pack-struct does not imply bit-level packing anymore (only explicit packed records and arrays do) (@)
--[no-]ignore-packed (--ignore-packed is the default in BP mode) (fjf796*.pas) (B) (@)
--maximum-field-alignment=N
{$[no-]pack-struct} as a compiler directive
attribute for routines doesn't imply forward anymore (so you don't have to declare routines twice in a program or implementation part when setting the linker name or some other attribute) (@)
static, volatile and register for variables and inline for routines are no prefix-directives anymore, but attributes (@)
--extended-pascal --borland-pascal) doesn't work anymore (what should this mean, anyway? Combine the features, but also the warnings from both!?!?!?) (@)
external without name defaults to all-lowercase now (@)
c, c_language and asmname are deprecated (@)
external name 'foo' (fjf780.pas), external 'libname' name 'foo' (where libname is ignored) (B)
definec, macro, undefc, ifc, ifoptc, elsec, elifc, endc, errorc (treated as equivalent to the corresponding existing ones) (M)
implementation part (M)
--vax-pascal, --mac-pascal
const for variables and name for variables, routines and modules; assembler names and module/unit file names can now be expressions (which must yield string constants) (fjf781*.pas, fjf809*.pas)
gpidump and binobj are installed with GPC (B)
-W[no-]identifier-case, -W[no-]identifier-case-local (fjf751*.pas)
$R foo, equivalent to $L foo.resource (B)
--[no-]borland-char-constants (now simply coupled to dialect options) (@)
TEST_RUN_FLAGS=-p from the Makefile; -p in testgpc); see http://fjf.gnu.de/misc/progress-messages.tar.gz
= and <> comparisons of structures (arrays, records, ...) except strings and sets are forbidden now (@) (E)
foo in []; bar * []; Im (baz) if baz is of real type) are not necessarily evaluated anymore (which is allowed by the standard); instead, a warning is given if they have side-effects (@)
--[no-]ignore-garbage-after-dot (fjf735*.pas) (@)
-W[no-]implicit-io (fjf734*.pas)
--enable-keyword, --disable-keyword (fjf733*.pas)
CBoolean (fjf727.pas)
GetMem as a function with one parameter (only the BP compatible usage as a procedure with two parameters remains) (@)
FileMode now requires using the GPC (or, for BP compatibility, the System) unit (@)
DupHandle
__CLASSIC_PASCAL__, __STANDARD_PASCAL__, __EXTENDED_PASCAL__, __OBJECT_PASCAL__, __UCSD_PASCAL__, __BORLAND_PASCAL__, __DELPHI__, __PASCAL_SC__ and __GNU_PASCAL__ (one can use {$ifopt borland-pascal} etc. instead) (@)
Succ, Pred, Inc, Dec for real numbers (fjf714*.pas)
GPC_UNIT_PATH, GPC_OBJECT_PATH
-W[no-]float-equal
--ucsd-pascal
type foo = procedure (Integer, Real) (i.e., without parameter names) (@)
On to CRTSavePreviousScreen
SetUserID, SetGroupID
HeapChecking
Assert; new options --[no]-assert (also {$C+}, {$C-} for Delphi compatibility) (fjf665*.pas) (D)
ProcessGroup
QuoteEnum
CurrentRoutineName (fjf752.pas)
-e FILE and -E FILE (redirect/append standard error)
Have fun,
The GNU Pascal Development Team