summaryrefslogtreecommitdiff
path: root/py/lexer.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/lexer.c')
-rw-r--r--py/lexer.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/py/lexer.c b/py/lexer.c
index d4205236c..6feb231e0 100644
--- a/py/lexer.c
+++ b/py/lexer.c
@@ -35,6 +35,7 @@ struct _mp_lexer_t {
mp_token_t tok_cur;
};
+// TODO replace with a call to a standard function
bool str_strn_equal(const char *str, const char *strn, int len) {
uint i = 0;
@@ -66,15 +67,6 @@ void mp_token_show(const mp_token_t *tok) {
printf("\n");
}
-void mp_token_show_error_prefix(const mp_token_t *tok) {
- printf("(%s:%d:%d) ", tok->src_name, tok->src_line, tok->src_column);
-}
-
-bool mp_token_show_error(const mp_token_t *tok, const char *msg) {
- printf("(%s:%d:%d) %s\n", tok->src_name, tok->src_line, tok->src_column, msg);
- return false;
-}
-
#define CUR_CHAR(lex) ((lex)->chr0)
static bool is_end(mp_lexer_t *lex) {
@@ -299,8 +291,15 @@ static void mp_lexer_next_token_into(mp_lexer_t *lex, mp_token_t *tok, bool firs
// backslash (outside string literals) must appear just before a physical newline
next_char(lex);
if (!is_physical_newline(lex)) {
- // TODO SyntaxError
- assert(0);
+ // SyntaxError: unexpected character after line continuation character
+ tok->src_name = lex->name;
+ tok->src_line = lex->line;
+ tok->src_column = lex->column;
+ tok->kind = MP_TOKEN_BAD_LINE_CONTINUATION;
+ vstr_reset(&lex->vstr);
+ tok->str = vstr_str(&lex->vstr);
+ tok->len = 0;
+ return;
} else {
next_char(lex);
}
@@ -607,7 +606,7 @@ mp_lexer_t *mp_lexer_new(const char *src_name, void *stream_data, mp_lexer_strea
lex->num_indent_level = 1;
lex->indent_level = m_new(uint16_t, lex->alloc_indent_level);
lex->indent_level[0] = 0;
- vstr_init(&lex->vstr);
+ vstr_init(&lex->vstr, 32);
// preload characters
lex->chr0 = stream_next_char(stream_data);
@@ -677,8 +676,9 @@ bool mp_lexer_opt_str(mp_lexer_t *lex, const char *str) {
}
*/
-bool mp_lexer_show_error(mp_lexer_t *lex, const char *msg) {
- return mp_token_show_error(&lex->tok_cur, msg);
+bool mp_lexer_show_error_pythonic_prefix(mp_lexer_t *lex) {
+ printf(" File \"%s\", line %d column %d\n", lex->tok_cur.src_name, lex->tok_cur.src_line, lex->tok_cur.src_column);
+ return false;
}
bool mp_lexer_show_error_pythonic(mp_lexer_t *lex, const char *msg) {