summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--parser.y19
1 files changed, 7 insertions, 12 deletions
diff --git a/parser.y b/parser.y
index 595bf8ff..33d850dc 100644
--- a/parser.y
+++ b/parser.y
@@ -1232,23 +1232,18 @@ wordsqlit : '`' { $$ = nil; }
buflit : HASH_B_QUOTE '\'' { $$ = make_buf(zero, nil, nil);
end_of_buflit(scnr); }
- | HASH_B_QUOTE buflit_items '\'' { val len = length($2);
- val bytes = nreverse($2);
- val buf = make_buf(len, nil, nil);
- cnum i;
- end_of_buflit(scnr);
-
- for (i = 0; i < c_num(len); i++)
- { buf_put_u8(buf, num(i),
- pop(&bytes)); }
- $$ = buf; }
+ | HASH_B_QUOTE buflit_items '\'' { end_of_buflit(scnr);
+ buf_trim($2);
+ $$ = $2; }
| HASH_B_QUOTE error { yyerr("unterminated buffer literal");
end_of_buflit(scnr);
yyerrok; }
;
-buflit_items : buflit_items buflit_item { $$ = cons($2, $1); }
- | buflit_item { $$ = cons($1, nil); }
+buflit_items : buflit_items buflit_item { buf_put_u8($1, length_buf($$), $2);
+ $$ = $1; }
+ | buflit_item { $$ = make_buf(zero, nil, num_fast(512));
+ buf_put_u8($$, zero, $1); }
;
buflit_item : LITCHAR LITCHAR { $$ = num($1 << 4 | $2); }