From 2b56c90c2cceb85a8180665559d63fd70fae64d6 Mon Sep 17 00:00:00 2001 From: Danny Yoo Date: Tue, 8 Mar 2011 03:13:26 -0500 Subject: [PATCH] continuing to work on recursion --- simulator-structs.rkt | 3 ++- simulator.rkt | 19 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/simulator-structs.rkt b/simulator-structs.rkt index c207343..609c6ba 100644 --- a/simulator-structs.rkt +++ b/simulator-structs.rkt @@ -32,7 +32,8 @@ #:transparent) (define-struct: toplevel ([vals : (Listof PrimitiveValue)]) - #:transparent) + #:transparent + #:mutable) diff --git a/simulator.rkt b/simulator.rkt index a18551b..381c519 100644 --- a/simulator.rkt +++ b/simulator.rkt @@ -147,11 +147,10 @@ (let: ([op : PrimitiveCommand (PerformStatement-op stmt)]) (cond [(SetToplevel!? op) - (env-mutate m - (SetToplevel!-depth op) - (toplevel-mutate (ensure-toplevel (env-ref m (SetToplevel!-depth op))) - (SetToplevel!-pos op) - (ensure-primitive-value (machine-val m))))] + (toplevel-mutate! (ensure-toplevel (env-ref m (SetToplevel!-depth op))) + (SetToplevel!-pos op) + (ensure-primitive-value (machine-val m))) + m] [(CheckToplevelBound!? op) (let: ([a-top : toplevel (ensure-toplevel (env-ref m (CheckToplevelBound!-depth op)))]) @@ -444,8 +443,8 @@ (loop (add1 i))]))) -(: toplevel-mutate (toplevel Natural PrimitiveValue -> toplevel)) -(define (toplevel-mutate a-top index v) - (make-toplevel (append (take (toplevel-vals a-top) index) - (list v) - (drop (toplevel-vals a-top) (add1 index))))) +(: toplevel-mutate! (toplevel Natural PrimitiveValue -> Void)) +(define (toplevel-mutate! a-top index v) + (set-toplevel-vals! a-top (append (take (toplevel-vals a-top) index) + (list v) + (drop (toplevel-vals a-top) (add1 index)))))