/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.gosu.ir.compiler.bytecode.statement; import gw.internal.gosu.ir.compiler.bytecode.AbstractBytecodeCompiler; import gw.internal.gosu.ir.compiler.bytecode.IRBytecodeContext; import gw.internal.gosu.ir.compiler.bytecode.IRBytecodeCompiler; import gw.lang.ir.statement.IRFieldSetStatement; import gw.internal.ext.org.objectweb.asm.MethodVisitor; import gw.internal.ext.org.objectweb.asm.Opcodes; public class IRFieldSetStatementCompiler extends AbstractBytecodeCompiler { public static void compile(IRFieldSetStatement statement, IRBytecodeContext context) { int opCode; if ( statement.getLhs() != null ) { IRBytecodeCompiler.compileIRExpression( statement.getLhs(), context ); opCode = Opcodes.PUTFIELD; } else { opCode = Opcodes.PUTSTATIC; } IRBytecodeCompiler.compileIRExpression( statement.getRhs(), context ); MethodVisitor mv = context.getMv(); mv.visitFieldInsn( opCode, statement.getOwnersType().getSlashName(), statement.getName(), statement.getFieldType().getDescriptor() ); } }