|
@@ -3270,9 +3270,13 @@ const char *STD[][2] = {
|
|
|
"let STR_ASCII_LC = \"abcdefghijklmnopqrstuvwxyz\"\n"
|
|
|
"let STR_ASCII_UC = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"\n"
|
|
|
"let STR_DIGITS = \"0123456789\"\n"
|
|
|
+ "let STR_WS = \" \\t\\n\\r\\x0b\\x0c\"\n"
|
|
|
+ "let STR_PUNCTS = \"!\\\"#$%&'()*+,-./:;<=>?@[\\\\]^_`{|}~\"\n"
|
|
|
"func is_char(c): return type(c) == \"string\" && len(c) == 1\n"
|
|
|
"func isalpha(c): return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')\n"
|
|
|
"func isdigit(c): return c >= '0' && c <= '9'\n"
|
|
|
+ "func ispunct(c): return c in STR_PUNCTS\n"
|
|
|
+ "func isws(c): return c in STR_WS\n"
|
|
|
},
|
|
|
|
|
|
{"time",
|
|
@@ -3591,8 +3595,13 @@ void compile_node(buffer_t *gbuf, buffer_t *buf, list_t *ctx, table_t *ltab, sta
|
|
|
|
|
|
list_push(FILES, pair);
|
|
|
|
|
|
+ list_t *tokens = tokenize(source);
|
|
|
+
|
|
|
size_t pos = 0;
|
|
|
- node_t *n = parse_expr(tokenize(source), &pos);
|
|
|
+ node_t *n = parse_expr(tokens, &pos);
|
|
|
+
|
|
|
+ if (pos != tokens->length-1)
|
|
|
+ COMPILE_ERROR("unconsumed input in f-expr");
|
|
|
|
|
|
list_push(parts, n);
|
|
|
} else buffer_append(tbuf, c);
|