001 package railo.transformer.bytecode.expression.var; 002 003 import org.objectweb.asm.Type; 004 import org.objectweb.asm.commons.GeneratorAdapter; 005 import org.objectweb.asm.commons.Method; 006 007 import railo.transformer.bytecode.BytecodeContext; 008 import railo.transformer.bytecode.BytecodeException; 009 import railo.transformer.bytecode.Position; 010 import railo.transformer.bytecode.cast.CastString; 011 import railo.transformer.bytecode.expression.ExprString; 012 import railo.transformer.bytecode.expression.Expression; 013 import railo.transformer.bytecode.expression.ExpressionBase; 014 import railo.transformer.bytecode.util.Types; 015 016 public final class DynAssign extends ExpressionBase { 017 018 private ExprString name; 019 private Expression value; 020 021 // Object setVariable(String, Object) 022 private final static Method METHOD_SET_VARIABLE = new Method("setVariable", 023 Types.OBJECT, 024 new Type[]{Types.STRING,Types.OBJECT}); 025 026 public DynAssign(Position start,Position end) { 027 super(start,end); 028 } 029 030 /** 031 * Constructor of the class 032 * @param name 033 * @param value 034 */ 035 public DynAssign(Expression name, Expression value) { 036 super(name.getStart(),name.getEnd()); 037 this.name=CastString.toExprString(name); 038 this.value=value; 039 } 040 041 /** 042 * 043 * @see railo.transformer.bytecode.expression.ExpressionBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter, int) 044 */ 045 public Type _writeOut(BytecodeContext bc, int mode) throws BytecodeException { 046 GeneratorAdapter adapter = bc.getAdapter(); 047 adapter.loadArg(0); 048 name.writeOut(bc, Expression.MODE_REF); 049 value.writeOut(bc, Expression.MODE_REF); 050 adapter.invokeVirtual(Types.PAGE_CONTEXT,METHOD_SET_VARIABLE); 051 return Types.OBJECT; 052 } 053 054 /* * 055 * 056 * @see railo.transformer.bytecode.expression.Expression#getType() 057 * / 058 public int getType() { 059 return Types._OBJECT; 060 }*/ 061 062 /** 063 * @return the name 064 */ 065 public ExprString getName() { 066 return name; 067 } 068 069 /** 070 * @return the value 071 */ 072 public Expression getValue() { 073 return value; 074 } 075 076 }