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