From e5eeded02a4abe2729e675203437c79d9ee71a7a Mon Sep 17 00:00:00 2001
From: David Phillips <david@sighup.nz>
Date: Sun, 14 Apr 2019 19:27:09 +1200
Subject: emit_error -> emit, factor keywords out

---
 util.c | 20 +++++++++++++++++++-
 1 file changed, 19 insertions(+), 1 deletion(-)

(limited to 'util.c')

diff --git a/util.c b/util.c
index c9b0bc1..8d171a1 100644
--- a/util.c
+++ b/util.c
@@ -5,6 +5,22 @@
 #include "lex.h"
 
 /**
+ * Keywords
+ */
+static struct {
+	int look;
+	const char *str;
+} keywords[] = {
+	{ .look = 0, .str = "declare" },
+	{ .look = 0, .str = "byte"    },
+	{ .look = 0, .str = "bytes"   },
+	{ .look = 0, .str = "word"    },
+	{ .look = 0, .str = "words"   },
+	{ .look = 0, .str = "base"    },
+	{ .str = NULL },
+};
+
+/**
   * Human-readable descriptions for tokens
   */
 static struct {
@@ -117,7 +133,8 @@ int name(const char *x, type *res) { \
 	size_t i = 0; \
 	for (i = 0; lookup[i].str; i++) \
 		if (strcmp(lookup[i].str, x) == 0) { \
-			*res = lookup[i].look; \
+			if (res) \
+				*res = lookup[i].look; \
 			return 0; \
 		} \
 	return 1; \
@@ -129,6 +146,7 @@ GENERATE_STR_LOOKUP_FUNC(get_asm_from_b, b_to_asm, enum JCOND);
 GENERATE_STR_LOOKUP_FUNC(get_asm_from_reg, reg_to_asm, enum REG);
 GENERATE_STR_LOOKUP_FUNC(get_token_description, token_to_desc, enum TOKEN_TYPE);
 
+GENERATE_NUM_LOOKUP_FUNC(get_keyword, keywords, int);
 GENERATE_NUM_LOOKUP_FUNC(get_oper_from_asm, oper_to_asm, enum OPER);
 GENERATE_NUM_LOOKUP_FUNC(get_j_from_asm, j_to_asm, enum JCOND);
 GENERATE_NUM_LOOKUP_FUNC(get_b_from_asm, b_to_asm, enum JCOND);
-- 
cgit v1.1