diff --git a/include/pocketpy/compiler/lexer.h b/include/pocketpy/compiler/lexer.h index abe8885f..cd3dc35b 100644 --- a/include/pocketpy/compiler/lexer.h +++ b/include/pocketpy/compiler/lexer.h @@ -1,7 +1,7 @@ #pragma once -#include #include "pocketpy/common/str.h" +#include #ifdef __cplusplus extern "C" { diff --git a/include/pocketpy/compiler/lexer.hpp b/include/pocketpy/compiler/lexer.hpp index 0721624b..c2301b18 100644 --- a/include/pocketpy/compiler/lexer.hpp +++ b/include/pocketpy/compiler/lexer.hpp @@ -11,19 +11,21 @@ typedef uint8_t TokenIndex; // clang-format off constexpr const char* kTokens[] = { - "is not", "not in", "yield from", "@eof", "@eol", "@sof", "@id", "@num", "@str", "@fstr", "@long", "@bytes", "@imag", "@indent", "@dedent", + // These 3 are compound keywords which are generated on the fly + "is not", "not in", "yield from", /*****************************************/ "+", "+=", "-", "-=", // (INPLACE_OP - 1) can get '=' removed "*", "*=", "/", "/=", "//", "//=", "%", "%=", "&", "&=", "|", "|=", "^", "^=", "<<", "<<=", ">>", ">>=", /*****************************************/ - ".", ",", ":", ";", "#", "(", ")", "[", "]", "{", "}", - "**", "=", ">", "<", "..", "...", "->", "@", "==", "!=", ">=", "<=", - "++", "--", "~", + "(", ")", "[", "]", "{", "}", + ".", "..", "...", ",", ":", ";", + "**", "->", "#", "@", + ">", "<", "=", "==", "!=", ">=", "<=", "~", /** KW_BEGIN **/ // NOTE: These keywords should be sorted in ascending order!! "False", "None", "True", "and", "as", "assert", "break", "class", "continue", diff --git a/include/pocketpy/objects/error.h b/include/pocketpy/objects/error.h index 159d3fe8..ffb15d3a 100644 --- a/include/pocketpy/objects/error.h +++ b/include/pocketpy/objects/error.h @@ -34,6 +34,15 @@ void pkpy_Exception__dtor(pkpy_Exception* self); void pkpy_Exception__stpush(pkpy_Exception* self, pkpy_SourceData_ src, int lineno, const char* cursor, const char* name); pkpy_Str pkpy_Exception__summary(pkpy_Exception* self); +struct Error{ + const char* type; + pkpy_SourceData_ src; + int lineno; + const char* cursor; + char msg[100]; + int64_t userdata; +}; + #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/include/pocketpy/objects/error.hpp b/include/pocketpy/objects/error.hpp index abfa77b3..4acc6528 100644 --- a/include/pocketpy/objects/error.hpp +++ b/include/pocketpy/objects/error.hpp @@ -59,13 +59,6 @@ struct TopLevelException : std::exception { } }; -struct Error{ - const char* type; - pkpy_SourceData_ src; - int lineno; - const char* cursor; - char msg[100]; - i64 userdata; -}; + } // namespace pkpy diff --git a/src/compiler/lexer.c b/src/compiler/lexer.c index cf7d2784..9294b9cb 100644 --- a/src/compiler/lexer.c +++ b/src/compiler/lexer.c @@ -20,7 +20,7 @@ c11_string pkpy_TokenDeserializer__read_string(pkpy_TokenDeserializer* self, cha const char* start = self->curr; while(*self->curr != c) self->curr++; - c11_string retval = {start, self->curr - start}; + c11_string retval = {start, (int)(self->curr-start)}; self->curr++; // skip the delimiter return retval; } diff --git a/src/compiler/lexer.cpp b/src/compiler/lexer.cpp index 80f03fb1..40f66683 100644 --- a/src/compiler/lexer.cpp +++ b/src/compiler/lexer.cpp @@ -390,13 +390,7 @@ Error* Lexer::lex_one_token(bool* eof) noexcept{ return NULL; } case '=': add_token_2('=', TK("="), TK("==")); return NULL; - case '+': - if(matchchar('+')) { - add_token(TK("++")); - } else { - add_token_2('=', TK("+"), TK("+=")); - } - return NULL; + case '+': add_token_2('=', TK("+"), TK("+=")); return NULL; case '>': { if(matchchar('=')) add_token(TK(">=")); @@ -416,16 +410,12 @@ Error* Lexer::lex_one_token(bool* eof) noexcept{ return NULL; } case '-': { - if(matchchar('-')) { - add_token(TK("--")); - } else { - if(matchchar('=')) - add_token(TK("-=")); - else if(matchchar('>')) - add_token(TK("->")); - else - add_token(TK("-")); - } + if(matchchar('=')) + add_token(TK("-=")); + else if(matchchar('>')) + add_token(TK("->")); + else + add_token(TK("-")); return NULL; } case '!':