diff --git a/collects/macro-debugger/model/deriv-c.ss b/collects/macro-debugger/model/deriv-c.ss
index 1e54bebddd..09eea0eff0 100644
--- a/collects/macro-debugger/model/deriv-c.ss
+++ b/collects/macro-debugger/model/deriv-c.ss
@@ -58,12 +58,12 @@
;; (make-p:#%expression Deriv ?Stx)
;; (make-p:if Boolean Deriv Deriv Deriv)
;; (make-p:wcm Deriv Deriv Deriv)
-;; (make-p:set! Rs Deriv)
+;; (make-p:set! Rs ?Exn Deriv)
;; (make-p:set!-macro Rs Deriv)
(define-struct (p:#%expression prule) (inner untag) #:transparent)
(define-struct (p:if prule) (test then else) #:transparent)
(define-struct (p:wcm prule) (key mark body) #:transparent)
-(define-struct (p:set! prule) (id-resolves rhs) #:transparent)
+(define-struct (p:set! prule) (id-resolves ?2 rhs) #:transparent)
(define-struct (p:set!-macro prule) (deriv) #:transparent)
;; (make-p:#%app Stx LDeriv)
diff --git a/collects/macro-debugger/model/deriv-parser.ss b/collects/macro-debugger/model/deriv-parser.ss
index 17c14f5875..7bb6d7b4f7 100644
--- a/collects/macro-debugger/model/deriv-parser.ss
+++ b/collects/macro-debugger/model/deriv-parser.ss
@@ -486,8 +486,9 @@
(PrimSet
(#:args e1 e2 rs)
- [(prim-set! ! Resolves next (? EE))
- (make p:set! e1 e2 rs $2 $3 $5)]
+ ;; Unrolled to avoid shift/reduce
+ [(prim-set! ! resolve Resolves ! next (? EE))
+ (make p:set! e1 e2 rs $2 (cons $3 $4) $5 $7)]
[(prim-set! Resolves (? MacroStep) (? EE))
(make p:set!-macro e1 e2 rs #f ($3 e1 $2 $4))])
diff --git a/collects/macro-debugger/model/reductions.ss b/collects/macro-debugger/model/reductions.ss
index c5fe47ba06..3cd9fa8308 100644
--- a/collects/macro-debugger/model/reductions.ss
+++ b/collects/macro-debugger/model/reductions.ss
@@ -235,10 +235,11 @@
(R [! ?1]
[#:pattern ?form]
[Expr ?form deriv])]
- [(Wrap p:set! (e1 e2 rs ?1 id-rs rhs))
+ [(Wrap p:set! (e1 e2 rs ?1 id-rs ?2 rhs))
(R [! ?1]
[#:pattern (?set! ?var ?rhs)]
[#:learn id-rs]
+ [! ?2]
[Expr ?rhs rhs])]
;; Macros