aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-05-18 18:05:03 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-05-18 18:05:03 -0700
commit39016c1d3e4fe3cc579a5c0c5aea696401562900 (patch)
tree8000d615230c92bffb41d7ebf29f1e34a6587d27 /src/parser.cpp
parentf6b16c99ba44cf1cb6d5ea106093e426e6623443 (diff)
downloadzig-39016c1d3e4fe3cc579a5c0c5aea696401562900.tar.gz
zig-39016c1d3e4fe3cc579a5c0c5aea696401562900.zip
fix offset map for inline assembly error messages
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index d30fcb8f65..057d162fc7 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -267,6 +267,29 @@ static void parse_string_literal(ParseContext *pc, Token *token, Buf *buf, bool
}
const char *str = buf_ptr(pc->buf) + token->raw_string_start;
buf_init_from_mem(buf, str, token->raw_string_end - token->raw_string_start);
+ if (offset_map) {
+ SrcPos pos = {token->start_line, token->start_column};
+ for (int i = token->start_pos; i < token->raw_string_start; i += 1) {
+ uint8_t c = buf_ptr(pc->buf)[i];
+ if (c == '\n') {
+ pos.line += 1;
+ pos.column = 0;
+ } else {
+ pos.column += 1;
+ }
+ }
+ for (int i = token->raw_string_start; i < token->raw_string_end; i += 1) {
+ offset_map->append(pos);
+
+ uint8_t c = buf_ptr(pc->buf)[i];
+ if (c == '\n') {
+ pos.line += 1;
+ pos.column = 0;
+ } else {
+ pos.column += 1;
+ }
+ }
+ }
return;
}