]> git.xonotic.org Git - xonotic/gmqcc.git/blobdiff - exec.c
Removed -fomit-null-bytes
[xonotic/gmqcc.git] / exec.c
diff --git a/exec.c b/exec.c
index b0d7b20a62f95ee23b53dc7e5c5bb6b09c0604b6..cc05630f0ed2eca6694ea00444b9f89ef884ded3 100644 (file)
--- a/exec.c
+++ b/exec.c
@@ -477,7 +477,8 @@ static void prog_print_statement(qc_program *prog, prog_section_statement *st)
 static qcint prog_enterfunction(qc_program *prog, prog_section_function *func)
 {
     qc_exec_stack st;
-    size_t p, parampos;
+    size_t  parampos;
+    int32_t p;
 
     /* back up locals */
     st.localsp  = vec_size(prog->localstack);
@@ -691,6 +692,18 @@ static int qc_ftos(qc_program *prog)
     return 0;
 }
 
+static int qc_stof(qc_program *prog)
+{
+    char buffer[512];
+    qcany *str;
+    qcany num;
+    CheckArgs(1);
+    str = GetArg(0);
+    num._float = strtof(prog_getstring(prog, str->string), NULL);
+    Return(num);
+    return 0;
+}
+
 static int qc_vtos(qc_program *prog)
 {
     char buffer[512];
@@ -740,7 +753,7 @@ static int qc_vlen(qc_program *prog)
     qcany *vec, len;
     CheckArgs(1);
     vec = GetArg(0);
-    len._float = sqrt(vec->vector[0] * vec->vector[0] + 
+    len._float = sqrt(vec->vector[0] * vec->vector[0] +
                       vec->vector[1] * vec->vector[1] +
                       vec->vector[2] * vec->vector[2]);
     Return(len);
@@ -756,7 +769,8 @@ static prog_builtin qc_builtins[] = {
     &qc_vtos,  /*   5   */
     &qc_error, /*   6   */
     &qc_vlen,  /*   7   */
-    &qc_etos   /*   8   */
+    &qc_etos,  /*   8   */
+    &qc_stof   /*   9   */
 };
 static size_t qc_builtins_count = sizeof(qc_builtins) / sizeof(qc_builtins[0]);
 
@@ -814,6 +828,7 @@ int main(int argc, char **argv)
     size_t      xflags = VMXF_DEFAULT;
     bool        opts_printfields = false;
     bool        opts_printdefs   = false;
+    bool        opts_printfuns   = false;
     bool        opts_disasm      = false;
     bool        opts_info  = false;
 
@@ -848,6 +863,11 @@ int main(int argc, char **argv)
             ++argv;
             opts_printdefs = true;
         }
+        else if (!strcmp(argv[1], "-printfuns")) {
+            --argc;
+            ++argv;
+            opts_printfuns = true;
+        }
         else if (!strcmp(argv[1], "-printfields")) {
             --argc;
             ++argv;
@@ -890,8 +910,9 @@ int main(int argc, char **argv)
     prog->builtins_count = qc_builtins_count;
 
     if (opts_info) {
-        printf("Program's system-checksum = 0x%04x\n", (int)prog->crc16);
-        printf("Entity field space: %i\n", (int)prog->entityfields);
+        printf("Program's system-checksum = 0x%04x\n", (unsigned int)prog->crc16);
+        printf("Entity field space: %u\n", (unsigned int)prog->entityfields);
+        printf("Globals: %u\n", (unsigned int)vec_size(prog->globals));
     }
 
     for (i = 1; i < vec_size(prog->functions); ++i) {
@@ -925,6 +946,18 @@ int main(int argc, char **argv)
                    (unsigned int)prog->fields[i].offset);
         }
     }
+    else if (opts_printfuns) {
+        for (i = 0; i < vec_size(prog->functions); ++i) {
+            int32_t a;
+            printf("Function: %-16s taking %i parameters:",
+                   prog_getstring(prog, prog->functions[i].name),
+                   (unsigned int)prog->functions[i].nargs);
+            for (a = 0; a < prog->functions[i].nargs; ++a) {
+                printf(" %i", prog->functions[i].argsize[a]);
+            }
+            printf(" firstlocal: %i\n", prog->functions[i].firstlocal);
+        }
+    }
     else
     {
         if (fnmain > 0)