diff options
-rw-r--r-- | autoload.c | 2 | ||||
-rw-r--r-- | stdlib/defset.tl | 8 | ||||
-rw-r--r-- | stdlib/place.tl | 8 |
3 files changed, 9 insertions, 9 deletions
@@ -102,6 +102,7 @@ static val place_set_entries(val fun) lit("with-delete-expander"), lit("set"), lit("pset"), lit("zap"), lit("flip"), lit("inc"), lit("dec"), lit("pinc"), lit("pdec"), + lit("set-mask"), lit("clear-mask"), lit("push"), lit("pop"), lit("swap"), lit("shift"), lit("rotate"), lit("test-set"), lit("test-clear"), lit("compare-swap"), lit("test-inc"), lit("test-dec"), @@ -750,7 +751,6 @@ static val defset_set_entries(val fun) val name[] = { lit("defset"), lit("sub-list"), lit("sub-vec"), lit("sub-str"), lit("left"), lit("right"), lit("key"), - lit("set-mask"), lit("clear-mask"), nil }; autoload_set(al_fun, name, fun); diff --git a/stdlib/defset.tl b/stdlib/defset.tl index 634f9371..489bbd57 100644 --- a/stdlib/defset.tl +++ b/stdlib/defset.tl @@ -130,11 +130,3 @@ (defset key (node) nkey ^(progn (set-key ,node ,nkey) ,nkey)) - -(defmacro set-mask (:env env place . integers) - (with-update-expander (getter setter) place env - ^(,setter (logior (,getter) ,*integers)))) - -(defmacro clear-mask (:env env place . integers) - (with-update-expander (getter setter) place env - ^(,setter (logand (,getter) (lognot (logior ,*integers)))))) diff --git a/stdlib/place.tl b/stdlib/place.tl index ae8b5b5d..993dd75c 100644 --- a/stdlib/place.tl +++ b/stdlib/place.tl @@ -275,6 +275,14 @@ (3 ^(let ((,oldval (,getter))) (,setter (pppred ,oldval)) ,oldval)) (t ^(let ((,oldval (,getter))) (,setter (- ,oldval, delta)) ,oldval)))))) +(defmacro set-mask (:env env place . integers) + (with-update-expander (getter setter) place env + ^(,setter (logior (,getter) ,*integers)))) + +(defmacro clear-mask (:env env place . integers) + (with-update-expander (getter setter) place env + ^(,setter (logand (,getter) (lognot (logior ,*integers)))))) + (defmacro swap (place-0 place-1 :env env) (with-gensyms (tmp) (with-update-expander (getter-0 setter-0) place-0 env |