]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - code.c
Fix murmur hash seeding
[xonotic/gmqcc.git] / code.c
diff --git a/code.c b/code.c
index 052b13a8937016bd2cb5997b6989cc17510c43e7..3c418b1653125786a47f44355a32ae23e4da79b5 100644 (file)
--- a/code.c
+++ b/code.c
@@ -30,7 +30,6 @@ prog_section_field     *code_fields;
 prog_section_function  *code_functions;
 int                    *code_globals;
 char                   *code_chars;
-
 uint16_t                code_crc;
 uint32_t                code_entfields;
 
@@ -40,6 +39,12 @@ void code_push_statement(prog_section_statement *stmt, int linenum)
     vec_push(code_linenums,   linenum);
 }
 
+void code_pop_statement()
+{
+    vec_pop(code_statements);
+    vec_pop(code_linenums);
+}
+
 void code_init() {
     prog_section_function  empty_function  = {0,0,0,0,0,0,0,{0}};
     prog_section_statement empty_statement = {0,{0},{0},{0}};
@@ -48,10 +53,6 @@ void code_init() {
 
     code_entfields = 0;
 
-    /* omit creation of null code */
-    if (OPTS_FLAG(OMIT_NULL_BYTES))
-        return;
-
     /*
      * The way progs.dat is suppose to work is odd, there needs to be
      * some null (empty) statements, functions, and 28 globals
@@ -93,47 +94,6 @@ uint32_t code_cachedstring(const char *str)
     return code_genstring(str);
 }
 
-void code_test() {
-    prog_section_def       d1 = { TYPE_VOID,     28, 1 };
-    prog_section_def       d2 = { TYPE_FUNCTION, 29, 8 };
-    prog_section_def       d3 = { TYPE_STRING,   30, 14};
-    prog_section_function  f1 = { 1, 0, 0, 0, 1,            0,0, {0}};
-    prog_section_function  f2 = {-4, 0, 0, 0, 8,            0,0, {0}};
-    prog_section_function  f3 = { 0, 0, 0, 0, 14+13,        0,0, {0}};
-    prog_section_function  f4 = { 0, 0, 0, 0, 14+13+10,     0,0, {0}};
-    prog_section_function  f5 = { 0, 0, 0, 0, 14+13+10+7,   0,0, {0}};
-    prog_section_function  f6 = { 0, 0, 0, 0, 14+13+10+7+9, 0,0, {0}};
-    prog_section_statement s1 = { INSTR_STORE_F, {30}, {OFS_PARM0}, {0}};
-    prog_section_statement s2 = { INSTR_CALL1,   {29}, {0},         {0}};
-    prog_section_statement s3 = { INSTR_RETURN,  {0},  {0},         {0}};
-
-    strcpy(vec_add(code_chars, 0x7), "m_init");
-    strcpy(vec_add(code_chars, 0x6), "print");
-    strcpy(vec_add(code_chars, 0xD), "hello world\n");
-    strcpy(vec_add(code_chars, 0xA), "m_keydown");
-    strcpy(vec_add(code_chars, 0x7), "m_draw");
-    strcpy(vec_add(code_chars, 0x9), "m_toggle");
-    strcpy(vec_add(code_chars, 0xB), "m_shutdown");
-
-    vec_push(code_globals, 1);  /* m_init */
-    vec_push(code_globals, 2);  /* print  */
-    vec_push(code_globals, 14); /* hello world in string table */
-
-    /* now the defs */
-    vec_push(code_defs,       d1); /* m_init    */
-    vec_push(code_defs,       d2); /* print     */
-    vec_push(code_defs,       d3); /*hello_world*/
-    vec_push(code_functions,  f1); /* m_init    */
-    vec_push(code_functions,  f2); /* print     */
-    vec_push(code_functions,  f3); /* m_keydown */
-    vec_push(code_functions,  f4);
-    vec_push(code_functions,  f5);
-    vec_push(code_functions,  f6);
-    vec_push(code_statements, s1);
-    vec_push(code_statements, s2);
-    vec_push(code_statements, s3);
-}
-
 qcint code_alloc_field (size_t qcsize)
 {
     qcint pos = (qcint)code_entfields;
@@ -146,8 +106,6 @@ bool code_write(const char *filename, const char *lnofile) {
     FILE        *fp           = NULL;
     size_t       it           = 2;
 
-    /* see proposal.txt */
-    if (OPTS_FLAG(OMIT_NULL_BYTES)) {}
     code_header.statements.offset = sizeof(prog_header);
     code_header.statements.length = vec_size(code_statements);
     code_header.defs.offset       = code_header.statements.offset + (sizeof(prog_section_statement) * vec_size(code_statements));
@@ -161,8 +119,8 @@ bool code_write(const char *filename, const char *lnofile) {
     code_header.strings.offset    = code_header.globals.offset    + (sizeof(int32_t)                * vec_size(code_globals));
     code_header.strings.length    = vec_size(code_chars);
     code_header.version           = 6;
-    if (opts_forcecrc)
-        code_header.crc16         = opts_forced_crc;
+    if (opts.forcecrc)
+        code_header.crc16         = opts.forced_crc;
     else
         code_header.crc16         = code_crc;
     code_header.entfield          = code_entfields;
@@ -184,27 +142,16 @@ bool code_write(const char *filename, const char *lnofile) {
         if (!fp)
             return false;
 
-        if (fwrite(&lnotype, sizeof(lnotype), 1, fp) != 1 ||
-            fwrite(&version, sizeof(version), 1, fp) != 1 ||
-            fwrite(&code_header.defs.length,        sizeof(code_header.defs.length),        1, fp) != 1 ||
-            fwrite(&code_header.globals.length,     sizeof(code_header.globals.length),     1, fp) != 1 ||
-            fwrite(&code_header.fields.length,      sizeof(code_header.fields.length),      1, fp) != 1 ||
-            fwrite(&code_header.statements.length,  sizeof(code_header.statements.length),  1, fp) != 1 ||
-            fwrite(code_linenums, sizeof(code_linenums[0]), vec_size(code_linenums), fp) != vec_size(code_linenums))
+        if (fwrite(&lnotype,                        sizeof(lnotype),                        1,                       fp) != 1 ||
+            fwrite(&version,                        sizeof(version),                        1,                       fp) != 1 ||
+            fwrite(&code_header.defs.length,        sizeof(code_header.defs.length),        1,                       fp) != 1 ||
+            fwrite(&code_header.globals.length,     sizeof(code_header.globals.length),     1,                       fp) != 1 ||
+            fwrite(&code_header.fields.length,      sizeof(code_header.fields.length),      1,                       fp) != 1 ||
+            fwrite(&code_header.statements.length,  sizeof(code_header.statements.length),  1,                       fp) != 1 ||
+            fwrite(code_linenums,                   sizeof(code_linenums[0]),               vec_size(code_linenums), fp) != vec_size(code_linenums))
         {
             con_err("failed to write lno file\n");
         }
-            /*
-                       h = SafeOpenWrite (destfile, 2*1024*1024);
-                       SafeWrite (h, &lnotype, sizeof(int));
-                       SafeWrite (h, &version, sizeof(int));
-                       SafeWrite (h, &numglobaldefs, sizeof(int));
-                       SafeWrite (h, &numpr_globals, sizeof(int));
-                       SafeWrite (h, &numfielddefs, sizeof(int));
-                       SafeWrite (h, &numstatements, sizeof(int));
-                       SafeWrite (h, statement_linenums, numstatements*sizeof(int));
-                       SafeClose (h);
-                       */
 
         fclose(fp);
         fp = NULL;
@@ -272,7 +219,7 @@ bool code_write(const char *filename, const char *lnofile) {
         if (code_functions[it].entry >= 0) {
             util_debug("GEN", "    CODE:\n");
             for (;;) {
-                if (code_statements[j].opcode != AINSTR_END)
+                if (code_statements[j].opcode != INSTR_DONE)
                     util_debug("GEN", "        %-12s {% 5i,% 5i,% 5i}\n",
                         asm_instr[code_statements[j].opcode].m,
                         code_statements[j].o1.s1,