package org.develnext.jphp.core.compiler.jvm.statement.expr;
import org.develnext.jphp.core.compiler.jvm.JvmCompiler;
import org.develnext.jphp.core.compiler.jvm.statement.ExpressionStmtCompiler;
import org.develnext.jphp.core.compiler.jvm.statement.MethodStmtCompiler;
import org.develnext.jphp.core.tokenizer.token.Token;
import org.develnext.jphp.core.tokenizer.token.stmt.MethodStmtToken;
import org.objectweb.asm.tree.AbstractInsnNode;
import org.objectweb.asm.tree.MethodNode;
import php.runtime.env.Environment;
abstract public class BaseStatementCompiler<T extends Token> {
protected final MethodNode node;
protected final MethodStmtCompiler method;
protected final MethodStmtToken methodStatement;
protected final JvmCompiler compiler;
protected final Environment env;
protected final ExpressionStmtCompiler expr;
protected BaseStatementCompiler(ExpressionStmtCompiler exprCompiler) {
this.expr = exprCompiler;
this.env = exprCompiler.getCompiler().getEnvironment();
this.compiler = exprCompiler.getCompiler();
this.node = exprCompiler.getMethodNode();
this.method = exprCompiler.getMethod();
this.methodStatement = exprCompiler.getMethodStatement();
}
protected void add(AbstractInsnNode node) {
method.node.instructions.add(node);
}
abstract public void write(T token);
}