From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42608) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WIyrC-0002ea-5W for qemu-devel@nongnu.org; Thu, 27 Feb 2014 06:10:32 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WIyr5-00061x-Cd for qemu-devel@nongnu.org; Thu, 27 Feb 2014 06:10:26 -0500 Received: from mail-pd0-x235.google.com ([2607:f8b0:400e:c02::235]:39465) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WIyr5-00061a-3l for qemu-devel@nongnu.org; Thu, 27 Feb 2014 06:10:19 -0500 Received: by mail-pd0-f181.google.com with SMTP id p10so2278683pdj.26 for ; Thu, 27 Feb 2014 03:10:18 -0800 (PST) From: Wenchao Xia Date: Thu, 27 Feb 2014 03:09:29 -0800 Message-Id: <1393499376-4374-4-git-send-email-wenchaoqemu@gmail.com> In-Reply-To: <1393499376-4374-1-git-send-email-wenchaoqemu@gmail.com> References: <1393499376-4374-1-git-send-email-wenchaoqemu@gmail.com> Subject: [Qemu-devel] [PATCH V8 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, Wenchao Xia From: Wenchao Xia 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 Signed-off-by: Wenchao Xia --- 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