A string interpolation syntax that I don't hate. Also tests.

You can interpolate values into strings using \(this syntax), e.g.

    "best \("str" + "ing") ever"
This commit is contained in:
Stephen Dolan committed 2012-10-20 00:09:20 +01:00
1 parent 6828ec9852
commit afec2544f1
4 files changed
+29 -28

No files matched your search

+10 -8
View File
@@ -81,7 +81,7 @@
%left '*' '/'
%type <blk> Exp Term MkDict MkDictPair ExpD ElseBody QQString FuncDef FuncDefs
%type <blk> Exp Term MkDict MkDictPair ExpD ElseBody QQString FuncDef FuncDefs String
%{
#include "lexer.gen.h"
#define FAIL(loc, msg) \
@@ -295,14 +295,19 @@ Exp ">=" Exp {
$$ = gen_binop($1, $3, GREATEREQ);
} |
QQSTRING_START QQString QQSTRING_END {
$$ = $2;
String {
$$ = $1;
} |
Term {
$$ = $1;
}
String:
QQSTRING_START QQString QQSTRING_END {
$$ = $2;
}
FuncDef:
"def" IDENT ':' Exp ';' {
block body = block_join($4, gen_op_simple(RET));
@@ -416,11 +421,8 @@ MkDictPair
: IDENT ':' ExpD {
$$ = gen_dictpair(gen_op_const(LOADK, $1), $3);
}
| LITERAL ':' ExpD {
if (jv_get_kind($1) != JV_KIND_STRING) {
FAIL(@1, "Object keys must be strings");
}
$$ = gen_dictpair(gen_op_const(LOADK, $1), $3);
| String ':' ExpD {
$$ = gen_dictpair($1, $3);
}
| IDENT {
$$ = gen_dictpair(gen_op_const(LOADK, jv_copy($1)),