diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2019-10-25 07:43:34 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2019-10-25 07:43:34 -0700 |
commit | 61ced41f38712e1fc3350480a9812f49bc7de33f (patch) | |
tree | 3990202e5e3735f81eec778cee9218b16318fdd7 | |
parent | 88ad8140418043da590f5e79c2599b19683c843b (diff) | |
download | txr-61ced41f38712e1fc3350480a9812f49bc7de33f.tar.gz txr-61ced41f38712e1fc3350480a9812f49bc7de33f.tar.bz2 txr-61ced41f38712e1fc3350480a9812f49bc7de33f.zip |
circle notation: use faster access in backpatch.
* parser.c (circ_backpatch): Since we know that we have a CONS
or VEC object, use direct access instead of going through
type-safe accessors.
-rw-r--r-- | parser.c | 12 |
1 files changed, 5 insertions, 7 deletions
@@ -280,18 +280,17 @@ tail: switch (type(obj)) { case CONS: { - val a = car(obj); - val d = cdr(obj); + us_cons_bind(a, d, obj); val ra = patch_ref(p, a); val rd = patch_ref(p, d); if (ra) - rplaca(obj, ra); + us_rplaca(obj, ra); else circ_backpatch(p, &cs, a); if (rd) { - rplacd(obj, rd); + us_rplacd(obj, rd); break; } @@ -304,11 +303,10 @@ tail: cnum l = c_num(length_vec(obj)); for (i = 0; i < l; i++) { - val in = num(i); - val v = vecref(obj, in); + val v = obj->v.vec[i]; val rv = patch_ref(p, v); if (rv) - set(vecref_l(obj, in), rv); + set(mkloc(obj->v.vec[i], obj), rv); else circ_backpatch(p, &cs, v); if (!p->circ_count) |