diff options
author | Wenchao Xia <wenchaoqemu@gmail.com> | 2014-03-04 18:44:33 -0800 |
---|---|---|
committer | Luiz Capitulino <lcapitulino@redhat.com> | 2014-03-11 09:07:41 -0400 |
commit | 515b943a91db6c9faf9e35377c18db9ca32ecb40 (patch) | |
tree | b851f9774508a2f7c3e5cdb95e802621d3f44e78 /scripts | |
parent | 4b35991a3bd5f9e03333d5b1bd4a7bcf9941aac5 (diff) | |
download | qemu-515b943a91db6c9faf9e35377c18db9ca32ecb40.zip qemu-515b943a91db6c9faf9e35377c18db9ca32ecb40.tar.gz qemu-515b943a91db6c9faf9e35377c18db9ca32ecb40.tar.bz2 |
qapi script: remember line number in schema parsing
Before this patch, 'QAPISchemaError' scans whole input until 'pos'
to get error line number. After this patch, the scan is avoided since
line number is remembered in schema parsing. This patch also benefits
other error report functions, which would be introduced later.
Signed-off-by: Wenchao Xia <wenchaoqemu@gmail.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/qapi.py | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/scripts/qapi.py b/scripts/qapi.py index d0e7934..1954292 100644 --- a/scripts/qapi.py +++ b/scripts/qapi.py @@ -39,12 +39,10 @@ class QAPISchemaError(Exception): def __init__(self, schema, msg): self.fp = schema.fp self.msg = msg - self.line = self.col = 1 - for ch in schema.src[0:schema.pos]: - if ch == '\n': - self.line += 1 - self.col = 1 - elif ch == '\t': + self.col = 1 + self.line = schema.line + for ch in schema.src[schema.line_pos:schema.pos]: + if ch == '\t': self.col = (self.col + 7) % 8 + 1 else: self.col += 1 @@ -60,6 +58,8 @@ class QAPISchema: if self.src == '' or self.src[-1] != '\n': self.src += '\n' self.cursor = 0 + self.line = 1 + self.line_pos = 0 self.exprs = [] self.accept() @@ -100,6 +100,8 @@ class QAPISchema: if self.cursor == len(self.src): self.tok = None return + self.line += 1 + self.line_pos = self.cursor elif not self.tok.isspace(): raise QAPISchemaError(self, 'Stray "%s"' % self.tok) |