broke something

This commit is contained in:
Danny Yoo 2011-04-10 17:27:14 -04:00
parent 2f90620863
commit b51858c524
6 changed files with 26 additions and 36 deletions

View File

@ -12,7 +12,6 @@
assemble-whole-prefix-reference assemble-whole-prefix-reference
assemble-reg assemble-reg
assemble-label assemble-label
assemble-input
assemble-listof-assembled-values) assemble-listof-assembled-values)
@ -30,7 +29,9 @@
[(EnvPrefixReference? v) [(EnvPrefixReference? v)
(assemble-prefix-reference v)] (assemble-prefix-reference v)]
[(EnvWholePrefixReference? v) [(EnvWholePrefixReference? v)
(assemble-whole-prefix-reference v)])) (assemble-whole-prefix-reference v)]
[(SubtractArg? v)
(assemble-subtractarg v)]))
@ -116,20 +117,8 @@
(define (assemble-label a-label) (define (assemble-label a-label)
(symbol->string (Label-name a-label))) (symbol->string (Label-name a-label)))
(: assemble-subtractarg (SubtractArg -> String))
(define (assemble-subtractarg s)
(: assemble-input (OpArg -> String)) (format "(~a - ~a)"
(define (assemble-input an-input) (assemble-oparg (SubtractArg-lhs s))
(cond (assemble-oparg (SubtractArg-rhs s))))
[(Reg? an-input)
(assemble-reg an-input)]
[(Const? an-input)
(assemble-const an-input)]
[(Label? an-input)
(assemble-label an-input)]
[(EnvLexicalReference? an-input)
(assemble-lexical-reference an-input)]
[(EnvPrefixReference? an-input)
(assemble-prefix-reference an-input)]
[(EnvWholePrefixReference? an-input)
(assemble-whole-prefix-reference an-input)]))

View File

@ -14,7 +14,7 @@
(: open-code-kernel-primitive-procedure (CallKernelPrimitiveProcedure -> String)) (: open-code-kernel-primitive-procedure (CallKernelPrimitiveProcedure -> String))
(define (open-code-kernel-primitive-procedure op) (define (open-code-kernel-primitive-procedure op)
(let*: ([operator : KernelPrimitiveName (CallKernelPrimitiveProcedure-operator op)] (let*: ([operator : KernelPrimitiveName (CallKernelPrimitiveProcedure-operator op)]
[operands : (Listof String) (map assemble-input (CallKernelPrimitiveProcedure-operands op))] [operands : (Listof String) (map assemble-oparg (CallKernelPrimitiveProcedure-operands op))]
[checked-operands : (Listof String) [checked-operands : (Listof String)
(map maybe-typecheck-operand (map maybe-typecheck-operand
(CallKernelPrimitiveProcedure-expected-operand-types op) (CallKernelPrimitiveProcedure-expected-operand-types op)

View File

@ -117,7 +117,10 @@ EOF
[(EnvPrefixReference? an-input) [(EnvPrefixReference? an-input)
empty] empty]
[(EnvWholePrefixReference? an-input) [(EnvWholePrefixReference? an-input)
empty])) empty]
[(SubtractArg? an-input)
(append (collect-input (SubtractArg-lhs an-input))
(collect-input (SubtractArg-rhs an-input)))]))
(: collect-location ((U Reg Label) -> (Listof Symbol))) (: collect-location ((U Reg Label) -> (Listof Symbol)))
(define (collect-location a-location) (define (collect-location a-location)
@ -182,19 +185,7 @@ EOF
empty] empty]
[(AssignImmediateStatement? stmt) [(AssignImmediateStatement? stmt)
(let: ([v : OpArg (AssignImmediateStatement-value stmt)]) (let: ([v : OpArg (AssignImmediateStatement-value stmt)])
(cond (collect-input v))]
[(Reg? v)
empty]
[(Label? v)
(list (Label-name v))]
[(Const? v)
empty]
[(EnvLexicalReference? v)
empty]
[(EnvPrefixReference? v)
empty]
[(EnvWholePrefixReference? v)
empty]))]
[(AssignPrimOpStatement? stmt) [(AssignPrimOpStatement? stmt)
(collect-primitive-operator (AssignPrimOpStatement-op stmt))] (collect-primitive-operator (AssignPrimOpStatement-op stmt))]
[(PerformStatement? stmt) [(PerformStatement? stmt)

View File

@ -872,7 +872,7 @@
`(,(make-AssignPrimOpStatement 'val `(,(make-AssignPrimOpStatement 'val
(make-GetCompiledProcedureEntry)))) (make-GetCompiledProcedureEntry))))
(make-instruction-sequence `(,(make-PopEnvironment (make-Const num-slots-to-delete) (make-instruction-sequence `(,(make-PopEnvironment (make-Const num-slots-to-delete)
(make-Const n)))) (make-Reg 'argcount))))
(make-instruction-sequence (make-instruction-sequence
`(;; Assign the proc value of the existing call frame `(;; Assign the proc value of the existing call frame
,(make-PerformStatement ,(make-PerformStatement

View File

@ -26,6 +26,7 @@
EnvLexicalReference ;; a reference into the stack EnvLexicalReference ;; a reference into the stack
EnvPrefixReference ;; a reference into an element in the toplevel. EnvPrefixReference ;; a reference into an element in the toplevel.
EnvWholePrefixReference ;; a reference into a toplevel prefix in the stack. EnvWholePrefixReference ;; a reference into a toplevel prefix in the stack.
SubtractArg
)) ))
@ -44,6 +45,11 @@
(define-struct: Const ([const : Any]) (define-struct: Const ([const : Any])
#:transparent) #:transparent)
;; Limited arithmetic on OpArgs
(define-struct: SubtractArg ([lhs : OpArg]
[rhs : OpArg])
#:transparent)
(define-struct: PrimitivesReference ([name : Symbol]) (define-struct: PrimitivesReference ([name : Symbol])

View File

@ -608,7 +608,11 @@
[else [else
(error 'evaluate-oparg "Internal error: not a toplevel at depth ~s: ~s" (error 'evaluate-oparg "Internal error: not a toplevel at depth ~s: ~s"
(EnvWholePrefixReference-depth an-oparg) (EnvWholePrefixReference-depth an-oparg)
v)]))])) v)]))]
[(SubtractArg? an-oparg)
(- (ensure-number (evaluate-oparg m (SubtractArg-lhs an-oparg)))
(ensure-number (evaluate-oparg m (SubtractArg-rhs an-oparg))))]))
(: ensure-closure-or-false (SlotValue -> (U closure #f))) (: ensure-closure-or-false (SlotValue -> (U closure #f)))