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 attribute
s (@)
--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