Merge branch 'master' into pr/883
This commit is contained in:
commit
3d862d6680
@ -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
|
||||||
|
@ -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(".")])
|
||||||
|
@ -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"""
|
||||||
|
|
||||||
|
@ -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]
|
||||||
|
Loading…
Reference in New Issue
Block a user