From e9e051992c86f10fbc6c131415bb5776147884c6 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 16 Jun 2024 15:33:47 +0200 Subject: Update clang-format and cland options --- .clang-format | 1 + .clangd | 2 ++ src/badlib.h | 2 +- src/lexer.c | 39 +++++++++----------------- src/main.c | 88 ++++++++++++----------------------------------------------- 5 files changed, 34 insertions(+), 98 deletions(-) create mode 100644 .clangd diff --git a/.clang-format b/.clang-format index 8e3520e..b77b165 100644 --- a/.clang-format +++ b/.clang-format @@ -2,5 +2,6 @@ BasedOnStyle: Chromium IndentWidth: 4 BreakBeforeBraces: Attach AllowShortIfStatementsOnASingleLine: Always +AllowShortCaseLabelsOnASingleLine: true AlwaysBreakAfterDefinitionReturnType: All PointerAlignment: Right diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..8bfc4dc --- /dev/null +++ b/.clangd @@ -0,0 +1,2 @@ +Diagnostics: + Suppress: bugprone-sizeof-expression diff --git a/src/badlib.h b/src/badlib.h index 4944d2e..9802278 100644 --- a/src/badlib.h +++ b/src/badlib.h @@ -970,7 +970,7 @@ platform_read_file(Str path, Arena *a) { // Read the entire file into memory. sz file_size = 0; - FILE *fp = fopen((char*)path_str.mem, "rb+"); + FILE *fp = fopen((char *)path_str.mem, "rb+"); if (!fp) { return (FileContents){ .path = path, diff --git a/src/lexer.c b/src/lexer.c index 6a5621c..404082b 100644 --- a/src/lexer.c +++ b/src/lexer.c @@ -406,18 +406,12 @@ scan_token(Scanner *scanner) { Scanner current = *scanner; char c = scan_next(scanner); switch (c) { - case '(': - return emit_token(current, scanner, TOK_LPAREN); - case ')': - return emit_token(current, scanner, TOK_RPAREN); - case '[': - return emit_token(current, scanner, TOK_LSQUARE); - case ']': - return emit_token(current, scanner, TOK_RSQUARE); - case '{': - return emit_token(current, scanner, TOK_LCURLY); - case '}': - return emit_token(current, scanner, TOK_RCURLY); + case '(': return emit_token(current, scanner, TOK_LPAREN); + case ')': return emit_token(current, scanner, TOK_RPAREN); + case '[': return emit_token(current, scanner, TOK_LSQUARE); + case ']': return emit_token(current, scanner, TOK_RSQUARE); + case '{': return emit_token(current, scanner, TOK_LCURLY); + case '}': return emit_token(current, scanner, TOK_RCURLY); case '+': { char p = scan_peek(scanner); if (p >= '0' && p <= '9') { @@ -434,12 +428,9 @@ scan_token(Scanner *scanner) { } return emit_token(current, scanner, TOK_SUB); }; - case '*': - return emit_token(current, scanner, TOK_MUL); - case '/': - return emit_token(current, scanner, TOK_DIV); - case '%': - return emit_token(current, scanner, TOK_MOD); + case '*': return emit_token(current, scanner, TOK_MUL); + case '/': return emit_token(current, scanner, TOK_DIV); + case '%': return emit_token(current, scanner, TOK_MOD); case '!': { if (scan_peek(scanner) == '=') { scan_next(scanner); @@ -478,8 +469,7 @@ scan_token(Scanner *scanner) { } return emit_token(current, scanner, TOK_GT); }; - case '~': - return emit_token(current, scanner, TOK_BITNOT); + case '~': return emit_token(current, scanner, TOK_BITNOT); case '&': { if (scan_peek(scanner) == '&') { scan_next(scanner); @@ -494,12 +484,9 @@ scan_token(Scanner *scanner) { } return emit_token(current, scanner, TOK_BITOR); }; - case ':': - return emit_token(current, scanner, TOK_COLON); - case '.': - return emit_token(current, scanner, TOK_DOT); - case '@': - return emit_token(current, scanner, TOK_AT); + case ':': return emit_token(current, scanner, TOK_COLON); + case '.': return emit_token(current, scanner, TOK_DOT); + case '@': return emit_token(current, scanner, TOK_AT); case '"': { while (scan_has_next(scanner)) { c = scan_next(scanner); diff --git a/src/main.c b/src/main.c index cea7a45..bce0a55 100644 --- a/src/main.c +++ b/src/main.c @@ -81,49 +81,6 @@ node_alloc(NodeKind kind, Token tok, Arena *a) { return node; } -void -print_node(Node *node) { - if (!node) { - return; - } - switch (node->kind) { - case NODE_NUMBER: { - print("%d", node->value.i); - } break; - case NODE_ADD: { - print("(+ "); - print_node(node->left); - print(" "); - print_node(node->right); - print(")"); - } break; - case NODE_SUB: { - print("(- "); - print_node(node->left); - print(" "); - print_node(node->right); - print(")"); - } break; - case NODE_DIV: { - print("(/ "); - print_node(node->left); - print(" "); - print_node(node->right); - print(")"); - } break; - case NODE_MUL: { - print("(* "); - print_node(node->left); - print(" "); - print_node(node->right); - print(")"); - } break; - default: { - eprintln("error: unknown node kind: %d", node->kind); - } break; - } -} - // // Parsing. // @@ -239,47 +196,39 @@ parse_prec(Parser *parser, ParsePrecedence precedence) { void parse_unary(Parser *parser) { + Token prev = parser->previous; #if DEBUG == 1 print("parsing unary "); - print_token(parser->previous); + print_token(prev); #endif - parse_prec(parser, PREC_ASSIGNMENT); TokenKind kind = parser->previous.kind; parse_expr(parser); // TODO: ... switch (kind) { // case TOKEN_MINUS: emitByte(OP_NEGATE); break; - default: - return; // Unreachable. + default: return; // Unreachable. } } void parse_binary(Parser *parser) { + Token prev = parser->previous; #if DEBUG == 1 print("parsing binary "); - print_token(parser->previous); + print_token(prev); #endif - TokenKind kind = parser->previous.kind; + TokenKind kind = prev.kind; ParseRule rule = parse_rules[kind]; parse_prec(parser, rule.precedence + 1); Node *node; switch (kind) { - case TOK_ADD: { - node = node_alloc(NODE_ADD, parser->previous, parser->storage); - } break; - case TOK_SUB: { - node = node_alloc(NODE_SUB, parser->previous, parser->storage); - } break; - case TOK_MUL: { - node = node_alloc(NODE_MUL, parser->previous, parser->storage); - } break; - case TOK_DIV: { - node = node_alloc(NODE_DIV, parser->previous, parser->storage); - } break; + case TOK_ADD: node = node_alloc(NODE_ADD, prev, parser->storage); break; + case TOK_SUB: node = node_alloc(NODE_SUB, prev, parser->storage); break; + case TOK_MUL: node = node_alloc(NODE_MUL, prev, parser->storage); break; + case TOK_DIV: node = node_alloc(NODE_DIV, prev, parser->storage); break; default: { - parse_emit_err(parser, parser->previous, cstr("unreachable")); + parse_emit_err(parser, prev, cstr("unreachable")); return; } } @@ -290,12 +239,13 @@ parse_binary(Parser *parser) { void parse_number(Parser *parser) { + Token prev = parser->previous; #if DEBUG == 1 print("parsing number "); - print_token(parser->previous); + print_token(prev); #endif - Node *node = node_alloc(NODE_NUMBER, parser->previous, parser->storage); - node->value.i = str_to_int(parser->previous.val); + Node *node = node_alloc(NODE_NUMBER, prev, parser->storage); + node->value.i = str_to_int(prev.val); // TODO: handle sign and/or floating point values. array_push(parser->nodes, node, parser->storage); } @@ -324,11 +274,8 @@ graph_node(Node *node) { print("%d [width=2.5,shape=Mrecord,label=\"", node->id); print(" %s ", node_str[node->kind]); switch (node->kind) { - case NODE_NUMBER: { - print("| Value: %d", node->value.i); - } break; - default: - break; + case NODE_NUMBER: print("| Value: %d", node->value.i); break; + default: break; } print("| Line: %d | Col: %d ", node->line, node->col); println("\"];"); @@ -415,7 +362,6 @@ process_file(Str path) { for (sz i = 0; i < n_roots; i++) { // The parser stores the root nodes as a stack. Node *root = parser.nodes[i]; - print_node(root); println(""); (void)root; } parse_consume(&parser, TOK_EOF, cstr("expected end of file")); -- cgit v1.2.1