/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.ir.transform.statement;
import gw.internal.gosu.parser.statements.IfStatement;
import gw.lang.ir.IRExpression;
import gw.lang.ir.IRStatement;
import gw.internal.gosu.ir.transform.ExpressionTransformer;
import gw.internal.gosu.ir.transform.TopLevelTransformationContext;
/**
*/
public class IfStatementTransformer extends AbstractStatementTransformer<IfStatement>
{
public static IRStatement compile( TopLevelTransformationContext cc, IfStatement stmt )
{
IfStatementTransformer compiler = new IfStatementTransformer( cc, stmt );
return compiler.compile();
}
private IfStatementTransformer( TopLevelTransformationContext cc, IfStatement stmt )
{
super( cc, stmt );
}
@Override
protected IRStatement compile_impl()
{
IRExpression test = ExpressionTransformer.compile(_stmt().getExpression(), _cc());
IRStatement ifBlockStatement = null;
_cc().pushScope( false );
try {
ifBlockStatement = _cc().compile(_stmt().getStatement());
} finally {
_cc().popScope();
}
IRStatement elseBlockStatement = null;
_cc().pushScope( false );
try {
elseBlockStatement = _stmt().hasElseStatement() ? _cc().compile(_stmt().getElseStatement()) : null;
} finally {
_cc().popScope();
}
return buildIfElse(
test,
ifBlockStatement,
elseBlockStatement
);
}
}