Skip to content

Commit

Permalink
Fixed #21 invalid handling of '/'
Browse files Browse the repository at this point in the history
  • Loading branch information
vurtun committed Jan 28, 2018
1 parent b94a3a7 commit f0ef47e
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 5 deletions.
5 changes: 2 additions & 3 deletions lexer.h
Original file line number Diff line number Diff line change
Expand Up @@ -1312,15 +1312,14 @@ lexer_read(struct lexer *lexer, struct lexer_token *token)
} else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '_') {
if (!lexer_read_name(lexer, token))
return 0;
} else if ((c == '/' || c == '\\') || c == '.') {
} else if (((c == '/' && (*(lexer->current + 1)) == '*')|| c == '\\') || c == '.') {
if (!lexer_read_name(lexer, token))
return 0;
} else if (!lexer_read_punctuation(lexer, token)) {
if (lexer->log) {
lexer->log(lexer->userdata, LEXER_ERROR, lexer->line,
"unkown punctuation: %c", c);
}
lexer->error = 1;
} lexer->error = 1;
return 0;
}
return 1;
Expand Down
49 changes: 47 additions & 2 deletions tests/lexer_test.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#define LEXER_USE_FIXED_TYPES
#define LEXER_USE_ASSERT
#define LEXER_IMPLEMENTATION
#include "../mm_lexer.h"
#include "../lexer.h"

#include <stdio.h>
#include <stdarg.h>
Expand Down Expand Up @@ -190,7 +190,24 @@ int main(void)
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "register", LEXER_TOKEN_NAME, 0);
}

test_section("comment_c")
{
const char text[] = " \t/*THIS IS A COMMENT */ register";
struct lexer_token tok;
struct lexer lexer;
lexer_init(&lexer, text, sizeof(text), NULL, test_log, NULL);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "register", LEXER_TOKEN_NAME, 0);
}
test_section("comment_cpp")
{
const char text[] = " \t//THIS IS A COMMENT\n register";
struct lexer_token tok;
struct lexer lexer;
lexer_init(&lexer, text, sizeof(text), NULL, test_log, NULL);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "register", LEXER_TOKEN_NAME, 0);
}
test_section("code_decl")
{
const char text[] = "\t\nconst char\t*text = \"test\";\n";
Expand Down Expand Up @@ -258,6 +275,34 @@ int main(void)
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, ";", LEXER_TOKEN_PUNCTUATION, LEXER_PUNCT_SEMICOLON);
}
test_section("operator/")
{
const char text[] = "inline Vector2 operator/(float scalar) const;";
struct lexer_token tok;
struct lexer lexer;
lexer_init(&lexer, text, sizeof(text), NULL, test_log, NULL);

test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "inline", LEXER_TOKEN_NAME, 0);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "Vector2", LEXER_TOKEN_NAME, 0);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "operator", LEXER_TOKEN_NAME, 0);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "/", LEXER_TOKEN_PUNCTUATION, LEXER_PUNCT_DIV);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "(", LEXER_TOKEN_PUNCTUATION, LEXER_PUNCT_PARENTHESE_OPEN);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "float", LEXER_TOKEN_NAME, 0);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "scalar", LEXER_TOKEN_NAME, 0);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, ")", LEXER_TOKEN_PUNCTUATION, LEXER_PUNCT_PARENTHESE_CLOSE);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, "const", LEXER_TOKEN_NAME, 0);
test_assert(lexer_read(&lexer, &tok));
test_token(&tok, ";", LEXER_TOKEN_PUNCTUATION, LEXER_PUNCT_SEMICOLON);
}
test_result();
exit(EXIT_SUCCESS);
}

0 comments on commit f0ef47e

Please sign in to comment.