/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.ir.transform.statement;
import gw.internal.gosu.ir.transform.AbstractElementTransformer;
import gw.internal.gosu.ir.transform.TopLevelTransformationContext;
import gw.lang.ir.IRStatement;
import gw.lang.parser.IStatement;
/**
*/
public abstract class AbstractStatementTransformer<T extends IStatement> extends AbstractElementTransformer<T> {
public AbstractStatementTransformer( TopLevelTransformationContext cc, T parsedElem ) {
super( cc, parsedElem );
}
public T _stmt() {
return getParsedElement();
}
protected final IRStatement compile() {
IRStatement irStmt = compile_impl();
visitStatementLineNumber( irStmt );
return irStmt;
}
protected abstract IRStatement compile_impl();
protected void visitStatementLineNumber( IRStatement irStatement ) {
visitStatementLineNumber( irStatement, _stmt() );
}
protected void visitStatementLineNumber( IRStatement irStatement, IStatement stmt ) {
if( irStatement != null ) {
int lineNumber = stmt.getLineNum();
irStatement.setLineNumber( lineNumber );
//## todo: this should be turned on only in cases where it's needed
if( lineNumber > 0 ) {
irStatement.setOriginalSourceStatement( _cc().getSourceFileRef() + ":" + lineNumber + " " + _cc().getSourceLine( lineNumber ) );
}
}
}
}