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:
1 parent
6828ec9852
commit
afec2544f1
4 files changed
+29
-28
No files matched your search
@@ -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)),
|
||||
|
||||
Reference in new issue
Block a user