def __init__(self, nodeType): Node.__init__(self, nodeType) self.itsVariableNames = ObjToIntMap(11) self.itsVariables = [] self.itsConst = [] self.functions = [] self.regexps = []
class ScriptOrFnNode(Node): """ generated source for ScriptOrFnNode """ def __init__(self, nodeType): Node.__init__(self, nodeType) self.itsVariableNames = ObjToIntMap(11) self.itsVariables = [] self.itsConst = [] self.functions = [] self.regexps = [] def getSourceName(self): return self.sourceName def setSourceName(self, sourceName): self.sourceName = self.sourceName def getEncodedSourceStart(self): return self.encodedSourceStart def getEncodedSourceEnd(self): return self.encodedSourceEnd def setEncodedSourceBounds(self, start, end): self.encodedSourceStart = start self.encodedSourceEnd = end def getBaseLineno(self): return self.baseLineno def setBaseLineno(self, lineno): if lineno < 0 or self.baseLineno >= 0: Kit.codeBug() self.baseLineno = lineno def getEndLineno(self): return self.endLineno def setEndLineno(self, lineno): if lineno < 0 or self.endLineno >= 0: Kit.codeBug() self.endLineno = lineno def getFunctionCount(self): if self.functions is None: return 0 return len(self.functions) def getFunctionNode(self, i): return self.functions[i] def addFunction(self, fnNode): if fnNode is None: Kit.codeBug() if self.functions is None: self.functions = [] self.functions.append(fnNode) return len(self.functions) - 1 def getRegexpCount(self): if self.regexps is None: return 0 return len(self.regexps) / 2 def getRegexpString(self, index): return self.regexps[index * 2] def getRegexpFlags(self, index): return self.regexps[index * 2 + 1] def addRegexp(self, string, flags): if string is None: Kit.codeBug() if self.regexps is None: self.regexps = [] self.regexps.append(string) self.regexps.append(flags) return len(self.regexps) / 2 - 1 def hasParamOrVar(self, name): return self.itsVariableNames.has(name) def getParamOrVarIndex(self, name): return self.itsVariableNames.get(name, -1) def getParamOrVarName(self, index): return self.itsVariables[index] def getParamCount(self): return self.varStart def getParamAndVarCount(self): return len(self.itsVariables) def getParamAndVarNames(self): N = len(self.itsVariables) if (N == 0): return ScriptRuntime.emptyStrings array = [String() for __idx0 in range(N)] self.itsVariables.toArray(array) return array def getParamAndVarConst(self): N = len(self.itsVariables) array = [bool() for __idx0 in range(N)] ## for-while i = 0 while i < N: if self.itsConst[i] is not None: array[i] = True i += 1 return array def addParam(self, name): #Check addparam is not called after addLocal if (self.varStart != len(self.itsVariables)): Kit.codeBug() # Allow non-unique parameter names: use the last occurrence (parser # will warn about dups) self.varStart += 1 index = self.varStart self.itsVariables.append(name) self.itsConst.append(None) self.itsVariableNames.put(name, index) NO_DUPLICATE = 1 DUPLICATE_VAR = 0 DUPLICATE_PARAMETER = -1 DUPLICATE_CONST = -2 def addVar(self, name): #vIndex = self.itsVariableNames[name, -1] vIndex = self.itsVariableNames.get(name, -1) if (vIndex != -1): if vIndex >= self.varStart: v = self.itsConst[vIndex] if v is not None: return self.DUPLICATE_CONST else: return self.DUPLICATE_VAR else: return self.DUPLICATE_PARAMETER index = len(self.itsVariables) self.itsVariables.append(name) self.itsConst.append(None) self.itsVariableNames.put(name, index) return self.NO_DUPLICATE def addConst(self, name): #vIndex = self.itsVariableNames[name, -1] vIndex = self.itsVariableNames.get(name, -1) if (vIndex != -1): return False index = len(self.itsVariables) self.itsVariables.append(name) self.itsConst.append(name) self.itsVariableNames.put(name, index) return True def removeParamOrVar(self, name): #i = self.itsVariableNames[name, -1] i = self.itsVariableNames.get(name,-1) if (i != -1): self.itsVariables.remove(i) self.itsVariableNames.remove(name) iter = self.itsVariableNames.newIterator() ## for-while while not iter.done(): v = iter.getValue() if v > i: iter.setValue(v - 1) iter.next() def getCompilerData(self): return self.compilerData def setCompilerData(self, data): if data is None: raise IllegalArgumentException() if self.compilerData is not None: raise IllegalStateException() self.compilerData = data encodedSourceStart = 0 encodedSourceEnd = 0 sourceName = "" baseLineno = -1 endLineno = -1 functions = None #[]#ObjArray() regexps = None #[]#ObjArray() itsVariables = None#ObjArray() itsConst = None#ObjArray() itsVariableNames = None varStart = 0 compilerData = []#Object()