From c436c3a6c66fa51ff52ac8740bcc82c58f4afa30 Mon Sep 17 00:00:00 2001
From: Dale Weiler <killfieldengine@gmail.com>
Date: Mon, 9 Apr 2012 07:45:20 -0400
Subject: [PATCH] Some new types, and lexer changes

---
 gmqcc   | Bin 17230 -> 17486 bytes
 gmqcc.h |  33 ++++++++++++++++++++-------------
 lex.c   |  11 ++++++++++-
 parse.c |   1 +
 4 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/gmqcc b/gmqcc
index 1c50928f3d25825755ac41cb5c218900a0f59668..f34c8a62d65e4d80880e4e4ec6ad0dde46d5cf60 100755
GIT binary patch
delta 4251
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
a!zl{Sk{`5b$g|Y#t%~FF{a;nNWBw121iYdE

delta 4025
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
MESD3!P}Ugpf8sS(H~;_u

diff --git a/gmqcc.h b/gmqcc.h
index 162eed4..091725b 100644
--- a/gmqcc.h
+++ b/gmqcc.h
@@ -20,8 +20,8 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  * SOFTWARE.
  */
-#ifndef DPQCC_HDR
-#define DPQCC_HDR
+#ifndef GMQCC_HDR
+#define GMQCC_HDR
 #include <stdio.h>
 
 /* The types supported by the language */
@@ -155,23 +155,30 @@ struct lex_file {
 #define TOKEN_CONTINUE 5
 #define TOKEN_RETURN   6
 #define TOKEN_GOTO     7
-#define TOKEN_FOR      8
+#define TOKEN_FOR      8   // extension
+#define TOKEN_INT      9   // extension
+#define TOKEN_BOOL     10  // extension
+#define TOKEN_VOID     11
+#define TOKEN_STRING   12
+#define TOKEN_FLOAT    13
+#define TOKEN_VECTOR   14
+#define TOKEN_ENTITY   15
 
 /*
  * Lexer state constants, these are numbers for where exactly in
  * the lexing the lexer is at. Or where it decided to stop if a lexer
  * error occurs.
  */
-#define LEX_COMMENT  128 /* higher than ascii */
-#define LEX_CHRLIT   129
-#define LEX_STRLIT   130
-#define LEX_IDENT    131
-#define LEX_DO       132
-#define LEX_ELSE     133
-#define LEX_IF       134
-#define LEX_WHILE    135
-#define LEX_INCLUDE  136
-#define LEX_DEFINE   137
+#define LEX_COMMENT    128 /* higher than ascii */
+#define LEX_CHRLIT     129
+#define LEX_STRLIT     130
+#define LEX_IDENT      131
+#define LEX_DO         132
+#define LEX_ELSE       133
+#define LEX_IF         134
+#define LEX_WHILE      135
+#define LEX_INCLUDE    136
+#define LEX_DEFINE     137
 
 int              lex_token(struct lex_file *);
 void             lex_reset(struct lex_file *);
diff --git a/lex.c b/lex.c
index 1cb8d0c..e94252d 100644
--- a/lex.c
+++ b/lex.c
@@ -30,7 +30,16 @@
 static const char *const lex_keywords[] = {
 	"do",    "else",     "if",     "while",
 	"break", "continue", "return", "goto",
-	"for"
+	"for",
+	
+	/* types */
+	"int",
+	"bool",
+	"void",
+	"string",
+	"float",
+	"vector",
+	"entity"
 };
 
 struct lex_file *lex_open(const char *name) {
diff --git a/parse.c b/parse.c
index a43981f..7743360 100644
--- a/parse.c
+++ b/parse.c
@@ -22,6 +22,7 @@
  */
 #include <limits.h>
 #include "gmqcc.h"
+
 int parse(struct lex_file *file) {
 	int     token = 0;
 	while ((token = lex_token(file)) != ERROR_LEX && file->length >= 0) {
-- 
2.39.5