diff --git a/assemble.rkt b/assemble.rkt index e2f8f68..dbdebeb 100644 --- a/assemble.rkt +++ b/assemble.rkt @@ -360,8 +360,7 @@ EOF (assemble-display-name (MakeCompiledProcedureShell-display-name op)))] [(ApplyPrimitiveProcedure? op) - (format "MACHINE.proc(MACHINE, ~a)" - (ApplyPrimitiveProcedure-arity op))] + (format "MACHINE.proc(MACHINE, MACHINE.argcount)")] [(GetControlStackLabel? op) (format "MACHINE.control[MACHINE.control.length-1].label")] diff --git a/compile.rkt b/compile.rkt index a032164..d3a58f2 100644 --- a/compile.rkt +++ b/compile.rkt @@ -825,7 +825,7 @@ (make-instruction-sequence `(,(make-PerformStatement (make-CheckPrimitiveArity! (make-Reg 'argcount))) ,(make-AssignPrimOpStatement 'val - (make-ApplyPrimitiveProcedure number-of-arguments)) + (make-ApplyPrimitiveProcedure)) ,(make-PopEnvironment number-of-arguments 0) ,(make-AssignImmediateStatement target (make-Reg 'val)))) (LabelLinkage-label after-call))))))) diff --git a/il-structs.rkt b/il-structs.rkt index 4628936..24c178e 100644 --- a/il-structs.rkt +++ b/il-structs.rkt @@ -170,9 +170,9 @@ ;; Applies the primitive procedure that's stored in the proc register, using -;; the arity number of values that are bound in the environment as arguments +;; the argcount number of values that are bound in the environment as arguments ;; to that primitive. -(define-struct: ApplyPrimitiveProcedure ([arity : Natural]) +(define-struct: ApplyPrimitiveProcedure () #:transparent) diff --git a/simulator.rkt b/simulator.rkt index f21337d..264aceb 100644 --- a/simulator.rkt +++ b/simulator.rkt @@ -397,7 +397,7 @@ (let: ([prim : SlotValue (machine-proc m)] [args : (Listof PrimitiveValue) (map ensure-primitive-value (take (machine-env m) - (ApplyPrimitiveProcedure-arity op)))]) + (ensure-natural (machine-argcount m))))]) (cond [(primitive-proc? prim) (target-updater! m (ensure-primitive-value diff --git a/test-assemble.rkt b/test-assemble.rkt index 31f3e75..79e8ad7 100644 --- a/test-assemble.rkt +++ b/test-assemble.rkt @@ -153,8 +153,8 @@ (make-Const 3)) (make-AssignImmediateStatement (make-EnvLexicalReference 1 #f) (make-Const 4)) - (make-AssignPrimOpStatement 'val - (make-ApplyPrimitiveProcedure 2)) + (make-AssignImmediateStatement 'argcount (make-Const 2)) + (make-AssignPrimOpStatement 'val (make-ApplyPrimitiveProcedure)) 'done)) "7") diff --git a/test-simulator.rkt b/test-simulator.rkt index 354f5bf..1373558 100644 --- a/test-simulator.rkt +++ b/test-simulator.rkt @@ -475,7 +475,8 @@ ,(make-PushEnvironment 2 #f) ,(make-AssignImmediateStatement (make-EnvLexicalReference 0 #f) (make-Const 126389)) ,(make-AssignImmediateStatement (make-EnvLexicalReference 1 #f) (make-Const 42)) - ,(make-AssignPrimOpStatement 'val (make-ApplyPrimitiveProcedure 2)) + ,(make-AssignImmediateStatement 'argcount (make-Const 2)) + ,(make-AssignPrimOpStatement 'val (make-ApplyPrimitiveProcedure)) after))]) (test (machine-val (run m)) (+ 126389 42))