ac6 @verb #4457:"eval_cmd_string" this none this rxdo #4457 @program #4457:"eval_cmd_string" this none this "Copied from Michael (#9659):eval_cmd_string Sep 2 01:17:04 2000" (cp = caller_perms()) != this && raise(E_PERM) progr = valid(cp) && cp.programmer {program, ?debug = 1} = args program = tostr(program) + ";" if (!match(program, "^ *%(;%|%(if%|fork?%|return%|while%|try%)[^a-z0-9A-Z_]%)")) program = "return " + program elseif (program == ";") program = "return 0;" endif program = $code_utils:substitute(program, this.eval_subs) while (1) if (i = index(program, " ~")) i = i + 1 e = 0 r = {} for x in ({",", ".", ":", " ", ")", "]", "}", ";"}) r = {@r, index(program[i..$], x)} endfor e = min(@$list_utils:setremove_all(r, 0)) e != 0 ? e = e + i | player:tell("Error finding player.") program = strsub(program, program[i..e - 2], tostr((e = $su:match_player(i = program[i + 1..e - 2])) == #-3 ? this:my_match_object(i) | e)) else break endif endwhile "manta's timing hack begins..." quoted = 0 skip = 0 inreturn = 0 newprogram = "" for index in [1..length(program)] x = index + skip if (x > length(program)) break endif if (program[x] == "\\") skip = skip + 1 newprogram = newprogram + program[x..x + 1] elseif (program[x] == "\"") newprogram = newprogram + "\"" quoted = !quoted elseif (!quoted && program[x..min(x + 5, $)] == "return" && program[min($, x + 6)] in {" ", "\"", "(", "#", "{", "!", "-", "."}) newprogram = newprogram + "EvalReturnValue =" inreturn = 1 skip = skip + 6 elseif (!quoted && program[x..min(x + 5, $)] == "return" && program[min($, x + 6)] == ";") newprogram = newprogram + "\"Killing \"+\" a tick.\";" inreturn = 1 skip = skip + 6 elseif (!quoted && program[x] == ";" && inreturn) inreturn = 0 newprogram = newprogram + ";break EvalReturnLabelThingy;" else newprogram = newprogram + program[x] endif endfor program = tostr("for EvalReturnLabelThingy in [1..1]", this.eval_env, ";", "EvalTicks = ticks_left(); EvalFTime = ftime();", newprogram, "endfor return {ftime()-EvalFTime, EvalTicks-ticks_left(), `EvalReturnValue ! E_VARNF =>0'};") if (progr) if (debug) value = eval(program) tickconst = 8 else value = $code_utils:eval_d(program) tickconst = 27 endif else tickconst = 0 value = $no_one:(debug ? "eval" | "eval_d")(program) endif if (value[1] == 0) return {0, value[2], 0, 0} elseif (typeof(value[2]) == $ERR) return {1, value[2], 0, 0.0} else return {1, value[2][$], value[2][2] - tickconst, value[2][1]} endif "Last modified by Dax (#789) on Tue May 3 13:46:00 2005 MDT." . 0