summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-11-26 18:07:38 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-11-26 18:07:38 -0800
commit92514021697a83be8332457b3dcc437f029ee786 (patch)
tree10788c646eebf606dc4da498988693b8b4ddd636
parentff9efa28206ca7c6aaaedbe0418106867868d129 (diff)
downloadtxr-92514021697a83be8332457b3dcc437f029ee786.tar.gz
txr-92514021697a83be8332457b3dcc437f029ee786.tar.bz2
txr-92514021697a83be8332457b3dcc437f029ee786.zip
* parser.y (expr): Set source location info on elements.
(strlit): Set location info.
-rw-r--r--ChangeLog5
-rw-r--r--parser.y19
2 files changed, 17 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index 5265f36e..79d36059 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2011-11-26 Kaz Kylheku <kaz@kylheku.com>
+ * parser.y (expr): Set source location info on elements.
+ (strlit): Set location info.
+
+2011-11-26 Kaz Kylheku <kaz@kylheku.com>
+
* match.c (subst_vars): Handle expr_s, so that
Lisp expressions can be interpolated into quasiliterals.
(extract_vars): Avoid recursing into expressions marked
diff --git a/parser.y b/parser.y
index 7a5730ea..37d6af35 100644
--- a/parser.y
+++ b/parser.y
@@ -623,17 +623,21 @@ exprs_opt : exprs { $$ = $1; }
| /* empty */ { $$ = nil; }
;
-expr : IDENT { $$ = intern(string_own($1), nil); }
- | KEYWORD { $$ = intern(string_own($1),
- keyword_package); }
+expr : IDENT { $$ = rl(intern(string_own($1), nil),
+ num(lineno)); }
+ | KEYWORD { $$ = rl(intern(string_own($1),
+ keyword_package),
+ num(lineno)); }
| METAVAR { $$ = list(var_s,
- intern(string_own($1), nil), nao); }
+ intern(string_own($1), nil), nao);
+ rl($$, num(lineno)); }
| NUMBER { $$ = num($1); }
| list { $$ = $1; }
| meta_expr { $$ = $1; }
| regex { $$ = cons(regex_compile(rest($1)),
- rest($1)); }
- | chrlit { $$ = $1; }
+ rest($1));
+ rlcp($$, $1); }
+ | chrlit { $$ = rl($1, num(lineno)); }
| strlit { $$ = $1; }
| quasilit { $$ = $1; }
;
@@ -714,7 +718,8 @@ newl : '\n'
;
strlit : '"' '"' { $$ = null_string; }
- | '"' litchars '"' { $$ = lit_char_helper($2); }
+ | '"' litchars '"' { $$ = lit_char_helper($2);
+ rl($$, num(lineno)); }
| '"' error { $$ = nil;
yybadtoken(yychar, lit("string literal")); }
;