aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-12-23 13:59:20 +0100
committerBad Diode <bd@badd10de.dev>2021-12-23 13:59:20 +0100
commit97b0a3dcdf750ae36eb40cdc57b30b1ee021d3d3 (patch)
tree01652c3b842c286b70f91e5f2b90c41a3e575011
parent4c2be0ee13ce16c0274741f77c0d07ea768a2f64 (diff)
downloadbdl-97b0a3dcdf750ae36eb40cdc57b30b1ee021d3d3.tar.gz
bdl-97b0a3dcdf750ae36eb40cdc57b30b1ee021d3d3.zip
Fix warnings on macos
-rw-r--r--Makefile2
-rw-r--r--src/ir.h42
2 files changed, 25 insertions, 19 deletions
diff --git a/Makefile b/Makefile
index 4e31a67..31e98e3 100644
--- a/Makefile
+++ b/Makefile
@@ -15,7 +15,7 @@ BIN := $(BUILD_DIR)/$(TARGET)
15 15
16# Compiler and linker configuration. 16# Compiler and linker configuration.
17CC := cc 17CC := cc
18CFLAGS := -Wall -Wextra -pedantic -DBIN_NAME=\"$(TARGET)\" 18CFLAGS := -Wall -Wextra -pedantic -DBIN_NAME=\"$(TARGET)\" -Wno-missing-braces
19CFLAGS += $(INC_FLAGS) 19CFLAGS += $(INC_FLAGS)
20NASM_FLAGS ?= -felf64 20NASM_FLAGS ?= -felf64
21LDFLAGS := 21LDFLAGS :=
diff --git a/src/ir.h b/src/ir.h
index c87babe..8518adb 100644
--- a/src/ir.h
+++ b/src/ir.h
@@ -132,7 +132,13 @@ typedef struct ProgramIr {
132 132
133#define INST_ARG(PROC, OP, ARG, LINE, COL) \ 133#define INST_ARG(PROC, OP, ARG, LINE, COL) \
134 do { \ 134 do { \
135 Instruction inst = (Instruction){(OP), (ARG), (LINE), (COL)}; \ 135 Instruction inst = (Instruction){(OP), .argument = (ARG), (LINE), (COL)}; \
136 array_push((PROC)->instructions, inst); \
137 } while(false);
138
139#define INST_LABEL(PROC, OP, ARG, LINE, COL) \
140 do { \
141 Instruction inst = (Instruction){(OP), .label_id = (ARG), (LINE), (COL)}; \
136 array_push((PROC)->instructions, inst); \ 142 array_push((PROC)->instructions, inst); \
137 } while(false); 143 } while(false);
138 144
@@ -208,15 +214,15 @@ compile_numeric_cmp(ProgramIr *program, Procedure *proc, Op op,
208 args = args->tail; 214 args = args->tail;
209 INST_SIMPLE(proc, OP_DUP, line, col); 215 INST_SIMPLE(proc, OP_DUP, line, col);
210 INST_SIMPLE(proc, OP_ROT_RIGHT, line, col); 216 INST_SIMPLE(proc, OP_ROT_RIGHT, line, col);
211 INST_ARG(proc, op, label_false, line, col); 217 INST_LABEL(proc, op, label_false, line, col);
212 } 218 }
213 INST_SIMPLE(proc, OP_DROP, line, col); 219 INST_SIMPLE(proc, OP_DROP, line, col);
214 INST_ARG(proc, OP_PUSH, &obj_true, line, col); 220 INST_ARG(proc, OP_PUSH, &obj_true, line, col);
215 INST_ARG(proc, OP_JUMP, label_exit, line, col); 221 INST_LABEL(proc, OP_JUMP, label_exit, line, col);
216 INST_ARG(proc, OP_LABEL, label_false, line, col); 222 INST_LABEL(proc, OP_LABEL, label_false, line, col);
217 INST_SIMPLE(proc, OP_DROP, line, col); 223 INST_SIMPLE(proc, OP_DROP, line, col);
218 INST_ARG(proc, OP_PUSH, &obj_false, line, col); 224 INST_ARG(proc, OP_PUSH, &obj_false, line, col);
219 INST_ARG(proc, OP_LABEL, label_exit, line, col); 225 INST_LABEL(proc, OP_LABEL, label_exit, line, col);
220} 226}
221 227
222void 228void
@@ -244,13 +250,13 @@ compile_and(ProgramIr *program, Procedure *proc,
244 while (args != NULL) { 250 while (args != NULL) {
245 compile_object(program, proc, args->head); 251 compile_object(program, proc, args->head);
246 args = args->tail; 252 args = args->tail;
247 INST_ARG(proc, OP_JUMP_IF_FALSE, label_false, line, col); 253 INST_LABEL(proc, OP_JUMP_IF_FALSE, label_false, line, col);
248 } 254 }
249 INST_ARG(proc, OP_PUSH, &obj_true, line, col); 255 INST_ARG(proc, OP_PUSH, &obj_true, line, col);
250 INST_ARG(proc, OP_JUMP, label_exit, line, col); 256 INST_LABEL(proc, OP_JUMP, label_exit, line, col);
251 INST_ARG(proc, OP_LABEL, label_false, line, col); 257 INST_LABEL(proc, OP_LABEL, label_false, line, col);
252 INST_ARG(proc, OP_PUSH, &obj_false, line, col); 258 INST_ARG(proc, OP_PUSH, &obj_false, line, col);
253 INST_ARG(proc, OP_LABEL, label_exit, line, col); 259 INST_LABEL(proc, OP_LABEL, label_exit, line, col);
254} 260}
255 261
256void 262void
@@ -261,13 +267,13 @@ compile_or(ProgramIr *program, Procedure *proc,
261 while (args != NULL) { 267 while (args != NULL) {
262 compile_object(program, proc, args->head); 268 compile_object(program, proc, args->head);
263 args = args->tail; 269 args = args->tail;
264 INST_ARG(proc, OP_JUMP_IF_TRUE, label_true, line, col); 270 INST_LABEL(proc, OP_JUMP_IF_TRUE, label_true, line, col);
265 } 271 }
266 INST_ARG(proc, OP_PUSH, &obj_false, line, col); 272 INST_ARG(proc, OP_PUSH, &obj_false, line, col);
267 INST_ARG(proc, OP_JUMP, label_exit, line, col); 273 INST_LABEL(proc, OP_JUMP, label_exit, line, col);
268 INST_ARG(proc, OP_LABEL, label_true, line, col); 274 INST_LABEL(proc, OP_LABEL, label_true, line, col);
269 INST_ARG(proc, OP_PUSH, &obj_true, line, col); 275 INST_ARG(proc, OP_PUSH, &obj_true, line, col);
270 INST_ARG(proc, OP_LABEL, label_exit, line, col); 276 INST_LABEL(proc, OP_LABEL, label_exit, line, col);
271} 277}
272 278
273void 279void
@@ -332,16 +338,16 @@ void
332compile_if(ProgramIr *program, Procedure *proc, Object *obj) { 338compile_if(ProgramIr *program, Procedure *proc, Object *obj) {
333 size_t label_false = program->labels++; 339 size_t label_false = program->labels++;
334 compile_object(program, proc, obj->condition); 340 compile_object(program, proc, obj->condition);
335 INST_ARG(proc, OP_JUMP_IF_FALSE, label_false, obj->line, obj->col); 341 INST_LABEL(proc, OP_JUMP_IF_FALSE, label_false, obj->line, obj->col);
336 compile_object(program, proc, obj->expr_true); 342 compile_object(program, proc, obj->expr_true);
337 if (obj->expr_false != NULL) { 343 if (obj->expr_false != NULL) {
338 size_t label_exit = program->labels++; 344 size_t label_exit = program->labels++;
339 INST_ARG(proc, OP_JUMP, label_exit, obj->line, obj->col); 345 INST_LABEL(proc, OP_JUMP, label_exit, obj->line, obj->col);
340 INST_ARG(proc, OP_LABEL, label_false, obj->line, obj->col); 346 INST_LABEL(proc, OP_LABEL, label_false, obj->line, obj->col);
341 compile_object(program, proc, obj->expr_false); 347 compile_object(program, proc, obj->expr_false);
342 INST_ARG(proc, OP_LABEL, label_exit, obj->line, obj->col); 348 INST_LABEL(proc, OP_LABEL, label_exit, obj->line, obj->col);
343 } else { 349 } else {
344 INST_ARG(proc, OP_LABEL, label_false, obj->line, obj->col); 350 INST_LABEL(proc, OP_LABEL, label_false, obj->line, obj->col);
345 } 351 }
346} 352}
347 353