home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / me34src.zip / me3 / doc / mm.bug < prev    next >
Lisp/Scheme  |  1995-01-14  |  5KB  |  135 lines

  1.                                 -*-text-*-
  2.               The Mutt Machine Bug List
  3.               --- ---- ------- --- ----
  4.  
  5. ====================================================================
  6. ====            MM2 Needed Features            ====
  7. ====================================================================
  8.  
  9.  
  10. ====================================================================
  11. ====            The MM2 Low End of the Want List            ====
  12. ====================================================================
  13.  
  14.  
  15. ====================================================================
  16. ====            MM2 Bug and Change list            ====
  17. ====================================================================
  18. - means bug in this (and subsequent) releases
  19. * means bug fixed in next release
  20. + means new feature in next release
  21.  
  22.  
  23. v2.6 2/13/94    [Released , 1994]
  24. ---- -------
  25.  
  26. v2.3 2/21/93    [Released June, 1993]
  27. ---- -------
  28. * (defun bug (pointer int x) { (x 123) }) didn't compile.  Fixed 2/94.
  29. * mm.h GET_INT32 macro (long form) didn't work on Borland C (probably
  30.   all 16 bit ints).  Fixed 3/94.
  31.  
  32. v2.1 1/30/93    [Released January 30, 1993]
  33. ---- -------
  34. * BAD bug when passing pointers to function addresses.  If the function1
  35.   passes a pointer to function2 (f1 and f2 are in the same block) to
  36.   function3 in another block and f3 calls though the pointer, there is
  37.   no switching to f2 address space so bad things usually happen.
  38.   Example:
  39.     bug1.mut
  40.     (defun
  41.       bug1 { (bug2 (floc bug3)) }
  42.       bug3 { (msg "This is bug3") }
  43.     )
  44.     bug2.mut
  45.     (defun bug2 (pointer defun bugger) { (bugger) })
  46.  
  47.     Calling bug1 is bad.
  48.   All other form of floc are OK - (floc "bug3"), tokens, within the
  49.     same block, etc.
  50.   Work around:  Pass the function name as a string:  (floc "bug3").
  51.   9/92
  52.   Fix:  Have to be able to query, set and remember the current block
  53.     though function calls.  This means a bigger stack frame and new
  54.     routines in the application.  Oh well.  I created a "long"
  55.     (segmented) address type that can be used for interblock calls.  It
  56.     is 32 bits, divided into N bits of block id and (32 - N) bits of
  57.     offset from the start of the block.  Somewhat sleezy.  2/93
  58.     
  59. * Result register can get stomped in some cases.  If a string is pushed
  60.   into the stack frames local storage and the function returns that
  61.   string AND then another string is pushed into the [parents] frame, the
  62.   new string can overwrite the returned string.
  63.   For example:
  64.     (defun
  65.       zip HIDDEN { (arg 0) }
  66.       bug MAIN
  67.       {
  68.     (msg (zip (concat "666")) "," (concat "hmm"))
  69.       }
  70.     )
  71.   When bug is run, "hmm,hmm" is returned, not "666,hmm".
  72.   Why:  RV is pointing into the local stack frame after the frame is
  73.     freed, the parents frame grows over the freed frame (as it should)
  74.     so the new string is pushed over RV.
  75.   6/93
  76.   Fix:  Do a little more checking in PUSHRV.
  77.  
  78. - mm_ask() (mm.c) can overflow result[] and cause mm to dump core.
  79.   mm_ask() calls MMask() and passes result[] to be filled in.  It has no
  80.   clue how much will be put there.  Ran into this when yanking long
  81.   (600+ character) X server compile lines into the minibuffer.  12/92
  82. - MMload_code() (mm.c) should also print the file name when complaining.
  83.   5/92
  84. - In MMload_code() (mm.c) I don't check fread() for errors.  Could be a
  85.   problem when reading bogus .mco files.  4/92
  86.  
  87. v2.0 2/2/92    [MM2 beta, released February 28, 1992]
  88. ---- ------
  89. * On small int machines (MS-DOS), length-of can go negative.  1/93
  90.  
  91. - BAD bug when passing pointers to function addresses.  If the function1
  92.   passes a pointer to function2 (f1 and f2 are in the same block) to
  93.   function3 in another block and f3 calls though the pointer, there is
  94.   no switching to f2 address space so bad things usually happen.
  95.   Example:
  96.     bug1.mut
  97.     (defun
  98.       bug1 { (bug2 (floc bug3)) }
  99.       bug3 { (msg "This is bug3") }
  100.     )
  101.     bug2.mut
  102.     (defun bug2 (pointer defun bugger) { (bugger) })
  103.  
  104.     Calling bug1 is bad.
  105.   All other form of floc are OK - (floc "bug3"), tokens, within the
  106.     same block, etc.
  107.   Work around:  Pass the function name as a string:  (floc "bug3").
  108.   9/92
  109.     
  110. - mm_ask() (mm.c) can overflow result[] and cause mm to dump core.
  111.   mm_ask() calls MMask() and passes result[] to be filled in.  It has no
  112.   clue how much will be put there.  Ran into this when yanking long
  113.   (600+ character) X server compile lines into the minibuffer.  12/92
  114.  
  115. - MMload_code() (mm.c) should also print the file name when complaining.
  116.   5/92
  117.  
  118. - In MMload_code() (mm.c) I don't check fread() for errors.  Could be a
  119.   problem when reading bogus .mco files.  4/92
  120.  
  121.  
  122. ============== MM bugs ===========
  123. * If you do a (floc (concat "foo")()) and foo doesn't exist, MM core
  124.   dumps.  This is due to the op structure pointing to result so
  125.   strcat(result,name) infinite loops in exetern().  Fix is to push name
  126.   on val stack if it is in result (in PUSHRV).  This was also a bug
  127.   because if result (RV) changed before the function was called, the
  128.   wrong thing would be called.  4/16/91.
  129. * Part of the above bug, modify pushpush() to gen a PUSH (instead of a
  130.   SHOVE) if pushing a FCNPTR - otherwise the above fix won't get a
  131.   chance to work.  4/16/91.
  132.   This fix is AFU.  Can't push because it sets a stack frame - gotta
  133.   shove.  The real fix is in MM.  In faddr, if if the routine name is in
  134.   result, push it onto the val stack.  Right fix, wrong place.  9/13/91
  135.