001    package railo.transformer.cfml.evaluator.impl;
002    
003    import railo.transformer.bytecode.statement.tag.Tag;
004    import railo.transformer.bytecode.util.ASMUtil;
005    import railo.transformer.cfml.evaluator.EvaluatorException;
006    import railo.transformer.cfml.evaluator.EvaluatorSupport;
007    import railo.transformer.library.tag.TagLibTag;
008    
009    
010    
011    /**
012     * Pr�ft den Kontext des Tag rethrow.
013     * Das Tag <code>rethrow</code> darf nur innerhalb des Tag <code>throw</code> liegen.
014     */
015    public final class ReThrow extends EvaluatorSupport {
016    
017    
018            /**
019             * @see railo.transformer.cfml.evaluator.EvaluatorSupport#evaluate(org.w3c.dom.Element, railo.transformer.library.tag.TagLibTag)
020             */
021            public void evaluate(Tag tag,TagLibTag libTag) throws EvaluatorException { 
022                    String ns=libTag.getTagLib().getNameSpaceAndSeparator();
023                    String queryName=ns+"catch";
024                    
025                    
026                    if(!ASMUtil.hasAncestorTryStatement(tag)){
027                            if(tag.isScriptBase())
028                                    throw new EvaluatorException("Wrong Context, statement "+libTag.getName()+" must be inside a "+queryName+" tag or catch statement");
029                            throw new EvaluatorException("Wrong Context, tag "+libTag.getFullName()+" must be inside a "+queryName+" tag");
030                            
031                    }
032                    //ASMUtil.replace(tag,new TagReThrow(tag));
033            }
034    
035    }