diff --git a/source/lexer.c b/source/lexer.c index 5b20ce5..0efa4fd 100644 --- a/source/lexer.c +++ b/source/lexer.c @@ -139,7 +139,7 @@ static Token makeIntegerOrFloat(Lexer* lexer) { while(isDigit(lexer)) advance(lexer); - if (peek(lexer) == '.') { + if (peek(lexer) == '.' && (peekNext(lexer) >= '0' && peekNext(lexer) <= '9')) { //BUGFIX: peekNext == digit type = TOKEN_LITERAL_FLOAT; advance(lexer); while(isDigit(lexer)) advance(lexer); diff --git a/source/parser.c b/source/parser.c index 585adbb..14c4566 100644 --- a/source/parser.c +++ b/source/parser.c @@ -791,6 +791,11 @@ static Opcode dot(Parser* parser, Node** nodeHandle) { parsePrecedence(parser, &node, PREC_CALL); + if (node == NULL || node->binary.right == NULL) { + error(parser, parser->previous, "Expected function call after dot operator"); + return OP_EOF; + } + //hijack the function call, and hack in an extra parameter node->binary.right->fnCall.argumentCount++; node->binary.opcode = OP_DOT;