home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 2 / FFMCD02.bin / new / dev / misc / p2c / notes < prev    next >
Text File  |  1993-12-21  |  33KB  |  759 lines

  1.  
  2. THE GRAND P2C NOTES FILE:
  3.  
  4. This file contains notes to myself recording bugs, flaws, and suggested
  5. improvements to p2c.  They have roughly been separated into "old", "older",
  6. and "oldest" groups.  I can't guarantee I'll do any of these.  If you do,
  7. please mail me the diffs so I can incorporate them into the next release.
  8. Thanks!
  9.                         -- Dave Gillespie
  10.                            daveg@csvax.caltech.edu
  11.  
  12. -----------------------------------------------------------------------------
  13.  
  14.    The Pascal declaration
  15.  
  16.       type foo = set of (one, two);
  17.  
  18.    does not ever write out an "enum { one, two }" declaration in C!
  19.  
  20. -----------------------------------------------------------------------------
  21.  
  22.    Handling of comments that trail the ELSE clause of an IF statement
  23.    could use some work.
  24.  
  25. -----------------------------------------------------------------------------
  26.  
  27.    Technically speaking, "for byte := min to max do" is legal even
  28.    if min > 255, i.e., the limits only need to be in range if the
  29.    body of the loop executes.  Thus, FOR loops should really use a
  30.    shadow parameter not just when max is the constant 255, but
  31.    whenever min or max are not provably in byte range.
  32.  
  33. -----------------------------------------------------------------------------
  34.  
  35.    Have a "-M"-like mode in which FREE is suppressed altogether, useful
  36.    in case p2c crashes because bugs have corrupted malloc's free list.
  37.  
  38. -----------------------------------------------------------------------------
  39.  
  40.    For expressions building small-sets whose maximum element is <= 15,
  41.    use "1 << x" instead of "1L << x".
  42.  
  43. -----------------------------------------------------------------------------
  44.  
  45.    Handle VAX Pascal VARYING OF CHARs used as the arguments of WITH
  46.    statements.
  47.  
  48. -----------------------------------------------------------------------------
  49.  
  50.    StringTruncLimit would be helped by expr.c:strmax() interpreting
  51.    sprintf control strings.  For %s, use strmax of the corresponding
  52.    argument.  For %d, use 11, etc.  For %.10s, use min(10, strmax(arg)).
  53.    For %.*s, just use strmax(arg), I guess.
  54.  
  55.    Have a mode in which such assignments are automatically truncated.
  56.  
  57.    Perform truncation testing for non-VAR procedure arguments, too.
  58.  
  59. -----------------------------------------------------------------------------
  60.  
  61.    In cref.p, the "strappend(buf,#0)" statement translates into
  62.    "strcpy(STR1,buf); strcpy(buf,STR1)" with a warning about a null
  63.    character in a sprintf control string!
  64.  
  65. -----------------------------------------------------------------------------
  66.  
  67.    Still having problems where the opening comment of an imported
  68.    module's interface text is copied into the program.
  69.  
  70. -----------------------------------------------------------------------------
  71.  
  72.    VAX Pascal features not yet handled:
  73.  
  74.       [UNSAFE] attribute is only implemented in a few situations.
  75.       [UNBOUND] attribute on a procedure says it doesn't need a static link.
  76.       [TRUNCATE] attribute on a parameter allows optional params w/no default.
  77.       [LIST] attribute on a parameter is like &rest in Lisp.
  78.       Support types like, e.g., [LONG] BOOLEAN.
  79.       Can assign "structurally compatible" but different record types.
  80.       File intrinsics need serious work, especially OPEN.
  81.       If a copy param is [READONLY], don't need to copy it.
  82.       If a procedure is [ASYNCHRONOUS], make all its variables volatile.
  83.       If a procedure is [NOOPTIMIZE], make all its variables volatile.
  84.       Provide a real implementation of BIN function and :BIN read format.
  85.       BIT_OFFSET and CARD intrinsics are not supported.
  86.  
  87. -----------------------------------------------------------------------------
  88.  
  89.    Modula-2 features not yet handled:
  90.  
  91.       Local modules are faked up in a pretty superficial way.
  92.       WORD is compatible with both pointers and CARDINALs.
  93.       WORD parameters are compatible with any word-sized object.
  94.       ARRAY OF WORD parameters are compatible with absolutely anything.
  95.       Improve treatment of character strings.
  96.       Find manuals for real implementations of Modula-2 and implement
  97.          any common language extensions.
  98.       Fix p2c to read system.m2 instead of system.imp automatically.
  99.  
  100. -----------------------------------------------------------------------------
  101.  
  102.    Oregon Software Pascal features not yet handled:
  103.  
  104.     procedure noioerror(var f:file);
  105.         Built-in.  Sets a flag on an already-open file so that
  106.         I/O errors record an error code rather than crashing.
  107.         Each file has its own error code.
  108.  
  109.     function ioerror(var f:file) : boolean;
  110.         True if an error has occurred in the file.
  111.  
  112.     function iostatus(var f:file) : integer;
  113.         The error code, when ioerror was true.
  114.  
  115.     reset and rewrite ignore the third parameter, and allow a fourth
  116.     param which is an integer variable that receives a status code.
  117.     Without this param, open errors are fatal.  An optional param
  118.     may be omitted as in reset(f,'foo',,v);
  119.  
  120. -----------------------------------------------------------------------------
  121.  
  122.    In p_search, if a file contains const/var/type/procedure/function
  123.    declarations without any module declaration, surround the entire
  124.    file with an implicit "module <generated-name>; {PERMANENT}" ... "end.".
  125.    This would help the Oregon Software dialect considerably.
  126.  
  127. -----------------------------------------------------------------------------
  128.  
  129.    Provide an explicit IncludeFrom syntax for "no include file".
  130.    E.g., "IncludeFrom dos 0".
  131.  
  132. -----------------------------------------------------------------------------
  133.  
  134.    In docast, smallsets are converted to large sets of the requested type.
  135.    Wouldn't it be better to convert to a set of 0..31 of the base type?
  136.    This would keep foo([]), where the argument is "set of char", from
  137.    allocating a full 256-bit array for the temporary.
  138.  
  139. -----------------------------------------------------------------------------
  140.  
  141.    When initializing a constant variant record or array of same in which
  142.    non-first variants are initialized, create a function to do the
  143.    initialization, plus, for modules w/o initializers, a note to call
  144.    this function.  Another possibility:  Initialize the array as well as
  145.    possible, but leave zeros in the variant parts.  Then the function
  146.    has only to fix up the non-first variant fields.
  147.  
  148. -----------------------------------------------------------------------------
  149.  
  150.    Figure out some way to initialize packed array constants, e.g., a short
  151.    macro PACK4(x,y)=(((x)<<4)+(y)) which is used inside the C initializer.
  152.    Alternatively, implement initializer functions as above and use those.
  153.  
  154. -----------------------------------------------------------------------------
  155.  
  156.    How about declaring Volatile any variables local to a function which
  157.    are used after the first RECOVER?  GNU also suggests writing the
  158.    statement:  "&foo;" which will have no side effect except to make
  159.    foo essentially volatile, without relying on ANSI features.
  160.  
  161. -----------------------------------------------------------------------------
  162.  
  163.    Test the macros for GET, PUT, etc.
  164.  
  165. -----------------------------------------------------------------------------
  166.  
  167.    Can the #if 0'd code for strinsert in funcs.c be changed to test
  168.    strcpyleft?
  169.  
  170. -----------------------------------------------------------------------------
  171.  
  172.    Even in Ansi mode, p2c seems to be casting Anyptrs into other pointer
  173.    types explicitly.  This is an automatic conversion in Ansi C.
  174.  
  175. -----------------------------------------------------------------------------
  176.  
  177.    A Turbo typed constant or VAX initialized variable with a VarMacro
  178.    loses its initializer!
  179.  
  180. -----------------------------------------------------------------------------
  181.  
  182.    Test the ability of the parser to recover from common problems such
  183.    as too many/few arguments to a procedure, missing/extra semicolon, etc.
  184.    One major problem has been with undeclared identifiers being used as
  185.    type names.
  186.  
  187. -----------------------------------------------------------------------------
  188.  
  189.    Line breaker still needs considerable tuning!
  190.  
  191. -----------------------------------------------------------------------------
  192.  
  193.    How about indenting trailing comments analogously to