Search in sources :

Example 1 with TypeRelation

use of net.jangaroo.jooc.ast.TypeRelation in project jangaroo-tools by CoreMedia.

the class JsCodeGenerator method generateFieldInitializerCode.

protected void generateFieldInitializerCode(VariableDeclaration variableDeclaration) throws IOException {
    if (variableDeclaration.getOptInitializer() != null) {
        out.writeSymbolWhitespace(variableDeclaration.getOptInitializer().getSymEq());
        out.write(':');
        boolean mustEvaluateAtRuntime = !variableDeclaration.getOptInitializer().getValue().isRuntimeConstant();
        if (mustEvaluateAtRuntime) {
            out.writeToken("function(){return(");
        }
        variableDeclaration.getOptInitializer().getValue().visit(this);
        if (mustEvaluateAtRuntime) {
            out.writeToken(");}");
        }
    } else {
        TypeRelation typeRelation = variableDeclaration.getOptTypeRelation();
        String emptyValue = VariableDeclaration.getDefaultValue(typeRelation);
        out.write(":" + emptyValue);
    }
}
Also used : TypeRelation(net.jangaroo.jooc.ast.TypeRelation)

Example 2 with TypeRelation

use of net.jangaroo.jooc.ast.TypeRelation in project jangaroo-tools by CoreMedia.

the class JsCodeGenerator method visitCatch.

@Override
public void visitCatch(Catch aCatch) throws IOException {
    List<Catch> catches = aCatch.getParentTryStatement().getCatches();
    Catch firstCatch = catches.get(0);
    boolean isFirst = aCatch.equals(firstCatch);
    boolean isLast = aCatch.equals(catches.get(catches.size() - 1));
    TypeRelation typeRelation = aCatch.getParam().getOptTypeRelation();
    boolean hasCondition = aCatch.hasCondition();
    if (!hasCondition && !isLast) {
        throw Jooc.error(aCatch.getRParen(), "Only last catch clause may be untyped.");
    }
    final JooSymbol errorVar = firstCatch.getParam().getIde().getIde();
    final JooSymbol localErrorVar = aCatch.getParam().getIde().getIde();
    // in the following, always take care to write whitespace only once!
    out.writeSymbolWhitespace(aCatch.getSymKeyword());
    if (isFirst) {
        // "catch"
        out.writeSymbolToken(aCatch.getSymKeyword());
        // "(localErrorVar)":
        out.writeSymbol(aCatch.getLParen(), !hasCondition);
        out.writeSymbol(errorVar, !hasCondition);
        if (!hasCondition && typeRelation != null) {
            // can only be ": *", add as comment:
            typeRelation.visit(this);
        }
        out.writeSymbol(aCatch.getRParen(), !hasCondition);
        if (hasCondition || !isLast) {
            // a catch block always needs a brace, so generate one for conditions:
            out.writeToken("{");
        }
    } else {
        // transform catch(ide:Type){...} into else if is(e,Type)){var ide=e;...}
        out.writeToken("else");
    }
    if (hasCondition) {
        out.writeToken("if(is");
        out.writeSymbol(aCatch.getLParen());
        out.writeSymbolWhitespace(localErrorVar);
        out.writeSymbolToken(errorVar);
        out.writeSymbolWhitespace(typeRelation.getSymRelation());
        out.writeToken(",");
        Ide typeIde = typeRelation.getType().getIde();
        out.writeSymbolWhitespace(typeIde.getIde());
        out.writeToken(typeIde.getDeclaration().getQualifiedNameStr());
        out.writeSymbol(aCatch.getRParen());
        out.writeToken(")");
    }
    if (!localErrorVar.getText().equals(errorVar.getText())) {
        aCatch.getBlock().addBlockStartCodeGenerator(new VarCodeGenerator(localErrorVar, errorVar));
    }
    aCatch.getBlock().visit(this);
    if (isLast) {
        if (hasCondition) {
            out.writeToken("else throw");
            out.writeSymbolToken(errorVar);
            out.writeToken(";");
        }
        if (!(isFirst && !hasCondition)) {
            // last catch clause closes the JS catch block:
            out.writeToken("}");
        }
    }
}
Also used : TypeRelation(net.jangaroo.jooc.ast.TypeRelation) Catch(net.jangaroo.jooc.ast.Catch) Ide(net.jangaroo.jooc.ast.Ide) NamespacedIde(net.jangaroo.jooc.ast.NamespacedIde) QualifiedIde(net.jangaroo.jooc.ast.QualifiedIde) JooSymbol(net.jangaroo.jooc.JooSymbol)

Aggregations

TypeRelation (net.jangaroo.jooc.ast.TypeRelation)2 JooSymbol (net.jangaroo.jooc.JooSymbol)1 Catch (net.jangaroo.jooc.ast.Catch)1 Ide (net.jangaroo.jooc.ast.Ide)1 NamespacedIde (net.jangaroo.jooc.ast.NamespacedIde)1 QualifiedIde (net.jangaroo.jooc.ast.QualifiedIde)1