Package railo.transformer.bytecode.statement.tag

Source Code of railo.transformer.bytecode.statement.tag.TagInclude

package railo.transformer.bytecode.statement.tag;

import org.objectweb.asm.Type;
import org.objectweb.asm.commons.GeneratorAdapter;
import org.objectweb.asm.commons.Method;

import railo.transformer.bytecode.BytecodeContext;
import railo.transformer.bytecode.BytecodeException;
import railo.transformer.bytecode.Position;
import railo.transformer.bytecode.cast.CastBoolean;
import railo.transformer.bytecode.expression.ExprBoolean;
import railo.transformer.bytecode.expression.Expression;
import railo.transformer.bytecode.literal.LitBoolean;
import railo.transformer.bytecode.util.Types;

public final class TagInclude extends TagBaseNoFinal {

  private final static Method DO_INCLUDE_RUN_ONCE = new Method(
      "doInclude",
      Type.VOID_TYPE,
      new Type[]{Types.STRING,Types.BOOLEAN_VALUE});
 
  public TagInclude(Position start,Position end) {
    super(start,end);
  }

  /**
   * @see railo.transformer.bytecode.statement.tag.TagBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter)
   */
  public void _writeOut(BytecodeContext bc) throws BytecodeException {
    GeneratorAdapter adapter = bc.getAdapter();
    adapter.loadArg(0);
   
    // template
    getAttribute("template").getValue().writeOut(bc, Expression.MODE_REF);
   
    // run Once
    Attribute attr = getAttribute("runonce");
    ExprBoolean expr = (attr==null)?
        LitBoolean.FALSE:
        CastBoolean.toExprBoolean(attr.getValue());
    expr.writeOut(bc, Expression.MODE_VALUE);
   
    adapter.invokeVirtual(Types.PAGE_CONTEXT,DO_INCLUDE_RUN_ONCE);
  }
}
TOP

Related Classes of railo.transformer.bytecode.statement.tag.TagInclude

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.