import ast, compiler def assign(names, values): assert len(names)==len(values) length = len(names) for i in range(0,length): assert names[i].flags == "OP_ASSIGN" ## TODO ast.addSymbolIfNotPresent( names[i].name ) value = ast.evaluate( values[i] ) ast.outputInBlock("%s = %s" % ( names[i].name, value ) ) #set variable in namespace if we are at module scope possibleModuleName = ast.getIsModuleScope() if possibleModuleName: ast.addModuleMember( names[i].name ) moduleRegister = ast.nextPRegister() ast.outputInBlock("find_global %s, \"%s\"" % ( moduleRegister, possibleModuleName ) ) ast.outputInBlock("setattribute %s, \"%s\", %s" % ( moduleRegister, names[i].name, value ) ) ast.outputInBlock("store_global \"%s\", \"%s\", %s" % ( possibleModuleName, names[i].name, value ) ) """ for i in range(0,len(names)): ast.lookup(names[i].name) for i in range(0,len(names)-1): assert names[i].flags == "OP_ASSIGN" ## TODO ast.output("\t$P%d = new PerlInt" % (i+1)) ast.output("\t$P%d = %s" % (i+1, ast.evaluate(values[i]))) assert names[-1].flags == "OP_ASSIGN" ## TODO ast.output("\t%s = %s" % (names[-1].name, ast.evaluate(values[-1]))) for i in range(len(names)-2,-1,-1): ast.output("\t%s = $P%d" % (names[i].name, i+1))""" def process(node): if len(node.nodes)==1: if node.nodes[0].__class__ == compiler.ast.AssName: assign(node.nodes,[node.expr]) elif node.nodes[0].__class__ == compiler.ast.AssList: assert node.expr.__class__ == compiler.ast.Tuple assign(node.nodes[0].nodes, node.expr.nodes) elif node.nodes[0].__class__ == compiler.ast.AssTuple: assert node.expr.__class__ == compiler.ast.Tuple assign(node.nodes[0].nodes, node.expr.nodes) elif node.nodes[0].__class__ == compiler.ast.AssAttr: attributeExprReg = ast.evaluate( node.expr ) #attribute = ast.evaluate(node.nodes[0]) #ast.outputInBlock("%s = %s" % (attribute, ast.evaluate( node.expr ))) #ast.outputInBlock("setAttribute %s = %s" % (attribute, ast.evaluate( node.expr ))) #attributeString = "\"" + node.attrname + "\"" #ast.outputInBlock( "setattribute %s, \"%s\", %s" % ( "self", node.nodes[0].attrname, attributeExprReg ) ) ast.outputInBlock( "setprop %s, \"%s\", %s" % ( "self", node.nodes[0].attrname, attributeExprReg ) ) else: print len(node.nodes) print node.nodes, node.expr ast.fail("Assign unimplemented") else: ast.fail("Assign unimplemented")