error message voodoo
This commit is contained in:
parent
472da09f51
commit
8a601221fb
@ -293,6 +293,11 @@ class AST27Converter(object):
|
|||||||
t = type(tree)
|
t = type(tree)
|
||||||
handler = self.table[t]
|
handler = self.table[t]
|
||||||
ret = handler(tree)
|
ret = handler(tree)
|
||||||
|
|
||||||
|
for node in ast.walk(ret):
|
||||||
|
node.lineno = tree.line
|
||||||
|
node.col_offset = tree.column
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
@ -304,10 +309,15 @@ def forge_ast(name, forest):
|
|||||||
for tree in forest:
|
for tree in forest:
|
||||||
ret = conv.render(tree)
|
ret = conv.render(tree)
|
||||||
if not isinstance(ret, ast.stmt):
|
if not isinstance(ret, ast.stmt):
|
||||||
ret = ast.Expr(value=ret)
|
ret = ast.Expr(
|
||||||
|
value=ret,
|
||||||
|
lineno=ret.lineno,
|
||||||
|
col_offset=ret.col_offset
|
||||||
|
)
|
||||||
statements.append(ret)
|
statements.append(ret)
|
||||||
|
|
||||||
return ast.fix_missing_locations(ast.Module(body=statements))
|
return ast.Module(body=statements)
|
||||||
|
#return ast.fix_missing_locations(ast.Module(body=statements))
|
||||||
|
|
||||||
|
|
||||||
def forge_module(name, fpath, forest):
|
def forge_module(name, fpath, forest):
|
||||||
|
@ -4,10 +4,23 @@ class Machine(object):
|
|||||||
self.nodes = []
|
self.nodes = []
|
||||||
self.state = state(self)
|
self.state = state(self)
|
||||||
self.state.enter()
|
self.state.enter()
|
||||||
|
self.line = 1
|
||||||
|
self.column = 1
|
||||||
|
|
||||||
|
def add_node(self, node):
|
||||||
|
node.line = self.line
|
||||||
|
node.column = self.column
|
||||||
|
self.nodes.append(node)
|
||||||
|
|
||||||
def process(self, buf):
|
def process(self, buf):
|
||||||
for i in range(0, len(buf)):
|
for i in range(0, len(buf)):
|
||||||
char = buf[i]
|
char = buf[i]
|
||||||
|
|
||||||
|
self.column += 1
|
||||||
|
if char == "\n":
|
||||||
|
self.line += 1
|
||||||
|
self.column = 0
|
||||||
|
|
||||||
nx = self.state.process(char)
|
nx = self.state.process(char)
|
||||||
if nx:
|
if nx:
|
||||||
# print "New state: %s" % (nx)
|
# print "New state: %s" % (nx)
|
||||||
|
@ -12,18 +12,23 @@ from hy.lang.map import HYMap
|
|||||||
WHITESPACE = [" ", "\t", "\n", "\r"]
|
WHITESPACE = [" ", "\t", "\n", "\r"]
|
||||||
|
|
||||||
|
|
||||||
def _resolve_atom(value):
|
def _resolve_atom(value, self):
|
||||||
|
def _mangle(obj):
|
||||||
|
obj.line = self.machine.line
|
||||||
|
obj.column = self.machine.column
|
||||||
|
return obj
|
||||||
|
|
||||||
if value == "true":
|
if value == "true":
|
||||||
return HYBool(True)
|
return _mangle(HYBool(True))
|
||||||
elif value == "false":
|
elif value == "false":
|
||||||
return HYBool(False)
|
return _mangle(HYBool(False))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return HYNumber(value)
|
return _mangle(HYNumber(value))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
return HYSymbol(value)
|
return _mangle(HYSymbol(value))
|
||||||
|
|
||||||
|
|
||||||
class State(object):
|
class State(object):
|
||||||
@ -74,13 +79,13 @@ class Expression(State):
|
|||||||
|
|
||||||
def exit(self):
|
def exit(self):
|
||||||
if self.bulk:
|
if self.bulk:
|
||||||
self.nodes.append(_resolve_atom(self.bulk))
|
self.nodes.append(_resolve_atom(self.bulk, self))
|
||||||
|
|
||||||
self.machine.nodes.append(self.nodes)
|
self.machine.add_node(self.nodes)
|
||||||
|
|
||||||
def commit(self):
|
def commit(self):
|
||||||
if self.bulk.strip() != "":
|
if self.bulk.strip() != "":
|
||||||
self.nodes.append(_resolve_atom(self.bulk))
|
self.nodes.append(_resolve_atom(self.bulk, self))
|
||||||
self.bulk = ""
|
self.bulk = ""
|
||||||
|
|
||||||
def p(self, x):
|
def p(self, x):
|
||||||
@ -101,12 +106,12 @@ class List(State):
|
|||||||
|
|
||||||
def exit(self):
|
def exit(self):
|
||||||
if self.bulk:
|
if self.bulk:
|
||||||
self.nodes.append(_resolve_atom(self.bulk))
|
self.nodes.append(_resolve_atom(self.bulk, self))
|
||||||
self.machine.nodes.append(self.nodes)
|
self.machine.add_node(self.nodes)
|
||||||
|
|
||||||
def commit(self):
|
def commit(self):
|
||||||
if self.bulk.strip() != "":
|
if self.bulk.strip() != "":
|
||||||
self.nodes.append(_resolve_atom(self.bulk))
|
self.nodes.append(_resolve_atom(self.bulk, self))
|
||||||
self.bulk = ""
|
self.bulk = ""
|
||||||
|
|
||||||
def p(self, x):
|
def p(self, x):
|
||||||
@ -127,7 +132,7 @@ class Map(State):
|
|||||||
|
|
||||||
def exit(self):
|
def exit(self):
|
||||||
if self.bulk:
|
if self.bulk:
|
||||||
self.nodes.append(_resolve_atom(self.bulk))
|
self.nodes.append(_resolve_atom(self.bulk, self))
|
||||||
|
|
||||||
if (len(self.nodes) % 2) != 0:
|
if (len(self.nodes) % 2) != 0:
|
||||||
raise Exception("Hash map is fucked")
|
raise Exception("Hash map is fucked")
|
||||||
@ -137,11 +142,11 @@ class Map(State):
|
|||||||
hmap = zip(i, i)
|
hmap = zip(i, i)
|
||||||
for key, val in hmap:
|
for key, val in hmap:
|
||||||
ret[key] = val
|
ret[key] = val
|
||||||
self.machine.nodes.append(ret)
|
self.machine.add_node(ret)
|
||||||
|
|
||||||
def commit(self):
|
def commit(self):
|
||||||
if self.bulk.strip() != "":
|
if self.bulk.strip() != "":
|
||||||
self.nodes.append(_resolve_atom(self.bulk))
|
self.nodes.append(_resolve_atom(self.bulk, self))
|
||||||
self.bulk = ""
|
self.bulk = ""
|
||||||
|
|
||||||
def p(self, x):
|
def p(self, x):
|
||||||
@ -163,7 +168,7 @@ class String(State):
|
|||||||
self.esc = False
|
self.esc = False
|
||||||
|
|
||||||
def exit(self):
|
def exit(self):
|
||||||
self.machine.nodes.append(HYString(self.buf))
|
self.machine.add_node(HYString(self.buf))
|
||||||
|
|
||||||
def p(self, x):
|
def p(self, x):
|
||||||
if x == "\\":
|
if x == "\\":
|
||||||
|
Loading…
Reference in New Issue
Block a user