]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - pr_execprogram.h
made id_pointer fields of rcachearrayrequest_t const (because they'll never be used...
[xonotic/darkplaces.git] / pr_execprogram.h
index be8468bcfccbde1adc3f10a2ad396e71ab92faa8..4c2001eee276a8e924780d9a2d91d112d0fe39e1 100644 (file)
@@ -4,7 +4,7 @@
                while (1)
                {
                        st++;
-                       if (++profile > 1000000) // LordHavoc: increased runaway loop limit 10x
+                       if (++profile > 10000000) // LordHavoc: increased runaway loop limit 100x
                        {
                                pr_xstatement = st - pr_statements;
                                Host_Error ("runaway loop error");
@@ -82,7 +82,7 @@
                                OPC->_float = !OPA->vector[0] && !OPA->vector[1] && !OPA->vector[2];
                                break;
                        case OP_NOT_S:
-                               OPC->_float = !OPA->string || !pr_strings[OPA->string];
+                               OPC->_float = !OPA->string || !*PR_GetString(OPA->string);
                                break;
                        case OP_NOT_FNC:
                                OPC->_float = !OPA->function;
@@ -97,7 +97,7 @@
                                OPC->_float = (OPA->vector[0] == OPB->vector[0]) && (OPA->vector[1] == OPB->vector[1]) && (OPA->vector[2] == OPB->vector[2]);
                                break;
                        case OP_EQ_S:
-                               OPC->_float = !strcmp(pr_strings+OPA->string,pr_strings+OPB->string);
+                               OPC->_float = !strcmp(PR_GetString(OPA->string),PR_GetString(OPB->string));
                                break;
                        case OP_EQ_E:
                                OPC->_float = OPA->_int == OPB->_int;
                                OPC->_float = (OPA->vector[0] != OPB->vector[0]) || (OPA->vector[1] != OPB->vector[1]) || (OPA->vector[2] != OPB->vector[2]);
                                break;
                        case OP_NE_S:
-                               OPC->_float = strcmp(pr_strings+OPA->string,pr_strings+OPB->string);
+                               OPC->_float = strcmp(PR_GetString(OPA->string),PR_GetString(OPB->string));
                                break;
                        case OP_NE_E:
                                OPC->_float = OPA->_int != OPB->_int;
                                OPB->_int = OPA->_int;
                                break;
                        case OP_STORE_V:
-                               OPB->vector[0] = OPA->vector[0];
-                               OPB->vector[1] = OPA->vector[1];
-                               OPB->vector[2] = OPA->vector[2];
+                               OPB->ivector[0] = OPA->ivector[0];
+                               OPB->ivector[1] = OPA->ivector[1];
+                               OPB->ivector[2] = OPA->ivector[2];
                                break;
 
                        case OP_STOREP_F:
                                if (newf->first_statement < 0)
                                {
                                        // negative statements are built in functions
-                                       if ((-newf->first_statement) >= pr_numbuiltins)
-                                               Host_Error ("Bad builtin call number");
-                                       pr_builtins[-newf->first_statement] ();
+                                       int builtinnumber = -newf->first_statement;
+                                       pr_xfunction->builtinsprofile++;
+                                       if (builtinnumber < pr_numbuiltins && pr_builtins[builtinnumber])
+                                               pr_builtins[builtinnumber] ();
+                                       else
+                                               Host_Error ("No such builtin #%i", builtinnumber);
                                }
                                else
                                        st = pr_statements + PR_EnterFunction(newf);