Search in sources :

Example 61 with Target

use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.

the class IterableCodeDesugar method generateMapAggregator.

/**
 * Generates following.
 *
 * result[key] = value;
 *
 * @param blockStmt target
 * @param ctx       current context
 */
private void generateMapAggregator(BLangBlockStmt blockStmt, IterableContext ctx) {
    final DiagnosticPos pos = blockStmt.pos;
    // create assignment result[key] = value
    final BLangIndexBasedAccess indexAccessNode = (BLangIndexBasedAccess) TreeBuilder.createIndexBasedAccessNode();
    indexAccessNode.pos = pos;
    indexAccessNode.indexExpr = ASTBuilderUtil.createVariableRef(pos, ctx.iteratorResultVariables.get(0).symbol);
    indexAccessNode.expr = ASTBuilderUtil.createVariableRef(pos, ctx.resultVar.symbol);
    indexAccessNode.type = ctx.iteratorResultVariables.get(1).symbol.type;
    final BLangAssignment valueAssign = ASTBuilderUtil.createAssignmentStmt(pos, blockStmt);
    valueAssign.varRefs.add(indexAccessNode);
    valueAssign.expr = ASTBuilderUtil.generateConversionExpr(ASTBuilderUtil.createVariableRef(pos, ctx.iteratorResultVariables.get(1).symbol), symTable.anyType, symResolver);
}
Also used : DiagnosticPos(org.wso2.ballerinalang.compiler.util.diagnotic.DiagnosticPos) BLangIndexBasedAccess(org.wso2.ballerinalang.compiler.tree.expressions.BLangIndexBasedAccess) BLangAssignment(org.wso2.ballerinalang.compiler.tree.statements.BLangAssignment)

Example 62 with Target

use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.

the class IterableCodeDesugar method generateArrayAggregator.

/**
 * Generates following.
 *
 * result[count] = value;
 * count = count + 1;
 *
 * @param blockStmt target
 * @param ctx       current context
 */
private void generateArrayAggregator(BLangBlockStmt blockStmt, IterableContext ctx) {
    final DiagnosticPos pos = blockStmt.pos;
    // create assignment result[count] = value;
    final BLangIndexBasedAccess indexAccessNode = (BLangIndexBasedAccess) TreeBuilder.createIndexBasedAccessNode();
    indexAccessNode.pos = pos;
    indexAccessNode.indexExpr = ASTBuilderUtil.createVariableRef(pos, ctx.countVar.symbol);
    indexAccessNode.expr = ASTBuilderUtil.createVariableRef(pos, ctx.resultVar.symbol);
    indexAccessNode.type = ctx.iteratorResultVariables.get(0).symbol.type;
    final BLangAssignment valueAssign = ASTBuilderUtil.createAssignmentStmt(pos, blockStmt);
    valueAssign.varRefs.add(indexAccessNode);
    valueAssign.expr = ASTBuilderUtil.createVariableRef(pos, ctx.iteratorResultVariables.get(0).symbol);
    // create count = count + 1;
    generateCountAggregator(blockStmt, ctx.countVar);
}
Also used : DiagnosticPos(org.wso2.ballerinalang.compiler.util.diagnotic.DiagnosticPos) BLangIndexBasedAccess(org.wso2.ballerinalang.compiler.tree.expressions.BLangIndexBasedAccess) BLangAssignment(org.wso2.ballerinalang.compiler.tree.statements.BLangAssignment)

Example 63 with Target

use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.

the class IterableCodeDesugar method generateForeach.

/**
 * Generates statements for foreach operation.
 *
 * lambda(...)
 *
 * @param blockStmt target
 * @param operation operation instance
 */
private void generateForeach(BLangBlockStmt blockStmt, Operation operation) {
    final DiagnosticPos pos = operation.pos;
    final BLangExpressionStmt exprStmt = ASTBuilderUtil.createExpressionStmt(pos, blockStmt);
    exprStmt.expr = ASTBuilderUtil.createInvocationExpr(pos, operation.lambdaSymbol, Lists.of(operation.argVar), symResolver);
}
Also used : DiagnosticPos(org.wso2.ballerinalang.compiler.util.diagnotic.DiagnosticPos) BLangExpressionStmt(org.wso2.ballerinalang.compiler.tree.statements.BLangExpressionStmt)

Example 64 with Target

use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.

the class BLangPackageBuilder method endTransformerDef.

public void endTransformerDef(DiagnosticPos pos, Set<Whitespace> ws, boolean publicFunc, String name, boolean paramsAvailable) {
    BLangTransformer transformer = (BLangTransformer) this.invokableNodeStack.pop();
    transformer.pos = pos;
    transformer.addWS(ws);
    transformer.setName(this.createIdentifier(name));
    if (paramsAvailable) {
        this.varListStack.pop().forEach(variableNode -> {
            ((BLangVariable) variableNode).docTag = DocTag.PARAM;
            transformer.addParameter(variableNode);
        });
    }
    // get the source and the target params
    List<VariableNode> mappingParams = this.varListStack.pop();
    // set the first mapping-param as the source for transformer
    VariableNode source = mappingParams.remove(0);
    ((BLangVariable) source).docTag = DocTag.RECEIVER;
    transformer.setSource(source);
    mappingParams.forEach(variableNode -> {
        ((BLangVariable) variableNode).docTag = DocTag.RECEIVER;
        transformer.addReturnParameter(variableNode);
    });
    if (publicFunc) {
        transformer.flagSet.add(Flag.PUBLIC);
    }
    this.compUnit.addTopLevelNode(transformer);
}
Also used : BLangTransformer(org.wso2.ballerinalang.compiler.tree.BLangTransformer) VariableNode(org.ballerinalang.model.tree.VariableNode)

Example 65 with Target

use of org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target in project ballerina by ballerina-lang.

the class BinaryFileWriter method writeExecutableBinary.

public void writeExecutableBinary(BLangPackage packageNode, String fileName) {
    if (fileName == null || fileName.isEmpty()) {
        throw new IllegalArgumentException("invalid target file name");
    }
    if (!fileName.endsWith(BLANG_EXEC_FILE_SUFFIX)) {
        fileName += BLANG_EXEC_FILE_SUFFIX;
    }
    // Generate code for the given executable
    ProgramFile programFile = this.codeGenerator.generateBALX(packageNode);
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
    try {
        ProgramFileWriter.writeProgram(programFile, byteArrayOS);
    } catch (IOException e) {
        throw new BLangCompilerException("error writing program file '" + fileName + "'", e);
    }
    final Path execFilePath = this.sourceDirectory.saveCompiledProgram(new ByteArrayInputStream(byteArrayOS.toByteArray()), fileName);
    ServiceLoader<CompilerPlugin> processorServiceLoader = ServiceLoader.load(CompilerPlugin.class);
    processorServiceLoader.forEach(plugin -> {
        plugin.codeGenerated(execFilePath);
    });
}
Also used : Path(java.nio.file.Path) ByteArrayInputStream(java.io.ByteArrayInputStream) BLangCompilerException(org.ballerinalang.compiler.BLangCompilerException) CompilerPlugin(org.ballerinalang.compiler.plugins.CompilerPlugin) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) ProgramFile(org.wso2.ballerinalang.programfile.CompiledBinaryFile.ProgramFile)

Aggregations

BLangAssignment (org.wso2.ballerinalang.compiler.tree.statements.BLangAssignment)11 DiagnosticPos (org.wso2.ballerinalang.compiler.util.diagnotic.DiagnosticPos)11 ArrayList (java.util.ArrayList)9 IOException (java.io.IOException)8 APIManagementException (org.wso2.carbon.apimgt.api.APIManagementException)8 File (java.io.File)7 Element (org.w3c.dom.Element)6 BLangBinaryExpr (org.wso2.ballerinalang.compiler.tree.expressions.BLangBinaryExpr)5 Target (org.wso2.carbon.apimgt.common.analytics.publishers.dto.Target)5 Gson (com.google.gson.Gson)4 List (java.util.List)4 Map (java.util.Map)4 OMElement (org.apache.axiom.om.OMElement)4 NodeList (org.w3c.dom.NodeList)4 BLangIndexBasedAccess (org.wso2.ballerinalang.compiler.tree.expressions.BLangIndexBasedAccess)4 JsonElement (com.google.gson.JsonElement)3 FileOutputStream (java.io.FileOutputStream)3 HashMap (java.util.HashMap)3 Iterator (java.util.Iterator)3 Set (java.util.Set)3