summaryrefslogtreecommitdiffstats
path: root/parser.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2019-10-25 07:43:34 -0700
committerKaz Kylheku <kaz@kylheku.com>2019-10-25 07:43:34 -0700
commit61ced41f38712e1fc3350480a9812f49bc7de33f (patch)
tree3990202e5e3735f81eec778cee9218b16318fdd7 /parser.c
parent88ad8140418043da590f5e79c2599b19683c843b (diff)
downloadtxr-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.
Diffstat (limited to 'parser.c')
-rw-r--r--parser.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/parser.c b/parser.c
index 292040fb..c303f9e1 100644
--- a/parser.c
+++ b/parser.c
@@ -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)