|
p1
Modula-2 |
|
Modula-2 compiler for Apple Macintosh supporting Mach-O as command line tool or Classic under MPW.
Implementing ISO standards IS 10514-1,2,3
Contents:
Detailed Product Description:
The Language
The language implemented by p1 Modula-2 is based on the ISO Standard IS 10514.
Besides the base languaged (IS 10514-1) it implements both existing extensions: IS 10514-2 (Generics)
and IS 10514-3 (Object Oriented Modula-2).
Furthermore it implements language extensions like special types for the Macintosh or dynamic arrays.
p1 Modula-2 is a full multi pass compiler and does not have language restrictions which were introduced
with single pass compilers (e.g. no need for FORWARD declarations).
p1 Modula-2 supports a very powerfull pragma system. Pragmas allow for conditional compilation (depending on command
line options, compiler switches, etc.), Language mixing (interfacing to C / C++ / assembler /
other languages suporting Mach-O conventions), check instruction generation, etc.
The Debugger
p1 Modula-2 includes a complete debugging environment at source level, i. e. all variables
are displayed with name and value according to their declared type. The last statement executed by
the interrupted coroutine is displayed in the source window with highlighting.
Vor applications navigating through your data and code is as simple as you would expect it from any Macintosh software:
You select the various objects with the mouse and you open complex structures by double clicking.
Lists, trees and other pointer or object connected structures can be easily traversed forward and backward
by simple mouse clicks. Double clicking a coroutine variable switches to its coroutine context.
You never need to remember and type any names. For command line tools the same features are supported,
nmavigation is done by the arrow keys and key sensitive menus.
For special cases you can even have a direct view on your Mac's memory in various formats.
Double clicking is also used to specify memory addresses:
Following a handle or a memory address is accomplished by just two double clicks.
The debugger supports breakpoints and single step (restriction: not available in version 8.1).
Breakpoints are simply set by mouse clicks in the source window and single step is a special menu command.
The debugging features are always available, there is no need to recompile the sources with
a special debug option. The necessary symbolic information is kept in special files and
the debugger code must be only linked to the application.
The debugger cooperates with the built in exception handling mechanism of p1 Modula-2. A special
dialog allows to specify which exceptions should be intercepted by the debugger before delivering
them to the programmed exception handler.
The Library
The compiler package includes the powerful and flexible ISO Standard Library with modules for I/O,
string handling, conversions and more. This package allows machine independent software development.
Special Modules enlarge the standard Libray to provide for additional file system functionality,
Input / Output of additional data types, special API access etc.
The Macintosh Interface
p1 Modula-2 provides for the complete Macintosh interface as defined in the "Universal Interfaces"
from Apple. To each file from the latest version of the Universal Interfaces corresponds a similar
Modula-2 definition file.
Additional data structures (upward compatible) are added to these files in central places where
Modula-2 offers more powerful language features than Pascal or C.
The Utilities
Two utilities, "GenMake" and "M2Cross", are provided to manage large software projects.
GenMake automatically creates a "MakeFile" for your p1 Modula-2 programs. Starting with the main module,
GenMake analyses the import lists of all used modules and generates dependency rules for your MakeFile.
In most cases this file can be passed as input the the "make" utility without any
manual changes
M2Cross also analyses module dependencies and creates a global cross-reference listing with
all exported names.
The p1 Modula-2 compiler package includes an additional MPW startup file which defines an edit
menu with support for several Modula-2 syntax constructs (PROCEDURE, IF, WITH, WHILE, ...).
Prices and Shipment:
| Prices | Euro |
| p1 Modula-2 V8.4 | 500,00 |
| Upgrade from V8.0, V8.1 to V8.4 | 250,00 |
| Upgrade from V8.2 to V8.4 | 150,00 |
| Upgrade from V8.3 to V8.4 | free |
| Upgrade from V7.3 or V8.4 | 350,00 |
| p1 Modula-2 V7.3 | 410,00 |
| p1 Modula-2 V7.3 and V8.4 | please ask |
The prices do not include taxes and shipment. For payment we accept
paypal orders and commonly used credit cards (please ask
for details). All products can be ordered directly from p1 GmbH.
Release Notes:
Release Notes Version 8.4
The main goal of version 8.4 is to support the new linker conventions introduced with Xcode 3.0
(available as a choice with Xcode 2.5).
Compiler
- By default the new linker conventions for Xcode 3.0 and above are observed. This
also generates position independant code.
- An issue with double declaration in C back end is fixed.
Examples
A new application example ("Pl0") is added to the examples folder.
Release Notes Version 8.3.x:
The main goal of version 8.3 is to give better support for universal binaries and cross
development. For this purpose new features have been added to the GenMake tool. All
tools are universal binaries themselves.
Compiler
- INT64 and CARD64 are now fully supported
- C back end got several improvements
- search path for library symbol files supports pc and i386 branch
Library
The library files for use with the C back end are now universal files.
Tools
The following features have been added to the GenMake tool:
- the new option -ARCH arch defines the target architecture ("ppc", "i386")
- the new option -SYSLIBROOT path adds "-syslibroot path" to the linker command to sepcify
the system library version you want to link against.
-
- the default file accepts the new line start 'U', which tells GenMake that this target is part of an
universal executable. Suboptions are
- P tells GenMake that PowerPC code is to be generated (overrides -ARCH)
- I tells GenMake that Intel code is to be generated (overrides -ARCH)
- C tells GenMake that the C back end is to be used (may be used with both architectures)
If 'U' ist specified in the default file, "ppc" resp. "i386" ist added to the
target name and a lipo command is generated that optionally combines both parts to the final
target.
Examples
The exmaples have been reworked to show the new features for building universal binaries.
Release Notes Version 8.2.x:
Release 8.2 reactivates and completes the C back end to allow compilation of universal binaries.
There are also several minor enhancements described in the according places below. For details
please refer the manual.
Compiler
- The C back end is available again. C sources are produced using the command line option -coutput.
- New command line option -arch to specify the target architecture. For assembler sources only ppc is valid.
- New pragma variable ARCH that reflects the current target architecture.
- Two new types are added to module SYSTEM:
- INT64: 64 bit integer values.
- CARD64: 64 bit cardinal values.
Both types are not yet fully implemented; only the operations +, -, and * are available. Convertions
to and from INTEGER and CARDINAL are done via VAL. These types are intended for use with huge files
and as a bootstrap basis for a full implementation in the next release.
Library
Besides some bug fixes in the Universal Definition files several new moduls / API interfaces have been added:
- CFLocale.DEF is a new API file to reflect CFLocale.h
- Module FSSeqFile is a brother to SeqFile for Carbon Applications. It uses FSSpecs (as returned from the file
dialogs) instead of name strings to identify files and is bases upon the MacOS file system calls instead
of the Unix calls used by SeqFile.
- Module FSRndFile file is a brother to RndFile like FSSeqFile above.
- Several bugs in CFStrings.DEF have been fixed (UniCharPtr instead of VAR CHAR).
- The Print Manager APIs (PM…) are now compiled for session mechanism.
Examples
Several examples including LibSoucres have additional Xcode projects to show how to build
Universal Carbon applications. See the readme files for detailed lists of necessary changes / considerations.
Release Notes Version 8.1.x:
Release 8.1 completes missing items that had to be newly introduced for working with Mac OS X.
In first place is the debugger for tools, but there are also several other additions.
Compiler
- The syntax of the error messages is now compatible with Xcode. Xcode is now able to process
the error messages and automathically position to the erraneous source line.
- Two new constants are added to module SYSTEM:
- SOURCEFILE: mirrors the name of the source file for this compilation unit.
- SOURCELINE: mirrors the actual line of code.
Library
The HIToolbox definition files have been added to the MacOS APIs:
- HIArchive.DEF
- HIGeometry.DEF
- HIObject.DEF
- HIShape.DEF
- HITextUtils.DEF
- HITheme.DEF
- HIToolbar.DEF
- HIView.DEF
Debugger
The debbuger is now available also for tools.
Restrictions:
- The use of break points and single step is not yet available.
Utilities
The scripts for linking, building simple tools etc. are extended for linkig tools with debugger.
Runtime
For tools, the signals "term" and "int" are caught and processed.
- term is mapped to HALT so the tool terminates regularely with the possibility to do any necessary shut down actions.
- int is processes iff the debugger is present. It is treated like a call to BREAK.
Examples
Several examples including LibSoucres have additional Xcode projects to show the Xcode capabilities of p1 Modula-2.
Release Notes Version 8.1.1
Release 8.1.1 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- For sets with a size of n*4 + 3 bytes compare operations produced wrong results.
Release Notes Version 8.1.2
Release 8.1.2 fixes two bugs in the compiler.
All known bugs are fixed.
Compiler
- Wrong instructions were used for storing procedure parameters when the stack frame exceeded 16-bit addressing.
- The frame pointer adress was calculated incorrectly when the stack frame exceeded 16-bit addressing.
Release Notes Version 8.1.3
Release 8.1.3 fixes a bug in the compiler.
All known bugs are fixed
Compiler
- HIGH (<someVar: POINTER TO ARRAY OF SomeType>) might run out of registers.
Release Notes Version 8.1.4
Release 8.1.4 fixes a bug in the compiler.
All known bugs are fixed
Compiler
- A compiler assertion error was erroneously raised.
Release Notes Version 8.0.x:
p1 Modula-2 Debugger
- Restriction: the debugger does not yet support breakpoints and single step.
- Restriction: the debugger is not yet available for commandl ine tools.
Release Notes Version 8.0.1
Release 8.0.1 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- Files with UNIX-end-of-line characters are processed corretly.
Release Notes Version 8.0.3
Release 8.0.3 fixes two bugs in the compiler and a bug in the library.
It also adds some new features.
All known bugs are fixed.
Compiler
- Huge constants in symbol files caused a compiler crash when reading these files.
- The static link register for nested procedures was set / restored incorrectly when
the stack space of the surrounding procedure exceeded 32k.
- Some error messages are made more explicit.
- "CASTREGISTER" is now available as command line option.
Library
- Fixed a bug in SysClock. GetClock that returned wrong offset to GMT.
- The module Terminal now implements noecho-mode.
Release Notes Version 8.0.4
Release 8.0.4 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- Using dynamic ARRAY OF CHAR as parameter to inline procedures could cause an assertion
error because of not released registers.
Release Notes Version 8.0.5
Release 8.0.5 fixes a bug in the compiler and enlarges a limitation.
All known bugs are fixed.
Compiler
- The bug fix made in 8.0.4 introduced a new bug. This is now fixed.
- The maximum number of importetd modules is set to 299.
Release Notes Version 8.0.6
Release 8.0.6 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- Using class declarations in generic modules could lead to name conflicts. This is now fixed.
Release Notes Version 8.0.7
Release 8.0.7 fixes two bugs in the compiler and improves error management.
All known bugs are fixed.
Compiler
- The compiler is now aware of illegal types caused be previous errors when parsing paramter structures.
- Exception handlers in destructors of untracede classes could cause compiler crashes. This is now fixed.
- When sending assembler output via pipe to the assembler, the compiler now sents an illegal assembler statement
instead of a (correct) empty file in case of compilation errors. So the assembler will not generate new object
files which would fool the make utility.
Release Notes Version 7.3.x
There are three new main features in this version. First, support for generating Carbon applications
is fully integrated (including an adapted debugger library). Second, it supports universal interfaces
version 3.4.2 (newest finaly version). Third, the AltiVec instruction set available on G4 processors is
supported by the compiler.
All known bugs are fixed.
Compiler
- Vector data types to be used with the AlitVec instruction set on G4 processors may be defined
with "VECTOR OF <ElementType>". Variables / Constants of vector types are used for
the AltiVec instruction set. Altivec instructions are generated for several standard operations
like "+", "-" etc. The full set is available through functions / procedures to
be imported from module "VECTORS" (see compiler manual for details).
- The new introduced pragma "FixedSubrangeSize" allows to control the size of subrange types:
if "FixedSubrangeSize" has the value "FALSE", subrange types have minimal
size (default, current semantics),
if "FixedSubrangeSize" has the value "TRUE", subrange types have the size of the
parent type, i. .e. if a type identifier preceeds the subrange, the size of the type deno-ted by this
identifier, otherwise 4 bytes for INTEGER / CARDINAL subranges, 1 byte for character subranges, and
the size of the enumeration type for subranges of enumeration types (for compatibility with the
Stony Brook compiler).
The default may be changed by specifying "-FIXEDSUBRANGESIZE" as command line option.
Library
- The library is extended by files for Carbon support.
- A new funcion "OFFS" was added to "SYSTEM", which returns the offset of a
record field given as argument:
PROCEDURE OFFS(<recordtype>.<field> {.<field>}): zz-type;
- Garbage collection is redesigned and improved.
- support for debugging shared libraries is added.
Debugger
- There is a new debugger library for Carbon applications.
- The debugger is aware of G4 specific extensions (vector registerts, displaying vector data etc.).
Sample Programs
The sample program "PlotFun" is newly introduced (formerly in PreRelease) to show porting to
universal interfaces 3.4.2, especially porting for Carbon. Besides lots of details it uses the new
print manager interface. "Struktogramm" is ready for Carbon too. "Dungeon" is not
yet ready for Carbon, though part of the changes is already done and the program may be started under MacOS X.
Manual
The new features, especially the vector extensions, are described in details.
Release Notes Version 7.3.1
Release 7.3.1 fixes a bug in the compiler, contains corrected library source files and adds
a new sample programm showing the use of vector instructions.
All known bugs are fixed.
Compiler
- a severe bug in the C backend caused wrong code. This is now fixed (C backend).
Library
- The folder "LibSources" contains updates for corrupted library source files.
Sample Programs
- The folder "AltiVec-Demo" contains sources for a 3-d-drawing program to show the use
(and benefit) of vector instructions available on G4 processors.
Release Notes Version 7.3.2
Release 7.3.2 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- in case a module contains more then 32,768 bytes of constant data, constants above 32,768 were
addressed incorrectly. This bug is now fixed.
Release Notes Version 7.3.3
Release 7.3.3 fixes four bugs in the compiler.
All known bugs are fixed.
Compiler
- "FROM SomeModule IMPORT * EXCEPT SomeItem" did not work in case the import was made in an
implementation module and "SomeItem" was defined in the according definition module.
- a bug in the exception handler entry of a method cause the program to crash if some other
method was called within the exception handler (PPC backend).
- a bug in the register optimization causes meaningless compiler assertion errors in case a
destructor of an untraced class had an exception handler whereas the constructor had not (PPC backend).
- record parameters for C procedures where passed on the stack instead of registers. This caused e. g.
those procedures of module CFString to crash that have parameters of type CFRange (PPC backend).
Release Notes Version 7.3.4
Release 7.3.4 fixes three bugs in the compiler.
All known bugs are fixed.
Compiler
- In very seldom situations, registers were not correctly releaded after use in address calculation
for parameter loading (PPC backend).
- addressing of variables with offsets larger than 32k might request more registers than
available (PPC backend).
- Wrong use of register r0 in load and store operations (PPC backend / assembler files).
Release Notes Version 7.3.5
Release 7.3.5 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- When proceures with dynamic frame (i. e. value open array parameters with CopyReference=TRUE)
do not make any acces to the parameters on stack (e. g. because of optimizing all parameters into
registers), the register used for parameter access might not be saved and therefore incorrect after
leaving the procedure (PPC backend).
Release Notes Version 7.3.6
Release 7.3.6 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- Destroying an object of an untraced class might fail if the call to DESTROY is made in an procedure
which containes a nested leaf procedure and the destructor of the class is not empty (PPC backend).
Release Notes Version 7.3.7
Release 7.3.7 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- Huge constants in symbol files caused a compiler crash when reading these files.
Release Notes Version 7.3.8
Release 7.3.8 fixes five bugs in the compiler.
All known bugs are fixed.
Compiler
- the static link register for nested procedures was set / restored incorrectly
when the stack space of the surrounding procedure exceeded 32k (PPC backend).
- Using dynamic ARRAY OF CHAR as parameter to inline procedures could cause an
assertion error because of not released registers (PPC backend).
- Using class declarations in generic modules could lead to name conflicts. This is now fixed.
- The compiler is now aware of illegal types caused be previous errors when parsing paramter structures.
- Exception handlers in destructors of untracede classes could cause compiler crashes.
This is now fixed (PPC backend).
Release Notes Version 7.3.9
Release 7.3.9 fixes a bug in the compiler.
All known bugs are fixed.
Compiler
- For sets with a size of n*4 + 3 bytes compare operations produced wrong results.
Release Notes Version 7.3.10
Release 7.3.10 fixes two bugs in the compiler.
All known bugs are fixed.
Compiler
- Wrong instructions were used for storing procedure parameters when the stack frame exceeded 16-bit addressing.
- The frame pointer adress was calculated incorrectly when the stack frame exceeded 16-bit addressing.
Known problems in Version 7.3.10:
Compiler runs out of memory if CASE-statements have a huge range of case label values.