Merge pull request #155 from willkg/better-c

Fix hy -c CMD to better handle lex errors
This commit is contained in:
Will Kahn-Greene 2013-04-25 13:10:17 -07:00
commit d4ff08ba3f
3 changed files with 54 additions and 6 deletions

View File

@ -37,7 +37,7 @@ from hy.lex.states import Idle, LexException
from hy.lex.machine import Machine
from hy.compiler import hy_compile
from hy.core import process
from hy.importer import ast_compile
from hy.importer import ast_compile, import_buffer_to_module
import hy.completer
@ -137,8 +137,13 @@ def ideas_macro(tree):
def run_command(source):
hr = HyREPL()
hr.runsource(source, filename='<input>', symbol='single')
try:
import_buffer_to_module("__main__", source)
except LexException as exc:
# TODO: This would be better if we had line, col info.
print(source)
print(repr(exc))
return 1
return 0

View File

@ -78,6 +78,13 @@ def import_file_to_module(module_name, fpath):
return mod
def import_buffer_to_module(module_name, buf):
_ast = import_buffer_to_ast(buf)
mod = imp.new_module(module_name)
eval(ast_compile(_ast, "", "exec"), mod.__dict__)
return mod
def hy_eval(hytree, namespace):
foo = HyObject()
foo.start_line = 0

View File

@ -1,8 +1,44 @@
import subprocess
def test_bin_hy():
p = subprocess.Popen("echo | bin/hy",
def run_cmd(cmd):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
shell=True)
p.wait()
assert p.returncode == 0
return p.returncode, p.stdout, p.stderr
def test_bin_hy():
ret = run_cmd("echo | bin/hy")
assert ret[0] == 0
def test_bin_hy_stdin():
ret = run_cmd("echo \"(koan)\" | bin/hy")
assert ret[0] == 0
assert "monk" in ret[1].read().decode("utf-8")
def test_bin_hy_cmd():
ret = run_cmd("bin/hy -c \"(koan)\"")
assert ret[0] == 0
assert "monk" in ret[1].read().decode("utf-8")
ret = run_cmd("bin/hy -c \"(koan\"")
assert ret[0] == 1
assert "LexException" in ret[1].read().decode("utf-8")
def test_bin_hy_icmd():
ret = run_cmd("echo \"(ideas)\" | bin/hy -i \"(koan)\"")
assert ret[0] == 0
output = ret[1].read().decode("utf-8")
assert "monk" in output
assert "figlet" in output
def test_bin_hy_file():
ret = run_cmd("bin/hy eg/nonfree/halting-problem/halting.hy")
assert ret[0] == 0
assert "27" in ret[1].read().decode("utf-8")