def findVariantNodes(node): variantNodes = treeutil.findVariablePrefix(node, "qx.core.Variant") variantNodes.extend(treeutil.findVariablePrefix(node, "qx.core.Environment")) for variantNode in variantNodes: if not variantNode.hasParentContext("call/operand"): continue variantMethod = treeutil.selectNode(variantNode, "identifier[4]/@name") if variantMethod not in ["select", "isSet", "compilerIsSet", "get"]: continue else: yield variantNode
def findVariantNodes(node): variantNodes = treeutil.findVariablePrefix(node, "qx.core.Variant") variantNodes.extend( treeutil.findVariablePrefix(node, "qx.core.Environment")) for variantNode in variantNodes: if not variantNode.hasParentContext("call/operand"): continue variantMethod = treeutil.selectNode(variantNode, "identifier[4]/@name") if variantMethod not in ["select", "isSet", "compilerIsSet", "get"]: continue else: yield variantNode
def myVariantNodes(node): variantNodes = treeutil.findVariablePrefix(node, "this.useCheck") for variantNode in variantNodes: print variantNode.toXml() if not variantNode.hasParentContext("call/operand"): continue else: yield variantNode
def findVariantNodes(node): variantNodes = treeutil.findVariablePrefix(node, "qx.core.Environment") for variantNode in variantNodes: if not variantNode.hasParentContext("call/operand"): continue variantMethod = treeutil.selectNode(variantNode, "identifier[4]/@name") if variantMethod in InterestingEnvMethods: yield variantNode else: continue
def isEnvironmentCall(callNode): if callNode.type != "call": return False operandNode = treeutil.selectNode(callNode, "operand") environNodes = treeutil.findVariablePrefix(operandNode, "qx.core.Environment") if len(environNodes) != 1: return False environMethod = treeutil.selectNode(environNodes[0], "identifier[4]/@name") if environMethod in InterestingEnvMethods: return True return False
def getClassVariantsFromTree(node, console): classvariants = set([]) # mostly taken from ecmascript.transform.optimizer.variantoptimizer variants = treeutil.findVariablePrefix(node, "qx.core.Variant") for variant in variants: if not variant.hasParentContext("call/operand"): continue variantMethod = treeutil.selectNode(variant, "identifier[4]/@name") if variantMethod not in ["select", "isSet", "compilerIsSet"]: continue firstParam = treeutil.selectNode(variant, "../../params/1") if firstParam and treeutil.isStringLiteral(firstParam): classvariants.add(firstParam.get("value")) else: console.warn("! qx.core.Variant call without literal argument") return classvariants