From patchwork Wed Mar 5 02:44:33 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wenchao Xia X-Patchwork-Id: 326570 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 125C32C0317 for ; Wed, 5 Mar 2014 14:27:01 +1100 (EST) Received: from localhost ([::1]:49812 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WL1sB-0007oV-Iw for incoming@patchwork.ozlabs.org; Tue, 04 Mar 2014 21:47:55 -0500 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) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=0yxcrL4T9G8Fi9I/B31FMfCqDo2WW23PkpT6uSRolqQ=; b=PViOWN4+X/QVNxjSvP7wrMfg8AS9fVuw8UX2Mhtb3dL9IEgzFf2xmRUrnSYm0DdoXd UIEvUgRk0ZgvZNabwEVPQe3U0tjsK8ohsVsvIFm8cDRwnwDcun1xv+wd0ABQrwys3XLh Lv3BR3UjqdDCqL/uZxm5XQodxjh3Pj+0UGF1mpfmSOPmPvnLzD6QvqKqmvmkptDHFWaL L7WE0R9cOJB0rxKVUxq3aihOrProx7SBafcW4F5gytYKa4bXN76kAhGLFtM3t08OTNNM AHXWWPj6gut1grcpizdj9UukqJQ7kHU+taz/B5stctv/zdq+QH4OizwmywDTpLytVfEL zP5w== X-Received: by 10.68.164.4 with SMTP id ym4mr3601969pbb.53.1393987517249; Tue, 04 Mar 2014 18:45:17 -0800 (PST) Received: from localhost.localdomain.localdomain ([118.250.22.251]) by mx.google.com with ESMTPSA id gj9sm2197326pbc.7.2014.03.04.18.45.11 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 04 Mar 2014 18:45:16 -0800 (PST) From: Wenchao Xia To: qemu-devel@nongnu.org Date: Tue, 4 Mar 2014 18:44:33 -0800 Message-Id: <1393987480-37579-4-git-send-email-wenchaoqemu@gmail.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1393987480-37579-1-git-send-email-wenchaoqemu@gmail.com> References: <1393987480-37579-1-git-send-email-wenchaoqemu@gmail.com> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c01::236 Cc: kwolf@redhat.com, Wenchao Xia , mdroth@linux.vnet.ibm.com, armbru@redhat.com, lcapitulino@redhat.com Subject: [Qemu-devel] [PATCH V9 03/10] qapi script: remember line number in schema parsing X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org 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)