Модифицируем вычислитель
В этом разделе рассказывалось, как модифицировать вычислитель с явным управлением и позволить интерпретируемому коду вызывать скомпилированные процедуры. Покажите, как можно изменить компилятор и позволить скомпилированным процедурам вызывать не только элементарные и скомпилированные процедуры, но и интерпретируемые. При этом придется изменить compile-procedure-call так, чтобы обрабатывался случай составных (интерпретируемых) процедур. Проследите, чтобы обрабатывались все те же сочетания target и linkage , что и в compile-proc-appl . Для того, чтобы произвести собственно применение процедуры, код должен переходить на точку входа compound-apply вычислителя. На эту метку нельзя напрямую ссылаться из объектного кода (потому что ассемблер требует, чтобы все метки, на которые явно ссылается объектный код, в нем и определялись), так что придется добавить в машину-вычислитель специальный регистр compapp , в котором будет храниться эта точка входа, и команду для его инициализации:
(assign compapp (label compound-apply))
;; branches if flag is set:
(branch (label external-entry))
read-eval-print-loop …
Чтобы проверить свой код, для начала определите процедуру f , которая вызывает процедуру g . С помощью compile-and-go скомпилируйте определение f и запустите вычислитель. Теперь, вводя код для интерпретации, определите g и попробуйте вызвать f .
Комментарии отсутствуют.