summaryrefslogtreecommitdiff
path: root/misc/pascal/doc/PascalNotes.txt
diff options
context:
space:
mode:
Diffstat (limited to 'misc/pascal/doc/PascalNotes.txt')
-rw-r--r--misc/pascal/doc/PascalNotes.txt135
1 files changed, 135 insertions, 0 deletions
diff --git a/misc/pascal/doc/PascalNotes.txt b/misc/pascal/doc/PascalNotes.txt
new file mode 100644
index 000000000..360986c59
--- /dev/null
+++ b/misc/pascal/doc/PascalNotes.txt
@@ -0,0 +1,135 @@
+ AS OF 1/18/04
+
+TYPES
+- Only types INT, BOOLEAN, CHAR, REAL, SCALAR, SUBRANGE, RECORD and SET
+ implemented
+ - No PACKED types (actually, types are always packed).
+ - FILE OF and TEXT types partially supported
+ - Not supported in TYPE block
+ - TEXT is defined as FILE OF CHAR vs PACKED FILE OF CHAR
+ - No function returning FILE OF; No FILE OF
+ procedure/function arguments
+ - Only PROGRAM arguments can be declared type FILE OF
+ - Only one file identifier per FILE OF declaration in type
+ block.
+ - SET is limit to 16/32 (# bits in int) adjacent elements
+ - Expressions are not strongly typed across different SCALAR types
+ (see exprEnum in expr.h)
+ - In RECORD CASE, there is no verification that the type of the tag
+ is consistent with a case selector; the is check if the case selector
+ constants are of the same type as the tag type identifier.
+
+- No range checks on array indices
+- Pointers
+ - Can't pass pointers as VAR parameters
+ - No pointer functions ??
+ - No pointers to pointers
+
+STATEMENTS
+- The following statements not implemented:
+ - No PROCEDURE call with PROCEDUREs or FUNCTIONs as parameters
+- The following statements are only partially implemented
+ - WITH statements cannot be nested.
+ - Cannot reference "up the chain" in WITH statements. Eg.
+ suppose RECORD "a" contains RECORD "b" which contains "c" and
+ that RECORD "a" also contains "d" so that we could write
+ a.b.c OR a.d
+ Then the following should work but is not yet supported:
+ WITH a DO
+ BEGIN
+ WITH b DO
+ BEGIN
+ c := ..
+ d := .. <== SHOULD WORK!!!
+ - GOTO only partially implemented -- no stack corrections
+ for GOTOs between loops, blocks, etc. Use is DANGEROUS.
+
+STANDARD PROCEDURES and FUNCTIONS
+- The following statement procedures/functions not implemented:
+ - GET, PUT, PACK, UNPACK, NEW
+ - TBD
+- No fieldwidth colon operator on WRITE arguments
+
+Extended Pascal Features
+- Type STRING is partially implemented.
+- PACKED ARRAY[..] OF CHAR is not a a string.
+
+NON-standard Pascal extensions/differences
+
+TYPES
+- ARRAY index type is integer constant specifying size of array
+- Hexadecimal constants.
+- INPUT and OUTPUT parameters in PROGRAM statement are
+ predeclared and optional.
+
+OPERATORS
+- Binary shift operators -- << and >> like in C
+- '#', "<>", and "><" are all equivalent
+
+COMPILER PSEUDO-OPERATIONS
+- INCLUDE
+
+STATEMENTS
+- CASE statement expects integer expression for the switch
+ variable
+- ELSE in CASE statement
+
+EXPRESSIONS
+
+- Assumes sizeof(pointer) == sizeof(integer)
+
+TODO LIST
+
+o BUGS
+- Implement PUT and GET.
+- In FUNC/PROC calls, if simpleExpression fails to find a parameter (eg.,
+ proc (,,), no error is detected.
+- Type FILE OF is totally busted -- fix it
+- Need to get max string size into stack somehow. Runtime routines like
+ strcat and strcatc need to know how big the string storage space is.
+- Need logic to release string stack used by actual parameters after
+ function/procedure call.
+- Can't declare new parameters / variables with same name as another
+ variable at higher stock. Tokenizer does not return tIDENT.
+- There are lots of cases where the string stack is not being managed
+ correctly (e.g., usesSection()).
+- Redirection of input and output is not supported (e.g. see setting of
+ input and output in CONST section of pageutils.pas).
+
+o IMPROVEMENTS
+- In PTKN, verify that string stack does not overflow when
+ character added.
+- Option to turn on listing
+- Option to interleave assembly language with listing
+- Option to select string stack size (or let it grow dynamically)
+- Option to select symbol table size (or let it grow dynamically)
+- List file should only be produced if option provided.
+- Provide instrumentation to use the line number data in the
+ object files. In debugger, display source line. Allow stepping
+ from source line to source line.
+- Optimizer needs to be incorporated into compiler.
+- arrayIndex needs to conform with Pascal standard.
+- Need to have 32-bit integers and address
+- Translation to register model
+- Native code translator
+- Linker and support multiple source files
+- Runtime package
+- Full extended pascal string support
+- Other things from extended pascal: 'list of' 'uses' 'unit'
+- Need to optimize out JMP .+1
+- For compatibility, let 'packed array [n..m] of char;' be equivalent to
+ string.
+- Need to review all uses of string stack for identifiers and strings
+ that get discarded. Probably should get a get infrastructure.
+- Add 16-bit word type
+
+o ISSUES
+- What happens in TYPE block if type is sTYPE or sFILE_OF? Need
+ to re-think all typing. Maybe replace sTYPE and sFILE_OF with
+ sINT_TYPE, sINT_ARRAY_TYPE, ..., sFILE_OF_INT,
+ sFILE_OF_INT_ARRAY, etc.
+- Is it really necessary or meaningful to allocate dstack for
+ file buffers.
+- Revisit procedure call logic in pexec.c & pdbg.c. First stack parameter
+ is calculated but never used.
+- Decide what to do about type filename in tests/src/cgimail.pas