From 3228935a57672adef0265f86d403812bcbcefc77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michal=20Vlas=C3=A1k?= <vlasami6@fit.cvut.cz> Date: Mon, 20 Feb 2023 19:40:32 +0100 Subject: [PATCH] Import new versions (2023-02-20) --- arena.c | 5 ++++- arena.h | 5 +++-- parser.c | 39 +++++++++++++++++++++------------------ parser.h | 3 +++ 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/arena.c b/arena.c index 231bf03..a02446a 100644 --- a/arena.c +++ b/arena.c @@ -1,3 +1,6 @@ +// Arena allocation +// Michal Vlasák, FIT CTU, 2023 + #include "arena.h" #include "stdlib.h" #include "stdint.h" @@ -9,7 +12,7 @@ align(size_t pos, size_t alignment) return (pos + (alignment - 1)) & ~(alignment - 1); } -ArenaChunk sentinel = {0}; +static ArenaChunk sentinel = {0}; void arena_init(Arena *arena) diff --git a/arena.h b/arena.h index 691146c..06c2a4f 100644 --- a/arena.h +++ b/arena.h @@ -1,10 +1,11 @@ +// Arena allocation +// Michal Vlasák, FIT CTU, 2023 + #pragma once #include <stddef.h> #include <stdalign.h> -// Michal Vlasák, 2023 - // This header defines the API of two different Arena allocators - `Arena` and // `Garena`. In general arena allocators all "bump allocate" their memory. I.e. // they have a pointer to chunk of available memory from which they allocate diff --git a/parser.c b/parser.c index 25f88e1..b6c6f8a 100644 --- a/parser.c +++ b/parser.c @@ -1,3 +1,6 @@ +// FML parser +// Michal Vlasák, FIT CTU, 2023 + #include <stdio.h> #include "parser.h" @@ -151,7 +154,7 @@ lex_create(Str source) #define DIGIT '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9' -void +static void lex_next(Lexer *lexer, Token *token) { LexState state = LS_START; @@ -186,61 +189,61 @@ lex_next(Lexer *lexer, Token *token) case ']': tok = TK_RBRACKET; goto done; case ',': tok = TK_COMMA; goto done; default: tok = TK_ERROR; goto done; - }; break; + } break; case LS_IDENTIFIER: switch (c) { case ALPHA: case DIGIT: break; default: tok = TK_IDENTIFIER; goto prev_done; - }; break; + } break; case LS_NUMBER: switch (c) { case DIGIT: break; default: tok = TK_NUMBER; goto prev_done; - }; break; + } break; case LS_STRING: switch (c) { case '"': tok = TK_STRING; end_offset = -1; goto done; case '\\': state = LS_STRING_ESC; break; - }; break; + } break; case LS_STRING_ESC: switch (c) { case 'n': case 't': case 'r': case '~': case '"': case '\\': state = LS_STRING; break; default: goto err; - }; break; + } break; case LS_SLASH: switch (c) { case '/': state = LS_LINE_COMMENT; start += 2; break; case '*': state = LS_BLOCK_COMMENT; start += 2; break; default: tok = TK_SLASH; goto prev_done; - }; break; + } break; case LS_LINE_COMMENT: switch (c) { case '\n': state = LS_START; start = lexer->pos + 1; break; - }; break; + } break; case LS_BLOCK_COMMENT: switch (c) { case '*': state = LS_BLOCK_COMMENT_STAR; break; - }; break; + } break; case LS_BLOCK_COMMENT_STAR: switch (c) { case '*': break; case '/': state = LS_START; start = lexer->pos + 1; break; default: state = LS_BLOCK_COMMENT; break; - }; break; + } break; case LS_MINUS: switch (c) { case '>': tok = TK_RARROW; goto done; case DIGIT: state = LS_NUMBER; break; default: tok = TK_MINUS; goto prev_done; - }; break; + } break; case LS_EQUAL: switch (c) { case '=': tok = TK_EQUAL_EQUAL; goto done; default: tok = TK_EQUAL; goto prev_done; - }; break; + } break; case LS_GREATER: switch (c) { case '=': tok = TK_GREATER_EQUAL; goto done; default: tok = TK_GREATER; goto prev_done; - }; break; + } break; case LS_LESS: switch (c) { case '=': tok = TK_LESS_EQUAL; goto done; case '-': tok = TK_LARROW; goto done; default: tok = TK_LESS; goto prev_done; - }; break; + } break; case LS_EXCLAM: switch (c) { case '=': tok = TK_BANG_EQUAL; goto done; default: goto err; - }; break; + } break; } lexer->pos += 1; @@ -435,7 +438,7 @@ primary(Parser *parser) for (; pos < end; pos++) { value = value * 10 + (*pos - '0'); } - integer->value = negative ? -value : value; + integer->value = (i32) (negative ? -value : value); return &integer->base; } case TK_NULL: { @@ -738,7 +741,7 @@ typedef struct { Ast *(*nud)(Parser *); } NullInfo; -NullInfo null_info[] = { +static NullInfo null_info[] = { #define TOK_NULL(tok, str, nud, led, lbp, rbp) { nud }, TOKENS(TOK_NULL, TOK_NULL, TOK_NULL) #undef TOK_STR @@ -764,7 +767,7 @@ typedef struct { int rbp; } LeftInfo; -LeftInfo left_info[] = { +static LeftInfo left_info[] = { #define TOK_LEFT(tok, str, nud, led, prec, assoc) { led, PREC_##prec, PREC_##prec + (ASSOC_##assoc == ASSOC_LEFT) }, TOKENS(TOK_LEFT, TOK_LEFT, TOK_LEFT) #undef TOK_STR diff --git a/parser.h b/parser.h index d520013..e0575cc 100644 --- a/parser.h +++ b/parser.h @@ -1,3 +1,6 @@ +// FML parser +// Michal Vlasák, FIT CTU, 2023 + #pragma once #include <stddef.h> -- GitLab