From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45637) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL1pl-00059h-L4 for qemu-devel@nongnu.org; Tue, 04 Mar 2014 21:45:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WL1pe-0007sX-UT for qemu-devel@nongnu.org; Tue, 04 Mar 2014 21:45:25 -0500 Received: from mail-pb0-x236.google.com ([2607:f8b0:400e:c01::236]:49579) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL1pe-0007sN-BA for qemu-devel@nongnu.org; Tue, 04 Mar 2014 21:45:18 -0500 Received: by mail-pb0-f54.google.com with SMTP id ma3so427230pbc.27 for ; Tue, 04 Mar 2014 18:45:17 -0800 (PST) From: Wenchao Xia Date: Tue, 4 Mar 2014 18:44:33 -0800 Message-Id: <1393987480-37579-4-git-send-email-wenchaoqemu@gmail.com> In-Reply-To: <1393987480-37579-1-git-send-email-wenchaoqemu@gmail.com> References: <1393987480-37579-1-git-send-email-wenchaoqemu@gmail.com> Subject: [Qemu-devel] [PATCH V9 03/10] qapi script: remember line number in schema parsing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: kwolf@redhat.com, Wenchao Xia , mdroth@linux.vnet.ibm.com, armbru@redhat.com, lcapitulino@redhat.com 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 Reviewed-by: Eric Blake --- 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) -- 1.7.1