]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - gmqcc.h
Cleanups
[xonotic/gmqcc.git] / gmqcc.h
diff --git a/gmqcc.h b/gmqcc.h
index 8219d9d1054046c007381b5dbc8ce5694229f077..68c7367670e707f1866dbaf4e51605ef2431ae99 100644 (file)
--- a/gmqcc.h
+++ b/gmqcc.h
 #define GMQCC_HDR
 #include <stdio.h>
 
-/* The types supported by the language */
+//===================================================================
+//============================ lex.c ================================
+//===================================================================
+struct lex_file {
+       FILE *file;
+       char  peek  [5];
+       char  lastok[8192];
+       
+       int   last;
+       int   current;
+       int   length;
+       int   size;
+};
+
+/*
+ * It's important that this table never exceed 32 keywords, the ascii
+ * table starts at 33 (and we don't want conflicts)
+ */
+#define TOKEN_DO       0
+#define TOKEN_ELSE     1
+#define TOKEN_IF       2
+#define TOKEN_WHILE    3
+#define TOKEN_BREAK    4
+#define TOKEN_CONTINUE 5
+#define TOKEN_RETURN   6
+#define TOKEN_GOTO     7
+#define TOKEN_FOR      8   // extension
+#define TOKEN_TYPEDEF  9   // extension
+
+// ensure the token types are out of the
+// bounds of anyothers that may conflict.
+#define TOKEN_FLOAT    110
+#define TOKEN_VECTOR   111
+#define TOKEN_STRING   112
+#define TOKEN_ENTITY   113
+#define TOKEN_VOID     114
+
+/*
+ * 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.  These numbers must be > where the ascii-table ends
+ * and > the last type token which is TOKEN_VOID
+ */
+#define LEX_COMMENT    1128 
+#define LEX_CHRLIT     1129
+#define LEX_STRLIT     1130
+#define LEX_IDENT      1131
+
+int              lex_token(struct lex_file *);
+void             lex_reset(struct lex_file *);
+void             lex_close(struct lex_file *);
+struct lex_file *lex_open (FILE *);
+
+//===================================================================
+//========================== error.c ================================
+//===================================================================
+#define ERROR_LEX      (SHRT_MAX+0)
+#define ERROR_PARSE    (SHRT_MAX+1)
+#define ERROR_INTERNAL (SHRT_MAX+2)
+#define ERROR_COMPILER (SHRT_MAX+3)
+#define ERROR_PREPRO   (SHRT_MAX+4)
+int error(int, const char *, ...);
+
+//===================================================================
+//========================== parse.c ================================
+//===================================================================
+int parse_tree(struct lex_file *);
+struct parsenode {
+       struct parsenode *next;
+       int               type; /* some token */
+};
+
+//===================================================================
+//========================== typedef.c ==============================
+//===================================================================
+typedef struct typedef_node_t {
+       char      *name;
+} typedef_node;
+
+void          typedef_init();
+void          typedef_clear();
+typedef_node *typedef_find(const char *);
+int           typedef_add (const char *, const char *);
+
+
+//===================================================================
+//=========================== util.c ================================
+//===================================================================
+void *util_memory_a(unsigned int, unsigned int, const char *);
+void  util_memory_d(void       *, unsigned int, const char *);
+char *util_strdup  (const char *);
+
+#ifdef NOTRACK
+#      define mem_a(x) malloc(x)
+#      define mem_d(x) free  (x)
+#else
+#      define mem_a(x) util_memory_a((x), __LINE__, __FILE__)
+#      define mem_d(x) util_memory_d((x), __LINE__, __FILE__)
+#endif
+
+//===================================================================
+//=========================== code.c ================================
+//===================================================================
 #define TYPE_VOID     0
 #define TYPE_STRING   1
 #define TYPE_FLOAT    2
 #define TYPE_FUNCTION 6
 #define TYPE_POINTER  7
 
-/*
- * there are 3 accessible memory zones -
- * globals
- *     array of 32bit ints/floats, mixed, LE,
- * entities
- *     structure is up to the engine but the fields are a linear array
- *     of mixed ints/floats, there are globals referring to the offsets
- *     of these in the entity struct so there are ADDRESS and STOREP and
- *     LOAD instructions that use globals containing field offsets.
- * strings
- *     a static array in the progs.dat, with file parsing creating
- *     additional constants, and some engine fields are mapped by 
- *     address as well to unique string offsets
- */
 /* 
  * Instructions 
  * These are the external instructions supported by the interperter
- * this is what things compile to (from the C code). This is not internal
- * instructions for support like int, and such (which are translated)
+ * this is what things compile to (from the C code).
  */
 #define INSTR_DONE      0
 // math
-#define INSTR_MUL_F     1 /* multiplication float         */
-#define INSTR_MUL_V     2 /* multiplication vector        */
-#define INSTR_MUL_FV    3 /* multiplication float->vector */
-#define INSTR_MUL_VF    4 /* multiplication vector->float */
+#define INSTR_MUL_F     1
+#define INSTR_MUL_V     2
+#define INSTR_MUL_FV    3
+#define INSTR_MUL_VF    4
 #define INSTR_DIV_F     5
 #define INSTR_ADD_F     6
 #define INSTR_ADD_V     7
 #define INSTR_OR        57
 #define INSTR_BITAND    59
 #define INSTR_BITOR     60
-
-/*
- * This is the smallest lexer I've ever wrote: and I must say, it's quite
- * more nicer than those large bulky complex parsers that most people write
- * which has some sort of a complex state.
- */
-struct lex_file {
-       /*
-        * This is a simple state for lexing, no need to be complex for qc
-        * code.  It's trivial stuff.
-        */
-       FILE *file;
-       char  peek[5]; /* extend for depthier peeks */
-       int   last;
-       int   current;
-       int   length;
-       int   size;
-       char  lastok[8192]; /* No token shall ever be bigger than this! */
-};
-
-/*
- * It's important that this table never exceed 32 keywords, the ascii
- * table starts at 33 (and we don't want conflicts)
- */
-#define TOKEN_DO       0
-#define TOKEN_ELSE     1
-#define TOKEN_IF       2
-#define TOKEN_WHILE    3
-#define TOKEN_BREAK    4
-#define TOKEN_CONTINUE 5
-#define TOKEN_RETURN   6
-#define TOKEN_GOTO     7
-#define TOKEN_FOR      8   // extension
-#define TOKEN_TYPEDEF  9   // extension
-
-// ensure the token types are out of the
-// bounds of anyothers that may conflict.
-#define TOKEN_FLOAT    110
-#define TOKEN_VECTOR   111
-#define TOKEN_STRING   112
-#define TOKEN_ENTITY   113
-#define TOKEN_VOID     114
-
-/*
- * 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.  These numbers must be > where the ascii-table ends
- * and > the last type token which is TOKEN_VOID
- */
-#define LEX_COMMENT    1128 
-#define LEX_CHRLIT     1129
-#define LEX_STRLIT     1130
-#define LEX_IDENT      1131
-
-int              lex_token(struct lex_file *);
-void             lex_reset(struct lex_file *);
-void             lex_close(struct lex_file *);
-struct lex_file *lex_open (FILE *);
-
-/* errors */
-#define ERROR_LEX      (SHRT_MAX+0)
-#define ERROR_PARSE    (SHRT_MAX+1)
-#define ERROR_INTERNAL (SHRT_MAX+2)
-#define ERROR_COMPILER (SHRT_MAX+3)
-#define ERROR_PREPRO   (SHRT_MAX+4)
-int error(int, const char *, ...);
-
-/* parse.c */
-int parse_tree(struct lex_file *);
-struct parsenode {
-       struct parsenode *next;
-       int               type; /* some token */
-};
-
-/* typedef.c */
-typedef struct typedef_node_t {
-       char      *name; /* name of actual type */
-} typedef_node;
-
-void          typedef_init();
-void          typedef_clear();
-typedef_node *typedef_find(const char *);
-int           typedef_add (const char *, const char *);
-
-/* alloc.c */
-void *memory_a(unsigned int, unsigned int, const char *);
-void  memory_d(void       *, unsigned int, const char *);
-#ifdef NOTRACK
-#      define mem_a(x) malloc(x)
-#      define mem_d(x) free  (x)
-#else
-#      define mem_a(x) memory_a((x), __LINE__, __FILE__)
-#      define mem_d(x) memory_d((x), __LINE__, __FILE__)
-#endif
 #endif