Chris Hanson [Sat, 9 May 1987 06:24:34 +0000 (06:24 +0000)]
Restructure so that operator/operand code is generated before the
combination and passed through. This is because the primitive open
coders will examine the already-generated operands to determine things
about them.
Chris Hanson [Sat, 9 May 1987 04:51:32 +0000 (04:51 +0000)]
Fix two bugs: (1) `unsigned-integer->bit-string' was not clearing out
those parts of the result which were not filled in by copying from a
bignum. (2) `bit-substring-find-next-set-bit' was not correctly
advancing the scan pointer for the last word of a multi-word string.
Chris Hanson [Fri, 8 May 1987 02:48:24 +0000 (02:48 +0000)]
Change combination optimizations to eliminate bug caused by deleting
unreferenced parameters. Really need to do side effect analysis to
perform this optimization. Meanwhile, just deleting integrated
parameters should be sufficient.
Also flushed use of environment constructing load-system since
auxiliary variable compilation is now fixed.
Chris Hanson [Fri, 8 May 1987 02:33:21 +0000 (02:33 +0000)]
Change code that optimizes let-like combinations so that it only
removes parameters that are declared integrable, rather than
unreferenced parameters. This is a makeshift arrangement until we can
perform side effect analysis on the operands to determine which ones
are really needed.
Chris Hanson [Thu, 7 May 1987 04:40:16 +0000 (04:40 +0000)]
Add code to keep track of items pushed and popped on the stack, to
produce the offset between the frame-pointer and the stack-pointer
when it is needed. This is used to convert frame-pointer references
into stack-pointer references.
Chris Hanson [Thu, 7 May 1987 04:38:32 +0000 (04:38 +0000)]
Guarantee that nodes are generated in the control flow ordering. This
is because a `combination-value' is converted into a `value-temporary'
by a side-effect when the combination is generated. So the
combination must be generated before any references to its value are.
Chris Hanson [Thu, 7 May 1987 04:36:15 +0000 (04:36 +0000)]
The receiver-offset for message senders was including the pushed
operands of a call. Since we are now using a frame pointer, it need
only include the block frame size. The pushed operands will be taken
care of by the LAP generator.
Chris Hanson [Thu, 7 May 1987 00:22:05 +0000 (00:22 +0000)]
Rewrite of RTL generator. Flush `next-generator' mechanism, use
multiple value return and explicit gluing of CFGs. Flush offset
argument, use frame-pointer instead; offset will be computed at LAP
generation time.
Chris Hanson [Wed, 6 May 1987 04:54:08 +0000 (04:54 +0000)]
If a lambda expression was traced twice, it was being added to the
advice population twice, despite the fact that it was already there.
However, only one copy of the trace advice would be installed. Then,
do untrace would cause a failure because the second time that the
lambda expression was looked at it would contain no advice of that type.
Chris Hanson [Thu, 30 Apr 1987 22:56:49 +0000 (22:56 +0000)]
In `Keyboard_Input_Procedure', the test for interrupts just before
calling `getchar' was only looking for `INT_Character'. Expand this
to include `INT_Timer' as well, since that was causing a problem for
Mitch Resnick. Why is this restricting which interrupts it looks at?
A priori, I would think it should look at all interrupts.
Chris Hanson [Mon, 27 Apr 1987 14:21:48 +0000 (14:21 +0000)]
`make-non-pointer-literal' was not being careful to handle negative
`datum' values correctly, resulting in the type code of the literal
being off by one.
Chris Hanson [Fri, 24 Apr 1987 13:37:27 +0000 (13:37 +0000)]
Change stack parser, unparser, and pretty-printer to handle
reference-trap objects specially, detecting them before they get
assigned to variables, and printing them in a reasonable way.
Chris Hanson [Tue, 21 Apr 1987 15:22:08 +0000 (15:22 +0000)]
Change string_to_symbol to compute the correct argument to
Primitive_GC. Previously it was using (Memtop - Free) which could
have been negative (and we saw at least one case where something like
that had happened).
Chris Hanson [Tue, 21 Apr 1987 14:23:43 +0000 (14:23 +0000)]
Solution to constant folding problem is overly conservative. Earlier
change (which guaranteed that the combination-value became unknown
when the operator or operands were) is sufficient.
Chris Hanson [Sat, 18 Apr 1987 00:26:35 +0000 (00:26 +0000)]
When building a closure frame, do not attempt to lookup variables
which are integrated, as it will cause an error. This is probably not
needed given the change which has been made elsewhere which deletes
such variables from the closure block previous to this point.
Chris Hanson [Sat, 18 Apr 1987 00:22:35 +0000 (00:22 +0000)]
Change the analysis performed to determine whether a variable has been
assigned. Do not treat auxiliary bindings specially, except those
that have been identified as having constant or procedure values.
This unfortunately produces less efficient code, but guarantees that
there will be no troubles with the order of events when creating
closures.
Chris Hanson [Sat, 18 Apr 1987 00:18:35 +0000 (00:18 +0000)]
If a combination's value is constant, do not replace it by the
constant value, because we have no side-effect analyzer to determine
whether that is safe.
Chris Hanson [Sat, 18 Apr 1987 00:15:53 +0000 (00:15 +0000)]
`goto-command', when selecting a subproblem with no reductions, tried
to set the reduction number to 1, rather than 0. This previously
"worked" because
Chris Hanson [Fri, 17 Apr 1987 00:54:28 +0000 (00:54 +0000)]
Loop which was walking around reductions used `eq?' to test for
termination. Because the arguments to `eq?' were variables, the
variable lookup code was stripping the danger bits off of the values.
The new microcode does not do this so it was necessary to explicitly
strip the danger bits off in the appropriate places.