Browse Source

+ Added Carls patches.

michael 27 years ago
parent
commit
61285973f9
2 changed files with 349 additions and 212 deletions
  1. 301 182
      docs/prog.tex
  2. 48 30
      docs/ref.tex

File diff suppressed because it is too large
+ 301 - 182
docs/prog.tex


+ 48 - 30
docs/ref.tex

@@ -114,10 +114,10 @@ percent sign (\var{\%}). Thus, \var{255} can be specified in binary notation
 as \var{\%11111111}.
 as \var{\%11111111}.
 
 
 \subsection{Real types}
 \subsection{Real types}
-\fpc uses the math coprocessor (or an emulation) for al its floating-point 
-calculations. The Real native type for is processor dependant,
+\fpc uses the math coprocessor (or an emulation) for all its floating-point
+calculations. The Real native type is processor dependant,
 but it is either Single or Double. Only the IEEE floating point type are
 but it is either Single or Double. Only the IEEE floating point type are
-supported, and these depend on the target processor and emulation options .
+supported, and these depend on the target processor and emulation options.
 The true Turbo Pascal compatible types are listed in
 The true Turbo Pascal compatible types are listed in
 \seet{Reals}.
 \seet{Reals}.
  \begin{FPCltable}{lccr}{Supported Real types}{Reals}
  \begin{FPCltable}{lccr}{Supported Real types}{Reals}
@@ -812,21 +812,6 @@ command-line switch.
 {\em Remark:} These constructions are just for typing convenience, they
 {\em Remark:} These constructions are just for typing convenience, they
 don't generate different code.
 don't generate different code.
 
 
-\fpc also supports typed assignments. This means that an assignment
-statement has a definite type, and hence can be assigned to another
-variable. The type of the assignment \var{a:=b} is the type of \var{a}
-(or, in this case, of \var{b}), and this can be assigned to another
-variable : \var{c:=a:=b;}.
-To summarize: the construct
-\begin{verbatim}
- a:=b:=c;
-\end{verbatim}
-results in both \var{a} and \var{b} being assign the value of \var{c}, which
-may be an expression.
-
-For this construct to be allowed, it is necessary to specify the \var{-Sa4}
-switch on the command line.
-
 \subsection{The \var{Case} statement}
 \subsection{The \var{Case} statement}
 \fpc supports the \var{case} statement. Its prototype is
 \fpc supports the \var{case} statement. Its prototype is
 \begin{verbatim}
 \begin{verbatim}
@@ -968,7 +953,11 @@ Be aware of the fact that the boolean expressions \var{Expression1} and
 will be stopped at the point where the outcome is known with certainty)
 will be stopped at the point where the outcome is known with certainty)
 
 
 \subsection{The \var{With} statement}
 \subsection{The \var{With} statement}
-The with statement serves to access the elements of a record, without
+
+The with statement serves to access the elements of a record\footnote{
+The \var{with} statement does not work correctly when used with 
+objects or classes until version 0.99.6}
+, without
 having to specify the name of the record. Given the declaration:
 having to specify the name of the record. Given the declaration:
 \begin{verbatim}
 \begin{verbatim}
 Type Passenger = Record
 Type Passenger = Record
@@ -991,9 +980,9 @@ With TheCustomer do
   Flight:='PS901';
   Flight:='PS901';
   end;
   end;
 \end{verbatim}
 \end{verbatim}
- 
+
 \subsection{Compound statements}
 \subsection{Compound statements}
-Compound statements are a group of statements, separated by semicolons, 
+Compound statements are a group of statements, separated by semicolons,
 that are surrounded by the keywords \var{Begin} and \var{End}. The
 that are surrounded by the keywords \var{Begin} and \var{End}. The
 Last statement doesn't need to be followed by a semicolon, although it is
 Last statement doesn't need to be followed by a semicolon, although it is
 allowed.
 allowed.
@@ -1058,15 +1047,17 @@ ProcedureFunction Func (... [Var|Const] Ident : Array of Type ...);
 The \var{[Var|Const]} means that open parameters can be passed by reference
 The \var{[Var|Const]} means that open parameters can be passed by reference
 or as a constant parameter.
 or as a constant parameter.
 
 
-In a function or procedure, you can pass open arrays only to functions which 
-are also declared with open arrays as parameters, {\em not} to functions or 
+In a function or procedure, you can pass open arrays only to functions which
+are also declared with open arrays as parameters, {\em not} to functions or
 procedures which accept arrays of fixed length.
 procedures which accept arrays of fixed length.
 
 
 \section{Using assembler in your code}
 \section{Using assembler in your code}
+
 \fpc supports the use of assembler in your code, but not inline
 \fpc supports the use of assembler in your code, but not inline
-assembler macros. Assembly functions (i.e. functions declared with the
-\var{Assembler} keyword) are supported as of version 0.9.7. (see
-\progref for more information about this).
+assembler macros.  To have more information on the processor
+specific assembler syntax and its limitations, see the \progref.
+
+\subsection{ Assembler statements }
 
 
 The following is an example of assembler inclusion in your code.
 The following is an example of assembler inclusion in your code.
 \begin{verbatim}
 \begin{verbatim}
@@ -1090,10 +1081,38 @@ recognise it, and treat it as any other conditionals.
 \emph{ Remark: } Before version 0.99.1, \fpc did not support
 \emph{ Remark: } Before version 0.99.1, \fpc did not support
 reference to variables by their names in the assembler parts of your code.
 reference to variables by their names in the assembler parts of your code.
 
 
+\subsection{ Assembler procedures and functions }
+
+Assembler procedures and functions are declared using the
+\var{Assembler} directive. The \var{Assembler} keyword is supported
+as of version 0.9.7. This permits the code generator to make a number
+of code generation optimizations.
+
+The code generator does not generate any stack frame (entry and exit
+code for the routine) if it contains no local variables. In the case
+of functions, ordinal values must be returned in the accumulator. In
+the case of floating point values, these depend on the target processor
+and emulation options.
+
+\emph{ Remark: } Before version 0.99.1, \fpc did not support
+reference to variables by their names in the assembler parts of your code.
+
+\emph{ Remark: } Currently, the \var{Assembler} directive has not the
+same effect as in Turbo Pascal, so beware! In \fpc, parameters are
+treated normally, which is not the case in Turbo Pascal. Furthermore,
+the stack frame will be omitted if there are no local variables, in this
+case if the assembly routine has any parameters, they will be referenced
+directly via the stack pointer. This is \em{ NOT} like Turbo Pascal where
+the stack frame is only omitted if there are no parameters \em{ and } no
+local variables. Therefore, if your assembly routines will modify the stack
+pointer, such as when pushing or popping values on the stack, the
+\var{Assembler} keyword should not be used. Instead, use a normal procedure
+with \var{Asm} blocks.
+
 \section{Modifiers}
 \section{Modifiers}
 \fpc doesn't support all Turbo Pascal modifiers, but
 \fpc doesn't support all Turbo Pascal modifiers, but
 does support a number of additional modifiers. They are used mainly for assembler and
 does support a number of additional modifiers. They are used mainly for assembler and
-reference to C object files. 
+reference to C object files.
 
 
 \subsection{Public}
 \subsection{Public}
 The \var{Public} keyword is used to declare a function globally in a unit.
 The \var{Public} keyword is used to declare a function globally in a unit.
@@ -1207,7 +1226,6 @@ function must be exactly the same.
 The \var{external} modifier has also an extended syntax:
 The \var{external} modifier has also an extended syntax:
 \begin{enumerate}
 \begin{enumerate}
 \item
 \item
-
 \begin{verbatim}
 \begin{verbatim}
 external 'lname';
 external 'lname';
 \end{verbatim}
 \end{verbatim}
@@ -1219,7 +1237,7 @@ compiler will the automatically link this library to your program.
 external 'lname' name Fname;
 external 'lname' name Fname;
 \end{verbatim}
 \end{verbatim}
 Tells the compiler that the function resides in library 'lname', but with
 Tells the compiler that the function resides in library 'lname', but with
-name 'Fname'. The compiler will the automatically link this library to your 
+name 'Fname'. The compiler will the automatically link this library to your
 program, and use the correct name for the function.
 program, and use the correct name for the function.
 
 
 \item \windows and \ostwo only:
 \item \windows and \ostwo only:
@@ -1227,7 +1245,7 @@ program, and use the correct name for the function.
 external 'lname' Index Ind;
 external 'lname' Index Ind;
 \end{verbatim}
 \end{verbatim}
 Tells the compiler that the function resides in library 'lname', but with
 Tells the compiler that the function resides in library 'lname', but with
-indexname \var{Ind}. The compiler will the automatically link this library to your 
+indexname \var{Ind}. The compiler will the automatically link this library to your
 program, and use the correct index for the function.
 program, and use the correct index for the function.
 \end{enumerate}
 \end{enumerate}
 
 

Some files were not shown because too many files changed in this diff