diff --git a/hy/compiler.py b/hy/compiler.py index ca478ed..7ee8811 100755 --- a/hy/compiler.py +++ b/hy/compiler.py @@ -745,6 +745,12 @@ class HyASTCompiler(object): return imports, HyExpression([HySymbol(name), HyString(form)]).replace(form), False + elif isinstance(form, HyString): + x = [HySymbol(name), form] + if form.brackets is not None: + x.extend([HyKeyword(":brackets"), form.brackets]) + return imports, HyExpression(x).replace(form), False + return imports, HyExpression([HySymbol(name), form]).replace(form), False diff --git a/hy/lex/parser.py b/hy/lex/parser.py index a289ad7..05fda85 100755 --- a/hy/lex/parser.py +++ b/hy/lex/parser.py @@ -287,9 +287,7 @@ bracket_string_re = next(r.re for r in lexer.rules if r.name == 'BRACKETSTRING') def t_bracket_string(p): m = bracket_string_re.match(p[0].value) delim, content = m.groups() - s = HyString(content) - s.brackets = delim - return s + return HyString(content, brackets=delim) @pg.production("identifier : IDENTIFIER") diff --git a/hy/models.py b/hy/models.py index 574db49..0d6df4c 100644 --- a/hy/models.py +++ b/hy/models.py @@ -65,7 +65,10 @@ class HyString(HyObject, str_type): scripts. It's either a ``str`` or a ``unicode``, depending on the Python version. """ - pass + def __new__(cls, s=None, brackets=None): + value = super(HyString, cls).__new__(cls, s) + value.brackets = brackets + return value _wrappers[str_type] = HyString diff --git a/tests/native_tests/language.hy b/tests/native_tests/language.hy index 1f069af..6a1f126 100644 --- a/tests/native_tests/language.hy +++ b/tests/native_tests/language.hy @@ -1197,6 +1197,12 @@ (assert (= (eval `(get ~d ~k)) 2))) +(defn test-quote-bracket-string-delim [] + (assert (= (. '#[my delim[hello world]my delim] brackets) "my delim")) + (assert (= (. '#[[squid]] brackets) "")) + (assert (none? (. '"squid" brackets)))) + + (defn test-import-syntax [] "NATIVE: test the import syntax."