Skip to content

Commit a7633f7

Browse files
author
whitequark
committedAug 7, 2015
Show origin of expansion in diagnostics for synthesized code.
1 parent 50448ef commit a7633f7

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed
 

Diff for: ‎artiq/compiler/embedding.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212

1313

1414
class ASTSynthesizer:
15-
def __init__(self):
15+
def __init__(self, expanded_from=None):
1616
self.source = ""
1717
self.source_buffer = source.Buffer(self.source, "<synthesized>")
18+
self.expanded_from = expanded_from
1819

1920
def finalize(self):
2021
self.source_buffer.source = self.source
@@ -24,7 +25,8 @@ def _add(self, fragment):
2425
range_from = len(self.source)
2526
self.source += fragment
2627
range_to = len(self.source)
27-
return source.Range(self.source_buffer, range_from, range_to)
28+
return source.Range(self.source_buffer, range_from, range_to,
29+
expanded_from=self.expanded_from)
2830

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

129131
else:
130132
# It's just a value. Quote it.
131-
synthesizer = ASTSynthesizer()
133+
synthesizer = ASTSynthesizer(expanded_from=node.loc)
132134
node = synthesizer.quote(value)
133135
synthesizer.finalize()
134136
return node

Diff for: ‎artiq/compiler/transforms/inferencer.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,12 @@ def makenotes(printer, typea, typeb, loca, locb):
7676

7777
def visit_ListT(self, node):
7878
self.generic_visit(node)
79+
elt_type_loc = node.loc
7980
for elt in node.elts:
8081
self._unify(node.type["elt"], elt.type,
81-
node.loc, elt.loc, self._makenotes_elts(node.elts, "a list element"))
82+
elt_type_loc, elt.loc,
83+
self._makenotes_elts(node.elts, "a list element"))
84+
elt_type_loc = elt.loc
8285

8386
def visit_AttributeT(self, node):
8487
self.generic_visit(node)

0 commit comments

Comments
 (0)
Please sign in to comment.