Skip to content

Commit

Permalink
Show origin of expansion in diagnostics for synthesized code.
Browse files Browse the repository at this point in the history
  • Loading branch information
whitequark committed Aug 7, 2015
1 parent 50448ef commit a7633f7
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 4 deletions.
8 changes: 5 additions & 3 deletions artiq/compiler/embedding.py
Expand Up @@ -12,9 +12,10 @@


class ASTSynthesizer:
def __init__(self):
def __init__(self, expanded_from=None):
self.source = ""
self.source_buffer = source.Buffer(self.source, "<synthesized>")
self.expanded_from = expanded_from

def finalize(self):
self.source_buffer.source = self.source
Expand All @@ -24,7 +25,8 @@ def _add(self, fragment):
range_from = len(self.source)
self.source += fragment
range_to = len(self.source)
return source.Range(self.source_buffer, range_from, range_to)
return source.Range(self.source_buffer, range_from, range_to,
expanded_from=self.expanded_from)

def quote(self, value):
"""Construct an AST fragment equal to `value`."""
Expand Down Expand Up @@ -128,7 +130,7 @@ def visit_Name(self, node):

else:
# It's just a value. Quote it.
synthesizer = ASTSynthesizer()
synthesizer = ASTSynthesizer(expanded_from=node.loc)
node = synthesizer.quote(value)
synthesizer.finalize()
return node
Expand Down
5 changes: 4 additions & 1 deletion artiq/compiler/transforms/inferencer.py
Expand Up @@ -76,9 +76,12 @@ def makenotes(printer, typea, typeb, loca, locb):

def visit_ListT(self, node):
self.generic_visit(node)
elt_type_loc = node.loc
for elt in node.elts:
self._unify(node.type["elt"], elt.type,
node.loc, elt.loc, self._makenotes_elts(node.elts, "a list element"))
elt_type_loc, elt.loc,
self._makenotes_elts(node.elts, "a list element"))
elt_type_loc = elt.loc

def visit_AttributeT(self, node):
self.generic_visit(node)
Expand Down

0 comments on commit a7633f7

Please sign in to comment.