diff --git a/scheme/cyclone/primitives.sld b/scheme/cyclone/primitives.sld index 71e58e8c..1db5f07c 100644 --- a/scheme/cyclone/primitives.sld +++ b/scheme/cyclone/primitives.sld @@ -17,6 +17,7 @@ prim/data-arg? prim/c-var-assign prim/cvar? + prim:mutates? prim:cont? prim:cont/no-args? prim:arg-count? @@ -25,6 +26,22 @@ ; prim? : exp -> boolean (define (prim? exp) (member exp *primitives*)) + + ;; Does primitive mutate any of its arguments? + (define (prim:mutates? exp) + (member + exp + '( + Cyc-set-cvar! + Cyc-spawn-thread! + Cyc-end-thread! + set-global! + set-cell! + set-car! + set-cdr! + string-set! + bytevector-u8-set! + vector-set!))) (define *primitives* '( Cyc-global-vars