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 | 1877038efc3a0614bc3032f982f5b10db38f661d (patch) | |
tree | 3990202e5e3735f81eec778cee9218b16318fdd7 | |
parent | 41b9e4324df84869611c664ced877e2bc5d959ae (diff) | |
download | txr-1877038efc3a0614bc3032f982f5b10db38f661d.tar.gz txr-1877038efc3a0614bc3032f982f5b10db38f661d.tar.bz2 txr-1877038efc3a0614bc3032f982f5b10db38f661d.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) |