getting rid of primitive procedures
This commit is contained in:
parent
ad83451030
commit
9e11017b7e
|
@ -1417,9 +1417,9 @@
|
|||
linkage
|
||||
cenv
|
||||
(append-instruction-sequences
|
||||
(make-TestAndJumpStatement (make-TestPrimitiveProcedure
|
||||
(make-Reg 'proc))
|
||||
primitive-branch)
|
||||
;; (make-TestAndJumpStatement (make-TestPrimitiveProcedure
|
||||
;; (make-Reg 'proc))
|
||||
;; primitive-branch)
|
||||
|
||||
|
||||
;; Compiled branch
|
||||
|
@ -1431,24 +1431,24 @@
|
|||
compiled-linkage)
|
||||
|
||||
;; Primitive branch
|
||||
primitive-branch
|
||||
(make-PerformStatement (make-CheckPrimitiveArity! (make-Reg 'argcount)))
|
||||
(compile-primitive-application cenv target primitive-linkage)
|
||||
;; primitive-branch
|
||||
;; (make-PerformStatement (make-CheckPrimitiveArity! (make-Reg 'argcount)))
|
||||
;; (compile-primitive-application cenv target primitive-linkage)
|
||||
after-call)))))
|
||||
|
||||
|
||||
|
||||
(: compile-primitive-application (CompileTimeEnvironment Target Linkage -> InstructionSequence))
|
||||
(define (compile-primitive-application cenv target linkage)
|
||||
(let ([singular-context-check (emit-singular-context linkage)])
|
||||
(append-instruction-sequences
|
||||
(make-AssignPrimOpStatement 'val (make-ApplyPrimitiveProcedure))
|
||||
(make-PopEnvironment (make-Reg 'argcount)
|
||||
(make-Const 0))
|
||||
(if (eq? target 'val)
|
||||
empty-instruction-sequence
|
||||
(make-AssignImmediateStatement target (make-Reg 'val)))
|
||||
singular-context-check)))
|
||||
;; (: compile-primitive-application (CompileTimeEnvironment Target Linkage -> InstructionSequence))
|
||||
;; (define (compile-primitive-application cenv target linkage)
|
||||
;; (let ([singular-context-check (emit-singular-context linkage)])
|
||||
;; (append-instruction-sequences
|
||||
;; (make-AssignPrimOpStatement 'val (make-ApplyPrimitiveProcedure))
|
||||
;; (make-PopEnvironment (make-Reg 'argcount)
|
||||
;; (make-Const 0))
|
||||
;; (if (eq? target 'val)
|
||||
;; empty-instruction-sequence
|
||||
;; (make-AssignImmediateStatement target (make-Reg 'val)))
|
||||
;; singular-context-check)))
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -159,17 +159,17 @@
|
|||
|
||||
|
||||
;; Simple application
|
||||
(test (E-many (list (make-PerformStatement (make-ExtendEnvironment/Prefix! '(+)))
|
||||
(make-AssignImmediateStatement 'proc (make-EnvPrefixReference 0 0))
|
||||
(make-PushEnvironment 2 #f)
|
||||
(make-AssignImmediateStatement (make-EnvLexicalReference 0 #f)
|
||||
(make-Const 3))
|
||||
(make-AssignImmediateStatement (make-EnvLexicalReference 1 #f)
|
||||
(make-Const 4))
|
||||
(make-AssignImmediateStatement 'argcount (make-Const 2))
|
||||
(make-AssignPrimOpStatement 'val (make-ApplyPrimitiveProcedure))
|
||||
'done))
|
||||
"7")
|
||||
;; (test (E-many (list (make-PerformStatement (make-ExtendEnvironment/Prefix! '(+)))
|
||||
;; (make-AssignImmediateStatement 'proc (make-EnvPrefixReference 0 0))
|
||||
;; (make-PushEnvironment 2 #f)
|
||||
;; (make-AssignImmediateStatement (make-EnvLexicalReference 0 #f)
|
||||
;; (make-Const 3))
|
||||
;; (make-AssignImmediateStatement (make-EnvLexicalReference 1 #f)
|
||||
;; (make-Const 4))
|
||||
;; (make-AssignImmediateStatement 'argcount (make-Const 2))
|
||||
;; (make-AssignPrimOpStatement 'val (make-ApplyPrimitiveProcedure))
|
||||
;; 'done))
|
||||
;; "7")
|
||||
|
||||
|
||||
|
||||
|
@ -325,16 +325,16 @@
|
|||
end))
|
||||
"ok")
|
||||
|
||||
;; Give a primitive procedure in val
|
||||
(test (E-many `(,(make-PerformStatement (make-ExtendEnvironment/Prefix! '(+)))
|
||||
,(make-AssignImmediateStatement 'val (make-EnvPrefixReference 0 0))
|
||||
,(make-TestAndJumpStatement (make-TestPrimitiveProcedure (make-Reg 'val)) 'onTrue)
|
||||
,(make-AssignImmediateStatement 'val (make-Const 'not-ok))
|
||||
,(make-GotoStatement (make-Label 'end))
|
||||
onTrue
|
||||
,(make-AssignImmediateStatement 'val (make-Const 'ok))
|
||||
end))
|
||||
"ok")
|
||||
;; ;; Give a primitive procedure in val
|
||||
;; (test (E-many `(,(make-PerformStatement (make-ExtendEnvironment/Prefix! '(+)))
|
||||
;; ,(make-AssignImmediateStatement 'val (make-EnvPrefixReference 0 0))
|
||||
;; ,(make-TestAndJumpStatement (make-TestPrimitiveProcedure (make-Reg 'val)) 'onTrue)
|
||||
;; ,(make-AssignImmediateStatement 'val (make-Const 'not-ok))
|
||||
;; ,(make-GotoStatement (make-Label 'end))
|
||||
;; onTrue
|
||||
;; ,(make-AssignImmediateStatement 'val (make-Const 'ok))
|
||||
;; end))
|
||||
;; "ok")
|
||||
|
||||
;; Give a primitive procedure in proc, but test val
|
||||
(test (E-many `(,(make-PerformStatement (make-ExtendEnvironment/Prefix! '(+)))
|
||||
|
@ -347,16 +347,16 @@
|
|||
end))
|
||||
"not-a-procedure")
|
||||
|
||||
;; Give a primitive procedure in proc and test proc
|
||||
(test (E-many `(,(make-PerformStatement (make-ExtendEnvironment/Prefix! '(+)))
|
||||
,(make-AssignImmediateStatement 'proc (make-EnvPrefixReference 0 0))
|
||||
,(make-TestAndJumpStatement (make-TestPrimitiveProcedure (make-Reg 'proc)) 'onTrue)
|
||||
,(make-AssignImmediateStatement 'val (make-Const 'not-a-procedure))
|
||||
,(make-GotoStatement (make-Label 'end))
|
||||
onTrue
|
||||
,(make-AssignImmediateStatement 'val (make-Const 'a-procedure))
|
||||
end))
|
||||
"a-procedure")
|
||||
;; ;; Give a primitive procedure in proc and test proc
|
||||
;; (test (E-many `(,(make-PerformStatement (make-ExtendEnvironment/Prefix! '(+)))
|
||||
;; ,(make-AssignImmediateStatement 'proc (make-EnvPrefixReference 0 0))
|
||||
;; ,(make-TestAndJumpStatement (make-TestPrimitiveProcedure (make-Reg 'proc)) 'onTrue)
|
||||
;; ,(make-AssignImmediateStatement 'val (make-Const 'not-a-procedure))
|
||||
;; ,(make-GotoStatement (make-Label 'end))
|
||||
;; onTrue
|
||||
;; ,(make-AssignImmediateStatement 'val (make-Const 'a-procedure))
|
||||
;; end))
|
||||
;; "a-procedure")
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user