Search in sources :

Example 1 with Return

use of lucee.transformer.bytecode.statement.Return in project Lucee by lucee.

the class TagReturn method _writeOut.

/**
 * @see lucee.transformer.bytecode.statement.tag.TagBase#_writeOut(org.objectweb.asm.commons.GeneratorAdapter)
 */
@Override
public void _writeOut(BytecodeContext bc) throws TransformerException {
    Attribute attr = getAttribute("expr");
    Expression expr = null;
    if (attr != null)
        expr = attr.getValue();
    new Return(expr, expr.getStart(), expr.getEnd()).writeOut(bc);
}
Also used : Return(lucee.transformer.bytecode.statement.Return) Expression(lucee.transformer.expression.Expression)

Example 2 with Return

use of lucee.transformer.bytecode.statement.Return in project Lucee by lucee.

the class AbstrCFMLScriptTransformer method lambdaPart.

@Override
protected final Function lambdaPart(ExprData data, String id, int access, int modifier, String rtnType, Position line, ArrayList<Argument> args) throws TemplateException {
    Body body = new FunctionBody(data.factory);
    Function func = new Lambda(data.root, id, access, modifier, rtnType, body, line, null);
    // new FunctionImpl(data.page,id,access,rtnType,body,line,null);
    comments(data);
    // add arguments
    for (Argument arg : args) {
        func.addArgument(arg.getName(), arg.getType(), arg.getRequired(), arg.getDefaultValue(), arg.isPassByReference(), arg.getDisplayName(), arg.getHint(), arg.getMetaData());
    }
    comments(data);
    // body
    boolean oldInsideFunction = data.insideFunction;
    data.insideFunction = true;
    try {
        if (data.srcCode.isCurrent('{')) {
            statement(data, body, CTX_FUNCTION);
        } else {
            if (data.srcCode.forwardIfCurrent("return ")) {
                comments(data);
            }
            // ex block
            short prior = data.context;
            data.context = CTX_FUNCTION;
            comments(data);
            Expression expr = expression(data);
            // checkSemiColonLineFeed( data, true ,true );
            Return rtn = new Return(expr, line, data.srcCode.getPosition());
            body.addStatement(rtn);
            data.docComment = null;
            data.context = prior;
        }
    } finally {
        data.insideFunction = oldInsideFunction;
    }
    /*try {
		// ex block
		statement(data,body,CTX_FUNCTION);
		}
		finally{
			data.insideFunction=oldInsideFunction;
		}*/
    func.setEnd(data.srcCode.getPosition());
    comments(data);
    return func;
}
Also used : Function(lucee.transformer.bytecode.statement.udf.Function) CFFunction(lucee.runtime.functions.system.CFFunction) FunctionLibFunction(lucee.transformer.library.function.FunctionLibFunction) Return(lucee.transformer.bytecode.statement.Return) Argument(lucee.transformer.bytecode.statement.Argument) FunctionAsExpression(lucee.transformer.bytecode.expression.FunctionAsExpression) Expression(lucee.transformer.expression.Expression) FunctionBody(lucee.transformer.bytecode.FunctionBody) Body(lucee.transformer.bytecode.Body) ScriptBody(lucee.transformer.bytecode.ScriptBody) FunctionBody(lucee.transformer.bytecode.FunctionBody) Lambda(lucee.transformer.bytecode.statement.udf.Lambda)

Example 3 with Return

use of lucee.transformer.bytecode.statement.Return in project Lucee by lucee.

the class AbstrCFMLScriptTransformer method returnStatement.

/**
 * Liest ein return Statement ein.
 * <br />
 * EBNF:<br />
 * <code>spaces expressionStatement spaces;</code>
 * @return return Statement
 * @throws TemplateException
 */
private final Return returnStatement(ExprData data) throws TemplateException {
    if (!data.srcCode.forwardIfCurrentAndNoVarExt("return"))
        return null;
    Position line = data.srcCode.getPosition();
    Return rtn;
    comments(data);
    if (checkSemiColonLineFeed(data, false, false, false))
        rtn = new Return(data.factory, line, data.srcCode.getPosition());
    else {
        Expression expr = expression(data);
        checkSemiColonLineFeed(data, true, true, false);
        rtn = new Return(expr, line, data.srcCode.getPosition());
    }
    comments(data);
    return rtn;
}
Also used : Return(lucee.transformer.bytecode.statement.Return) Position(lucee.transformer.Position) FunctionAsExpression(lucee.transformer.bytecode.expression.FunctionAsExpression) Expression(lucee.transformer.expression.Expression)

Aggregations

Return (lucee.transformer.bytecode.statement.Return)3 Expression (lucee.transformer.expression.Expression)3 FunctionAsExpression (lucee.transformer.bytecode.expression.FunctionAsExpression)2 CFFunction (lucee.runtime.functions.system.CFFunction)1 Position (lucee.transformer.Position)1 Body (lucee.transformer.bytecode.Body)1 FunctionBody (lucee.transformer.bytecode.FunctionBody)1 ScriptBody (lucee.transformer.bytecode.ScriptBody)1 Argument (lucee.transformer.bytecode.statement.Argument)1 Function (lucee.transformer.bytecode.statement.udf.Function)1 Lambda (lucee.transformer.bytecode.statement.udf.Lambda)1 FunctionLibFunction (lucee.transformer.library.function.FunctionLibFunction)1