1645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Copyright 2014 The Chromium Authors. All rights reserved. 2645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# Use of this source code is governed by a BSD-style license that can be 3645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez# found in the LICENSE file. 4645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 5645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavezclass Error(Exception): 6645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """Base class for Mojo IDL bindings parser/generator errors.""" 7645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 8645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez def __init__(self, filename, message, lineno=None, addenda=None, **kwargs): 9645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez """|filename| is the (primary) file which caused the error, |message| is the 10645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez error message, |lineno| is the 1-based line number (or |None| if not 11645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez applicable/available), and |addenda| is a list of additional lines to append 12645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez to the final error message.""" 13645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez Exception.__init__(self, **kwargs) 14645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez self.filename = filename 15645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez self.message = message 16645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez self.lineno = lineno 17645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez self.addenda = addenda 18645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 19645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez def __str__(self): 20645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez if self.lineno: 21645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez s = "%s:%d: Error: %s" % (self.filename, self.lineno, self.message) 22645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez else: 23645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez s = "%s: Error: %s" % (self.filename, self.message) 24645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return "\n".join([s] + self.addenda) if self.addenda else s 25645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez 26645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez def __repr__(self): 27645501c2ab19a559ce82a1d5a29ced159a4c30fbLuis Hector Chavez return str(self) 28