Merge branch 'master' into pr/883

This commit is contained in:
Tuukka Turto 2015-08-12 06:50:29 +03:00
commit 3d862d6680
4 changed files with 34 additions and 2 deletions

View File

@ -459,8 +459,9 @@ class HyASTCompiler(object):
try: try:
value = next(exprs_iter) value = next(exprs_iter)
except StopIteration: except StopIteration:
msg = "Keyword argument {kw} needs a value" raise HyTypeError(expr,
raise HyCompileError(msg.format(kw=str(expr))) "Keyword argument {kw} needs "
"a value.".format(kw=str(expr[1:])))
compiled_value = self.compile(value) compiled_value = self.compile(value)
ret += compiled_value ret += compiled_value

View File

@ -308,6 +308,9 @@ def t_identifier(p):
if p.endswith("?") and p != "?": if p.endswith("?") and p != "?":
p = "is_%s" % (p[:-1]) p = "is_%s" % (p[:-1])
if p.endswith("!") and p != "!":
p = "%s_bang" % (p[:-1])
return p return p
obj = ".".join([mangle(part) for part in obj.split(".")]) obj = ".".join([mangle(part) for part in obj.split(".")])

View File

@ -439,6 +439,16 @@ def test_lambda_list_keywords_mixed():
" (list x xs kwxs kwoxs))") " (list x xs kwxs kwoxs))")
def test_missing_keyword_argument_value():
"""Ensure the compiler chokes on missing keyword argument values."""
try:
can_compile("((fn [x] x) :x)")
except HyTypeError as e:
assert(e.message == "Keyword argument :x needs a value.")
else:
assert(False)
def test_ast_unicode_strings(): def test_ast_unicode_strings():
"""Ensure we handle unicode strings correctly""" """Ensure we handle unicode strings correctly"""

View File

@ -326,6 +326,24 @@ def test_lex_mangling_qmark():
assert entry == [HySymbol(".is_foo.bar.is_baz")] assert entry == [HySymbol(".is_foo.bar.is_baz")]
def test_lex_mangling_bang():
"""Ensure that identifiers ending with a bang get mangled ok"""
entry = tokenize("foo!")
assert entry == [HySymbol("foo_bang")]
entry = tokenize("!")
assert entry == [HySymbol("!")]
entry = tokenize("im!foo")
assert entry == [HySymbol("im!foo")]
entry = tokenize(".foo!")
assert entry == [HySymbol(".foo_bang")]
entry = tokenize("foo.bar!")
assert entry == [HySymbol("foo.bar_bang")]
entry = tokenize("foo!.bar")
assert entry == [HySymbol("foo_bang.bar")]
entry = tokenize(".foo!.bar.baz!")
assert entry == [HySymbol(".foo_bang.bar.baz_bang")]
def test_simple_cons(): def test_simple_cons():
"""Check that cons gets tokenized correctly""" """Check that cons gets tokenized correctly"""
entry = tokenize("(a . b)")[0] entry = tokenize("(a . b)")[0]