Merge pull request #885 from algernon/glc/mangled-bangs

Mangle trailing bangs on symbols
This commit is contained in:
Morten Linderud 2015-08-10 16:35:42 +02:00
commit 0c73f78ed0
2 changed files with 21 additions and 0 deletions

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

@ -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]