commit ca3f37004b1a2b05297cccf87aa1c982e4673371
parent c0e066466b66293808a97943b1c8bd6018c1025c
Author: citbl <citbl@citbl.org>
Date: Sat, 9 May 2026 21:21:54 +1000
reformat2
Diffstat:
| M | .clang-format | | | 34 | +++++++++++++++++++++++++++------- |
| M | makefile | | | 5 | ++--- |
| M | src/common.h | | | 101 | +++++++++++++++++++++++++++++++++---------------------------------------------- |
| M | src/lexer.c | | | 26 | +++++++++++++++----------- |
| M | src/main.c | | | 31 | ++++++++++++++----------------- |
| M | src/utils.c | | | 58 | ++++++++++++++++++++++++++++++++-------------------------- |
6 files changed, 132 insertions(+), 123 deletions(-)
diff --git a/.clang-format b/.clang-format
@@ -1,8 +1,28 @@
-UseTab: Never
-IndentWidth: 4
-TabWidth: 4
-ColumnLimit: 150
-SpacesBeforeTrailingComments: 2
+BasedOnStyle: Webkit
+IndentWidth: 8
+ContinuationIndentWidth: 8
+UseTab: AlignWithSpaces
+
PointerAlignment: Right
-AlignArrayOfStructures: Right
-AlignConsecutiveAssignments: Consecutive
+
+AlignTrailingComments: true
+SpacesBeforeTrailingComments: 1
+KeepEmptyLinesAtTheStartOfBlocks: false
+AllowShortBlocksOnASingleLine: true
+AllowShortIfStatementsOnASingleLine: true
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortEnumsOnASingleLine: true
+AllowShortFunctionsOnASingleLine: false
+AlignConsecutiveDeclarations: false
+AlignConsecutiveAssignments: false
+AlignConsecutiveMacros: false
+SortIncludes: false
+
+IndentCaseLabels: false
+ColumnLimit: 135
+PenaltyBreakBeforeFirstCallParameter: 1
+AlignAfterOpenBracket: DontAlign
+BinPackArguments: false
+BinPackParameters: false
+
+BreakAfterReturnType: TopLevelDefinitions
diff --git a/makefile b/makefile
@@ -2,9 +2,8 @@ cmp = clang
warn = -Wall -Wextra
pedantic = -Werror
release = -02
-std = -std=c99
+std = -std=c99 -Wdeclaration-after-statement -Werror=declaration-after-statement
sane = -fsanitize=address
-silly = -Wdeclaration-after-statement -Werror=declaration-after-statement
cfiles = src/**.c
includes = -i src/**.h
out = -o sicc
@@ -12,4 +11,4 @@ out = -o sicc
export ASAN_OPTIONS := allocator_may_return_null=1
default:
- $(cmp) $(warn) $(std) $(silly) $(out) $(cfiles)
+ $(cmp) $(warn) $(std) $(out) $(cfiles)
diff --git a/src/common.h b/src/common.h
@@ -4,70 +4,53 @@
#include <stddef.h>
typedef enum TokenType {
- TERMINUS = 4,
- IDENT,
- KEYWORD,
- SYMBOL,
- PLUS,
- MIN,
- STAR,
- SLASH,
- BACKSLASH,
- PERCENT,
- LBRACE,
- RBRACE,
- LPAREN,
- RPAREN,
- EQ_EQ,
- BANG_EQ,
- EQ_GT,
- LT_EQ,
- LT_DASH,
- DASH_GT,
- EQ,
- BANG,
- NAMESPACE
+ TERMINUS = 4,
+ IDENT,
+ KEYWORD,
+ SYMBOL,
+ PLUS,
+ MIN,
+ STAR,
+ SLASH,
+ BACKSLASH,
+ PERCENT,
+ LBRACE,
+ RBRACE,
+ LPAREN,
+ RPAREN,
+ EQ_EQ,
+ BANG_EQ,
+ EQ_GT,
+ LT_EQ,
+ LT_DASH,
+ DASH_GT,
+ EQ,
+ BANG,
+ NAMESPACE
} TokenType;
-typedef enum Keyword {
- IF = 130,
- ELSE,
- WHILE,
- OPT,
- LAZY,
- MATCH,
- DEF,
- FOR,
- EACH,
- SOME,
- NONE,
- OK,
- ERR,
- IN,
- IS,
- CAST
-} Keyword;
+typedef enum Keyword { IF = 130, ELSE, WHILE, OPT, LAZY, MATCH, DEF, FOR, EACH, SOME, NONE, OK, ERR, IN, IS, CAST } Keyword;
typedef struct Token {
- TokenType type;
- union Value {
- char *as_string;
- char as_char;
- size_t as_int;
- bool as_bool;
- } value;
- const char *path;
- const char *filename;
- size_t line;
- size_t col;
+ TokenType type;
+ union Value {
+ char* as_string;
+ char as_char;
+ size_t as_int;
+ bool as_bool;
+ } value;
+ const char* path;
+ const char* filename;
+ size_t line;
+ size_t col;
} Token;
typedef struct Lexer {
- const char *code;
- const char *path;
- const char *filename;
- size_t pos;
- Token *tokens;
- size_t count;
- size_t cap;
+ const char* code;
+ const char* path;
+ const char* filename;
+ size_t pos;
+ Token* tokens;
+ size_t count;
+ size_t cap;
} Lexer;
diff --git a/src/lexer.c b/src/lexer.c
@@ -2,18 +2,22 @@
#include <stdio.h>
#include <stdlib.h>
-static void add_token(Lexer *l, Token t) {
- if (l->count >= l->cap) {
- l->cap *= 2;
- l->tokens = realloc(l->tokens, l->cap * sizeof(Token));
- }
+static void
+add_token(Lexer *l, Token t)
+{
+ if (l->count >= l->cap) {
+ l->cap *= 2;
+ l->tokens = realloc(l->tokens, l->cap * sizeof(Token));
+ }
- l->tokens[l->count++] = t;
+ l->tokens[l->count++] = t;
}
-Lexer *lexer_lex(Lexer *l) {
- Token tok = {0};
- l->tokens = calloc(250, sizeof(Token));
- add_token(l, tok);
- return l;
+Lexer *
+lexer_lex(Lexer *l)
+{
+ Token tok = { 0 };
+ l->tokens = calloc(250, sizeof(Token));
+ add_token(l, tok);
+ return l;
}
diff --git a/src/main.c b/src/main.c
@@ -2,26 +2,23 @@
#include "utils.h"
#include <stdio.h>
-int main(int argc, char **args) {
- char *filename;
- char *contents;
- Lexer lexer = {0};
+int
+main(int argc, char **args)
+{
+ char *filename;
+ char *contents;
+ Lexer lexer = { 0 };
- if (argc < 1)
- return 1;
+ if (argc < 1) return 1;
- filename = args[1];
+ filename = args[1];
+ if (filename == NULL) return 1;
- if (filename == NULL)
- return 1;
+ contents = read_file(filename);
+ if (contents == NULL) return 1;
- contents = read_file(filename);
+ printf("%s\n", contents);
- if (contents == NULL)
- return 1;
-
- printf("%s\n", contents);
-
- lexer = *lexer_lex(&lexer);
- return 0;
+ lexer = *lexer_lex(&lexer);
+ return 0;
}
diff --git a/src/utils.c b/src/utils.c
@@ -2,37 +2,43 @@
#include <stdlib.h>
#include <string.h>
-char *read_file(const char *filename) {
- FILE *fp = fopen(filename, "r");
- if (fp == NULL) {
- fprintf(stderr, "file not found\n");
- return NULL;
- }
+char *
+read_file(const char *filename)
+{
+ long fsize;
+ char *source;
+ FILE *fp = fopen(filename, "r");
+ if (fp == NULL) {
+ fprintf(stderr, "file not found\n");
+ return NULL;
+ }
- fseek(fp, 0, SEEK_END);
- long fsize = ftell(fp);
- fseek(fp, 0, SEEK_SET);
+ fseek(fp, 0, SEEK_END);
+ fsize = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
- char *source = malloc(fsize + 1);
- fread(source, fsize, 1, fp);
- fclose(fp);
+ source = malloc(fsize + 1);
+ fread(source, fsize, 1, fp);
+ fclose(fp);
- source[fsize] = 0;
- return source;
+ source[fsize] = 0;
+ return source;
}
-void separate_file_from_path(const char *fullpath, char **out_path, char **out_filename) {
- char *path = strdup(fullpath);
- char *filename = strrchr(path, '/');
+void
+separate_file_from_path(const char *fullpath, char **out_path, char **out_filename)
+{
+ char *path = strdup(fullpath);
+ char *filename = strrchr(path, '/');
- if (filename == NULL) {
- printf("No path found\n");
- exit(1);
- }
+ if (filename == NULL) {
+ printf("No path found\n");
+ exit(1);
+ }
- *filename = '\0';
- filename++;
- *out_path = strdup(path);
- *out_filename = strdup(filename);
- free(path);
+ *filename = '\0';
+ filename++;
+ *out_path = strdup(path);
+ *out_filename = strdup(filename);
+ free(path);
}