| Clazz.declarePackage ("JS"); | |
| Clazz.load (["J.api.JmolScriptFunction", "java.util.Hashtable", "JU.Lst"], "JS.ScriptFunction", ["JU.AU", "$.SB", "JS.SV", "$.T"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.pt0 = 0; | |
| this.chpt0 = 0; | |
| this.cmdpt0 = -1; | |
| this.typeName = null; | |
| this.name = null; | |
| this.nParameters = 0; | |
| this.names = null; | |
| this.tok = 0; | |
| this.variables = null; | |
| this.returnValue = null; | |
| this.aatoken = null; | |
| this.lineIndices = null; | |
| this.lineNumbers = null; | |
| this.script = null; | |
| Clazz.instantialize (this, arguments); | |
| }, JS, "ScriptFunction", null, J.api.JmolScriptFunction); | |
| Clazz.prepareFields (c$, function () { | |
| this.names = new JU.Lst (); | |
| this.variables = new java.util.Hashtable (); | |
| }); | |
| Clazz.defineMethod (c$, "isVariable", | |
| function (ident) { | |
| return this.variables.containsKey (ident); | |
| }, "~S"); | |
| Clazz.makeConstructor (c$, | |
| function () { | |
| }); | |
| Clazz.makeConstructor (c$, | |
| function (name, tok) { | |
| this.set (name, tok); | |
| this.typeName = JS.T.nameOf (tok); | |
| }, "~S,~N"); | |
| Clazz.defineMethod (c$, "set", | |
| function (name, tok) { | |
| this.name = name; | |
| this.tok = tok; | |
| }, "~S,~N"); | |
| Clazz.defineMethod (c$, "setVariables", | |
| function (contextVariables, params) { | |
| var nParams = (params == null ? 0 : params.size ()); | |
| for (var i = this.names.size (); --i >= 0; ) { | |
| var name = this.names.get (i).toLowerCase (); | |
| var $var = (i < this.nParameters && i < nParams ? params.get (i) : null); | |
| if ($var != null && $var.tok != 7) $var = JS.SV.newT ($var); | |
| contextVariables.put (name, ($var == null ? JS.SV.newS ("").setName (name) : $var)); | |
| } | |
| if (this.tok != 364558) { | |
| contextVariables.put ("_argcount", JS.SV.newI (params == null ? 0 : params.size ())); | |
| contextVariables.put ("_arguments", (params == null ? JS.SV.getVariableAI ( Clazz.newIntArray (-1, [])) : JS.SV.getVariableList (params))); | |
| }contextVariables.put ("_retval", JS.SV.newI (this.tok == 364558 ? 2147483647 : 0)); | |
| }, "java.util.Map,JU.Lst"); | |
| Clazz.defineMethod (c$, "unsetVariables", | |
| function (contextVariables, params) { | |
| var nParams = (params == null ? 0 : params.size ()); | |
| var nNames = this.names.size (); | |
| if (nParams == 0 || nNames == 0) return; | |
| for (var i = 0; i < nNames && i < nParams; i++) { | |
| var global = params.get (i); | |
| if (global.tok != 7) continue; | |
| var local = contextVariables.get (this.names.get (i).toLowerCase ()); | |
| if (local.tok != 7) continue; | |
| global.value = local.value; | |
| } | |
| }, "java.util.Map,JU.Lst"); | |
| Clazz.defineMethod (c$, "addVariable", | |
| function (name, isParameter) { | |
| this.variables.put (name, name); | |
| this.names.addLast (name); | |
| if (isParameter) this.nParameters++; | |
| }, "~S,~B"); | |
| c$.setFunction = Clazz.defineMethod (c$, "setFunction", | |
| function ($function, script, ichCurrentCommand, pt, lineNumbers, lineIndices, lltoken) { | |
| var cmdpt0 = $function.cmdpt0; | |
| var chpt0 = $function.chpt0; | |
| var nCommands = pt - cmdpt0; | |
| $function.setScript (script.substring (chpt0, ichCurrentCommand)); | |
| var aatoken = $function.aatoken = new Array (nCommands); | |
| $function.lineIndices = JU.AU.newInt2 (nCommands); | |
| $function.lineNumbers = Clazz.newShortArray (nCommands, 0); | |
| var line0 = (lineNumbers[cmdpt0] - 1); | |
| for (var i = 0; i < nCommands; i++) { | |
| $function.lineNumbers[i] = (lineNumbers[cmdpt0 + i] - line0); | |
| $function.lineIndices[i] = Clazz.newIntArray (-1, [lineIndices[cmdpt0 + i][0] - chpt0, lineIndices[cmdpt0 + i][1] - chpt0]); | |
| aatoken[i] = lltoken.get (cmdpt0 + i); | |
| if (aatoken[i].length > 0) { | |
| var tokenCommand = aatoken[i][0]; | |
| if (JS.T.tokAttr (tokenCommand.tok, 102400)) tokenCommand.intValue -= (tokenCommand.intValue < 0 ? -cmdpt0 : cmdpt0); | |
| }} | |
| for (var i = pt; --i >= cmdpt0; ) { | |
| lltoken.removeItemAt (i); | |
| lineIndices[i][0] = lineIndices[i][1] = 0; | |
| } | |
| }, "JS.ScriptFunction,~S,~N,~N,~A,~A,JU.Lst"); | |
| Clazz.defineMethod (c$, "setScript", | |
| function (s) { | |
| this.script = s; | |
| if (this.script != null && this.script !== "" && !this.script.endsWith ("\n")) this.script += "\n"; | |
| }, "~S"); | |
| Clazz.overrideMethod (c$, "toString", | |
| function () { | |
| var s = new JU.SB ().append ("/*\n * ").append (this.name).append ("\n */\n").append (this.getSignature ()).append (" {\n"); | |
| if (this.script != null) s.append (this.script); | |
| s.append ("}\n"); | |
| return s.toString (); | |
| }); | |
| Clazz.overrideMethod (c$, "getSignature", | |
| function () { | |
| if (this.typeName == null) return JS.T.nameOf (this.tok); | |
| var s = new JU.SB ().append (this.typeName).append (" ").append (this.name).append ("("); | |
| for (var i = 0; i < this.nParameters; i++) { | |
| if (i > 0) s.append (", "); | |
| s.append (this.names.get (i)); | |
| } | |
| s.append (")"); | |
| return s.toString (); | |
| }); | |
| Clazz.overrideMethod (c$, "geTokens", | |
| function () { | |
| return this.aatoken; | |
| }); | |
| Clazz.overrideMethod (c$, "getName", | |
| function () { | |
| return this.name; | |
| }); | |
| Clazz.overrideMethod (c$, "getTok", | |
| function () { | |
| return this.tok; | |
| }); | |
| }); | |