Previously, if an exception was encountered anywhere, nir_algebraic would just die in a fire with no indication whatsoever as to where the actual bug is. This commit makes it print out the particular search-and-replace expression that is causing problems along with the exception. Also, it will now report all of the errors it finds and then exit at the end like a standard C compiler would do.
Cc: Dylan Baker <baker.dyla...@gmail.com> --- src/compiler/nir/nir_algebraic.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py index 7697171..3f770b6 100644 --- a/src/compiler/nir/nir_algebraic.py +++ b/src/compiler/nir/nir_algebraic.py @@ -24,11 +24,13 @@ # Authors: # Jason Ekstrand (ja...@jlekstrand.net) +from __future__ import print_function import itertools import struct import sys import mako.template import re +import traceback # Represents a set of variables, each with a unique id class VarSet(object): @@ -311,15 +313,28 @@ class AlgebraicPass(object): self.xform_dict = {} self.pass_name = pass_name + error = False + for xform in transforms: if not isinstance(xform, SearchAndReplace): - xform = SearchAndReplace(xform) + try: + xform = SearchAndReplace(xform) + except: + print("Failed to parse transformation:", file=sys.stderr) + print(" " + str(xform), file=sys.stderr) + traceback.print_exc(file=sys.stderr) + print('', file=sys.stderr) + error = True + continue if xform.search.opcode not in self.xform_dict: self.xform_dict[xform.search.opcode] = [] self.xform_dict[xform.search.opcode].append(xform) + if error: + raise RuntimeError("Error parsing transformations") + def render(self): return _algebraic_pass_template.render(pass_name=self.pass_name, xform_dict=self.xform_dict, -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev