broke something
This commit is contained in:
parent
2f90620863
commit
b51858c524
|
@ -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)]))
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
19
assemble.rkt
19
assemble.rkt
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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])
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user