Search in sources :

Example 6 with BBooleanArray

use of org.ballerinalang.model.values.BBooleanArray in project ballerina by ballerina-lang.

the class TableIterator method getDataArray.

protected BNewArray getDataArray(Array array) throws SQLException {
    Object[] dataArray = generateArrayDataResult(array);
    if (dataArray == null || dataArray.length == 0) {
        return null;
    }
    Object obj = dataArray[0];
    int length = dataArray.length;
    if (obj instanceof String) {
        BStringArray stringDataArray = new BStringArray();
        for (int i = 0; i < length; i++) {
            stringDataArray.add(i, (String) dataArray[i]);
        }
        return stringDataArray;
    } else if (obj instanceof Boolean) {
        BBooleanArray boolDataArray = new BBooleanArray();
        for (int i = 0; i < length; i++) {
            boolDataArray.add(i, ((Boolean) dataArray[i]) ? 1 : 0);
        }
        return boolDataArray;
    } else if (obj instanceof Integer) {
        BIntArray intDataArray = new BIntArray();
        for (int i = 0; i < length; i++) {
            intDataArray.add(i, ((Integer) dataArray[i]));
        }
        return intDataArray;
    } else if (obj instanceof Long) {
        BIntArray longDataArray = new BIntArray();
        for (int i = 0; i < length; i++) {
            longDataArray.add(i, (Long) dataArray[i]);
        }
        return longDataArray;
    } else if (obj instanceof Float) {
        BFloatArray floatDataArray = new BFloatArray();
        for (int i = 0; i < length; i++) {
            floatDataArray.add(i, (Float) dataArray[i]);
        }
        return floatDataArray;
    } else if (obj instanceof Double) {
        BFloatArray doubleDataArray = new BFloatArray();
        for (int i = 0; i < dataArray.length; i++) {
            doubleDataArray.add(i, (Double) dataArray[i]);
        }
        return doubleDataArray;
    } else {
        return null;
    }
}
Also used : BStringArray(org.ballerinalang.model.values.BStringArray) BIntArray(org.ballerinalang.model.values.BIntArray) BBooleanArray(org.ballerinalang.model.values.BBooleanArray) BFloatArray(org.ballerinalang.model.values.BFloatArray)

Example 7 with BBooleanArray

use of org.ballerinalang.model.values.BBooleanArray in project ballerina by ballerina-lang.

the class TableTest method testArrayData.

@Test(groups = "TableTest", description = "Check array data types.")
public void testArrayData() {
    BValue[] returns = BRunUtil.invoke(result, "testArrayData");
    Assert.assertEquals(returns.length, 5);
    Assert.assertTrue(returns[0] instanceof BIntArray);
    BIntArray intArray = (BIntArray) returns[0];
    Assert.assertEquals(intArray.get(0), 1);
    Assert.assertEquals(intArray.get(1), 2);
    Assert.assertEquals(intArray.get(2), 3);
    Assert.assertTrue(returns[1] instanceof BIntArray);
    BIntArray longArray = (BIntArray) returns[1];
    Assert.assertEquals(longArray.get(0), 100000000);
    Assert.assertEquals(longArray.get(1), 200000000);
    Assert.assertEquals(longArray.get(2), 300000000);
    Assert.assertTrue(returns[2] instanceof BFloatArray);
    BFloatArray doubleArray = (BFloatArray) returns[2];
    Assert.assertEquals(doubleArray.get(0), 245.23);
    Assert.assertEquals(doubleArray.get(1), 5559.49);
    Assert.assertEquals(doubleArray.get(2), 8796.123);
    Assert.assertTrue(returns[3] instanceof BStringArray);
    BStringArray stringArray = (BStringArray) returns[3];
    Assert.assertEquals(stringArray.get(0), "Hello");
    Assert.assertEquals(stringArray.get(1), "Ballerina");
    Assert.assertTrue(returns[4] instanceof BBooleanArray);
    BBooleanArray booleanArray = (BBooleanArray) returns[4];
    Assert.assertEquals(booleanArray.get(0), 1);
    Assert.assertEquals(booleanArray.get(1), 0);
    Assert.assertEquals(booleanArray.get(2), 1);
}
Also used : BBooleanArray(org.ballerinalang.model.values.BBooleanArray) BValue(org.ballerinalang.model.values.BValue) BFloatArray(org.ballerinalang.model.values.BFloatArray) BStringArray(org.ballerinalang.model.values.BStringArray) BIntArray(org.ballerinalang.model.values.BIntArray) Test(org.testng.annotations.Test)

Example 8 with BBooleanArray

use of org.ballerinalang.model.values.BBooleanArray in project ballerina by ballerina-lang.

the class ArrayTest method testArrayToString.

@Test
public void testArrayToString() {
    String[] strArray = { "aaa", "bbb", "ccc" };
    BStringArray bStringArray = new BStringArray(strArray);
    Assert.assertEquals(bStringArray.stringValue(), "[\"aaa\", \"bbb\", \"ccc\"]");
    long[] longArray = { 6, 3, 8, 4 };
    BIntArray bIntArray = new BIntArray(longArray);
    Assert.assertEquals(bIntArray.stringValue(), "[6, 3, 8, 4]");
    double[] doubleArray = { 6.4, 3.7, 8.8, 7.4 };
    BFloatArray bFloatArray = new BFloatArray(doubleArray);
    Assert.assertEquals(bFloatArray.stringValue(), "[6.4, 3.7, 8.8, 7.4]");
    int[] boolArray = { 1, 1, 0 };
    BBooleanArray bBooleanArray = new BBooleanArray(boolArray);
    Assert.assertEquals(bBooleanArray.stringValue(), "[true, true, false]");
    BXMLItem[] xmlArray = { new BXMLItem("<foo/>"), new BXMLItem("<bar>hello</bar>") };
    BRefValueArray bXmlArray = new BRefValueArray(xmlArray, BTypes.typeXML);
    Assert.assertEquals(bXmlArray.stringValue(), "[<foo/>, <bar>hello</bar>]");
}
Also used : BXMLItem(org.ballerinalang.model.values.BXMLItem) BBooleanArray(org.ballerinalang.model.values.BBooleanArray) BRefValueArray(org.ballerinalang.model.values.BRefValueArray) BFloatArray(org.ballerinalang.model.values.BFloatArray) BStringArray(org.ballerinalang.model.values.BStringArray) BIntArray(org.ballerinalang.model.values.BIntArray) Test(org.testng.annotations.Test)

Example 9 with BBooleanArray

use of org.ballerinalang.model.values.BBooleanArray in project ballerina by ballerina-lang.

the class CPU method tryExec.

@SuppressWarnings("rawtypes")
private static void tryExec(WorkerExecutionContext ctx) {
    BLangScheduler.workerRunning(ctx);
    int i;
    int j;
    int cpIndex;
    FunctionCallCPEntry funcCallCPEntry;
    FunctionRefCPEntry funcRefCPEntry;
    TypeRefCPEntry typeRefCPEntry;
    FunctionInfo functionInfo;
    InstructionCALL callIns;
    boolean debugEnabled = ctx.programFile.getDebugger().isDebugEnabled();
    WorkerData currentSF, callersSF;
    int callersRetRegIndex;
    while (ctx.ip >= 0) {
        if (ctx.stop) {
            BLangScheduler.workerDone(ctx);
            return;
        }
        if (debugEnabled && debug(ctx)) {
            return;
        }
        Instruction instruction = ctx.code[ctx.ip];
        int opcode = instruction.getOpcode();
        int[] operands = instruction.getOperands();
        ctx.ip++;
        WorkerData sf = ctx.workerLocal;
        switch(opcode) {
            case InstructionCodes.ICONST:
                cpIndex = operands[0];
                i = operands[1];
                sf.longRegs[i] = ((IntegerCPEntry) ctx.constPool[cpIndex]).getValue();
                break;
            case InstructionCodes.FCONST:
                cpIndex = operands[0];
                i = operands[1];
                sf.doubleRegs[i] = ((FloatCPEntry) ctx.constPool[cpIndex]).getValue();
                break;
            case InstructionCodes.SCONST:
                cpIndex = operands[0];
                i = operands[1];
                sf.stringRegs[i] = ((StringCPEntry) ctx.constPool[cpIndex]).getValue();
                break;
            case InstructionCodes.ICONST_0:
                i = operands[0];
                sf.longRegs[i] = 0;
                break;
            case InstructionCodes.ICONST_1:
                i = operands[0];
                sf.longRegs[i] = 1;
                break;
            case InstructionCodes.ICONST_2:
                i = operands[0];
                sf.longRegs[i] = 2;
                break;
            case InstructionCodes.ICONST_3:
                i = operands[0];
                sf.longRegs[i] = 3;
                break;
            case InstructionCodes.ICONST_4:
                i = operands[0];
                sf.longRegs[i] = 4;
                break;
            case InstructionCodes.ICONST_5:
                i = operands[0];
                sf.longRegs[i] = 5;
                break;
            case InstructionCodes.FCONST_0:
                i = operands[0];
                sf.doubleRegs[i] = 0;
                break;
            case InstructionCodes.FCONST_1:
                i = operands[0];
                sf.doubleRegs[i] = 1;
                break;
            case InstructionCodes.FCONST_2:
                i = operands[0];
                sf.doubleRegs[i] = 2;
                break;
            case InstructionCodes.FCONST_3:
                i = operands[0];
                sf.doubleRegs[i] = 3;
                break;
            case InstructionCodes.FCONST_4:
                i = operands[0];
                sf.doubleRegs[i] = 4;
                break;
            case InstructionCodes.FCONST_5:
                i = operands[0];
                sf.doubleRegs[i] = 5;
                break;
            case InstructionCodes.BCONST_0:
                i = operands[0];
                sf.intRegs[i] = 0;
                break;
            case InstructionCodes.BCONST_1:
                i = operands[0];
                sf.intRegs[i] = 1;
                break;
            case InstructionCodes.RCONST_NULL:
                i = operands[0];
                sf.refRegs[i] = null;
                break;
            case InstructionCodes.IMOVE:
            case InstructionCodes.FMOVE:
            case InstructionCodes.SMOVE:
            case InstructionCodes.BMOVE:
            case InstructionCodes.LMOVE:
            case InstructionCodes.RMOVE:
            case InstructionCodes.IALOAD:
            case InstructionCodes.FALOAD:
            case InstructionCodes.SALOAD:
            case InstructionCodes.BALOAD:
            case InstructionCodes.LALOAD:
            case InstructionCodes.RALOAD:
            case InstructionCodes.JSONALOAD:
            case InstructionCodes.IGLOAD:
            case InstructionCodes.FGLOAD:
            case InstructionCodes.SGLOAD:
            case InstructionCodes.BGLOAD:
            case InstructionCodes.LGLOAD:
            case InstructionCodes.RGLOAD:
            case InstructionCodes.IFIELDLOAD:
            case InstructionCodes.FFIELDLOAD:
            case InstructionCodes.SFIELDLOAD:
            case InstructionCodes.BFIELDLOAD:
            case InstructionCodes.LFIELDLOAD:
            case InstructionCodes.RFIELDLOAD:
            case InstructionCodes.MAPLOAD:
            case InstructionCodes.JSONLOAD:
            case InstructionCodes.ENUMERATORLOAD:
                execLoadOpcodes(ctx, sf, opcode, operands);
                break;
            case InstructionCodes.IASTORE:
            case InstructionCodes.FASTORE:
            case InstructionCodes.SASTORE:
            case InstructionCodes.BASTORE:
            case InstructionCodes.LASTORE:
            case InstructionCodes.RASTORE:
            case InstructionCodes.JSONASTORE:
            case InstructionCodes.IGSTORE:
            case InstructionCodes.FGSTORE:
            case InstructionCodes.SGSTORE:
            case InstructionCodes.BGSTORE:
            case InstructionCodes.LGSTORE:
            case InstructionCodes.RGSTORE:
            case InstructionCodes.IFIELDSTORE:
            case InstructionCodes.FFIELDSTORE:
            case InstructionCodes.SFIELDSTORE:
            case InstructionCodes.BFIELDSTORE:
            case InstructionCodes.LFIELDSTORE:
            case InstructionCodes.RFIELDSTORE:
            case InstructionCodes.MAPSTORE:
            case InstructionCodes.JSONSTORE:
                execStoreOpcodes(ctx, sf, opcode, operands);
                break;
            case InstructionCodes.IADD:
            case InstructionCodes.FADD:
            case InstructionCodes.SADD:
            case InstructionCodes.XMLADD:
            case InstructionCodes.ISUB:
            case InstructionCodes.FSUB:
            case InstructionCodes.IMUL:
            case InstructionCodes.FMUL:
            case InstructionCodes.IDIV:
            case InstructionCodes.FDIV:
            case InstructionCodes.IMOD:
            case InstructionCodes.FMOD:
            case InstructionCodes.INEG:
            case InstructionCodes.FNEG:
            case InstructionCodes.BNOT:
            case InstructionCodes.IEQ:
            case InstructionCodes.FEQ:
            case InstructionCodes.SEQ:
            case InstructionCodes.BEQ:
            case InstructionCodes.REQ:
            case InstructionCodes.TEQ:
            case InstructionCodes.INE:
            case InstructionCodes.FNE:
            case InstructionCodes.SNE:
            case InstructionCodes.BNE:
            case InstructionCodes.RNE:
            case InstructionCodes.TNE:
                execBinaryOpCodes(ctx, sf, opcode, operands);
                break;
            case InstructionCodes.LENGTHOF:
                calculateLength(ctx, operands, sf);
                break;
            case InstructionCodes.TYPELOAD:
                cpIndex = operands[0];
                j = operands[1];
                TypeRefCPEntry typeEntry = (TypeRefCPEntry) ctx.constPool[cpIndex];
                sf.refRegs[j] = new BTypeDescValue(typeEntry.getType());
                break;
            case InstructionCodes.TYPEOF:
                i = operands[0];
                j = operands[1];
                BValue val = sf.refRegs[i];
                if (val == null || (val instanceof BString && ((BString) val).value() == null)) {
                    sf.refRegs[j] = new BTypeDescValue(BTypes.typeNull);
                    break;
                }
                sf.refRegs[j] = new BTypeDescValue(sf.refRegs[i].getType());
                break;
            case InstructionCodes.HALT:
                ctx = handleHalt(ctx);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.IGT:
            case InstructionCodes.FGT:
            case InstructionCodes.IGE:
            case InstructionCodes.FGE:
            case InstructionCodes.ILT:
            case InstructionCodes.FLT:
            case InstructionCodes.ILE:
            case InstructionCodes.FLE:
            case InstructionCodes.REQ_NULL:
            case InstructionCodes.RNE_NULL:
            case InstructionCodes.BR_TRUE:
            case InstructionCodes.BR_FALSE:
            case InstructionCodes.GOTO:
            case InstructionCodes.SEQ_NULL:
            case InstructionCodes.SNE_NULL:
                execCmpAndBranchOpcodes(ctx, sf, opcode, operands);
                break;
            case InstructionCodes.TR_RETRY:
                i = operands[0];
                j = operands[1];
                int l = operands[2];
                retryTransaction(ctx, i, j, l);
                break;
            case InstructionCodes.CALL:
                callIns = (InstructionCALL) instruction;
                ctx = BLangFunctions.invokeCallable(callIns.functionInfo, ctx, callIns.argRegs, callIns.retRegs, false, callIns.flags);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.VCALL:
                InstructionVCALL vcallIns = (InstructionVCALL) instruction;
                ctx = invokeVirtualFunction(ctx, vcallIns.receiverRegIndex, vcallIns.functionInfo, vcallIns.argRegs, vcallIns.retRegs, vcallIns.flags);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.ACALL:
                InstructionACALL acallIns = (InstructionACALL) instruction;
                ctx = invokeAction(ctx, acallIns.actionName, acallIns.argRegs, acallIns.retRegs, acallIns.flags);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.TCALL:
                InstructionTCALL tcallIns = (InstructionTCALL) instruction;
                ctx = BLangFunctions.invokeCallable(tcallIns.transformerInfo, ctx, tcallIns.argRegs, tcallIns.retRegs, false, tcallIns.flags);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.TR_BEGIN:
                i = operands[0];
                j = operands[1];
                int k = operands[2];
                int h = operands[3];
                beginTransaction(ctx, i, j, k, h);
                break;
            case InstructionCodes.TR_END:
                i = operands[0];
                j = operands[1];
                endTransaction(ctx, i, j);
                break;
            case InstructionCodes.WRKSEND:
                InstructionWRKSendReceive wrkSendIns = (InstructionWRKSendReceive) instruction;
                handleWorkerSend(ctx, wrkSendIns.dataChannelInfo, wrkSendIns.types, wrkSendIns.regs);
                break;
            case InstructionCodes.WRKRECEIVE:
                InstructionWRKSendReceive wrkReceiveIns = (InstructionWRKSendReceive) instruction;
                if (!handleWorkerReceive(ctx, wrkReceiveIns.dataChannelInfo, wrkReceiveIns.types, wrkReceiveIns.regs)) {
                    return;
                }
                break;
            case InstructionCodes.FORKJOIN:
                InstructionFORKJOIN forkJoinIns = (InstructionFORKJOIN) instruction;
                ctx = invokeForkJoin(ctx, forkJoinIns);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.THROW:
                i = operands[0];
                if (i >= 0) {
                    BStruct error = (BStruct) sf.refRegs[i];
                    if (error == null) {
                        handleNullRefError(ctx);
                        break;
                    }
                    BLangVMErrors.attachStackFrame(error, ctx);
                    ctx.setError(error);
                }
                handleError(ctx);
                break;
            case InstructionCodes.ERRSTORE:
                i = operands[0];
                sf.refRegs[i] = ctx.getError();
                // clear error
                ctx.setError(null);
                break;
            case InstructionCodes.FPCALL:
                i = operands[0];
                if (sf.refRegs[i] == null) {
                    handleNullRefError(ctx);
                    break;
                }
                cpIndex = operands[1];
                funcCallCPEntry = (FunctionCallCPEntry) ctx.constPool[cpIndex];
                funcRefCPEntry = ((BFunctionPointer) sf.refRegs[i]).value();
                functionInfo = funcRefCPEntry.getFunctionInfo();
                ctx = BLangFunctions.invokeCallable(functionInfo, ctx, funcCallCPEntry.getArgRegs(), funcCallCPEntry.getRetRegs(), false);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.FPLOAD:
                i = operands[0];
                j = operands[1];
                funcRefCPEntry = (FunctionRefCPEntry) ctx.constPool[i];
                sf.refRegs[j] = new BFunctionPointer(funcRefCPEntry);
                break;
            case InstructionCodes.I2ANY:
            case InstructionCodes.F2ANY:
            case InstructionCodes.S2ANY:
            case InstructionCodes.B2ANY:
            case InstructionCodes.L2ANY:
            case InstructionCodes.ANY2I:
            case InstructionCodes.ANY2F:
            case InstructionCodes.ANY2S:
            case InstructionCodes.ANY2B:
            case InstructionCodes.ANY2L:
            case InstructionCodes.ANY2JSON:
            case InstructionCodes.ANY2XML:
            case InstructionCodes.ANY2MAP:
            case InstructionCodes.ANY2TYPE:
            case InstructionCodes.ANY2E:
            case InstructionCodes.ANY2T:
            case InstructionCodes.ANY2C:
            case InstructionCodes.ANY2DT:
            case InstructionCodes.NULL2JSON:
            case InstructionCodes.CHECKCAST:
            case InstructionCodes.B2JSON:
            case InstructionCodes.JSON2I:
            case InstructionCodes.JSON2F:
            case InstructionCodes.JSON2S:
            case InstructionCodes.JSON2B:
            case InstructionCodes.NULL2S:
            case InstructionCodes.IS_ASSIGNABLE:
            case InstructionCodes.CHECK_CONVERSION:
                execTypeCastOpcodes(ctx, sf, opcode, operands);
                break;
            case InstructionCodes.I2F:
            case InstructionCodes.I2S:
            case InstructionCodes.I2B:
            case InstructionCodes.I2JSON:
            case InstructionCodes.F2I:
            case InstructionCodes.F2S:
            case InstructionCodes.F2B:
            case InstructionCodes.F2JSON:
            case InstructionCodes.S2I:
            case InstructionCodes.S2F:
            case InstructionCodes.S2B:
            case InstructionCodes.S2JSON:
            case InstructionCodes.B2I:
            case InstructionCodes.B2F:
            case InstructionCodes.B2S:
            case InstructionCodes.DT2XML:
            case InstructionCodes.DT2JSON:
            case InstructionCodes.T2MAP:
            case InstructionCodes.T2JSON:
            case InstructionCodes.MAP2T:
            case InstructionCodes.JSON2T:
            case InstructionCodes.XMLATTRS2MAP:
            case InstructionCodes.S2XML:
            case InstructionCodes.S2JSONX:
            case InstructionCodes.XML2S:
            case InstructionCodes.ANY2SCONV:
                execTypeConversionOpcodes(ctx, sf, opcode, operands);
                break;
            case InstructionCodes.INEWARRAY:
                i = operands[0];
                sf.refRegs[i] = new BIntArray();
                break;
            case InstructionCodes.ARRAYLEN:
                i = operands[0];
                j = operands[1];
                BValue value = sf.refRegs[i];
                if (value == null) {
                    handleNullRefError(ctx);
                    break;
                }
                if (value.getType().getTag() == TypeTags.JSON_TAG) {
                    sf.longRegs[j] = ((BJSON) value).value().size();
                    break;
                }
                sf.longRegs[j] = ((BNewArray) value).size();
                break;
            case InstructionCodes.FNEWARRAY:
                i = operands[0];
                sf.refRegs[i] = new BFloatArray();
                break;
            case InstructionCodes.SNEWARRAY:
                i = operands[0];
                sf.refRegs[i] = new BStringArray();
                break;
            case InstructionCodes.BNEWARRAY:
                i = operands[0];
                sf.refRegs[i] = new BBooleanArray();
                break;
            case InstructionCodes.LNEWARRAY:
                i = operands[0];
                sf.refRegs[i] = new BBlobArray();
                break;
            case InstructionCodes.RNEWARRAY:
                i = operands[0];
                cpIndex = operands[1];
                typeRefCPEntry = (TypeRefCPEntry) ctx.constPool[cpIndex];
                sf.refRegs[i] = new BRefValueArray(typeRefCPEntry.getType());
                break;
            case InstructionCodes.JSONNEWARRAY:
                i = operands[0];
                j = operands[1];
                // This is a temporary solution to create n-valued JSON array
                StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
                for (int index = 0; index < sf.longRegs[j]; index++) {
                    stringJoiner.add(null);
                }
                sf.refRegs[i] = new BJSON(stringJoiner.toString());
                break;
            case InstructionCodes.NEWSTRUCT:
                createNewStruct(ctx, operands, sf);
                break;
            case InstructionCodes.NEWCONNECTOR:
                createNewConnector(ctx, operands, sf);
                break;
            case InstructionCodes.NEWMAP:
                i = operands[0];
                cpIndex = operands[1];
                typeRefCPEntry = (TypeRefCPEntry) ctx.constPool[cpIndex];
                BMapType mapType = (BMapType) typeRefCPEntry.getType();
                sf.refRegs[i] = new BMap<String, BRefType>(mapType);
                break;
            case InstructionCodes.NEWJSON:
                i = operands[0];
                cpIndex = operands[1];
                typeRefCPEntry = (TypeRefCPEntry) ctx.constPool[cpIndex];
                sf.refRegs[i] = new BJSON("{}", typeRefCPEntry.getType());
                break;
            case InstructionCodes.NEWTABLE:
                i = operands[0];
                cpIndex = operands[1];
                typeRefCPEntry = (TypeRefCPEntry) ctx.constPool[cpIndex];
                sf.refRegs[i] = new BTable(typeRefCPEntry.getType());
                break;
            case InstructionCodes.NEWSTREAM:
                i = operands[0];
                cpIndex = operands[1];
                typeRefCPEntry = (TypeRefCPEntry) ctx.constPool[cpIndex];
                StringCPEntry name = (StringCPEntry) ctx.constPool[operands[2]];
                BStream stream = new BStream(typeRefCPEntry.getType(), name.getValue());
                sf.refRegs[i] = stream;
                break;
            case InstructionCodes.NEW_INT_RANGE:
                createNewIntRange(operands, sf);
                break;
            case InstructionCodes.IRET:
                i = operands[0];
                j = operands[1];
                currentSF = ctx.workerLocal;
                callersSF = ctx.workerResult;
                callersRetRegIndex = ctx.retRegIndexes[i];
                callersSF.longRegs[callersRetRegIndex] = currentSF.longRegs[j];
                break;
            case InstructionCodes.FRET:
                i = operands[0];
                j = operands[1];
                currentSF = ctx.workerLocal;
                callersSF = ctx.workerResult;
                callersRetRegIndex = ctx.retRegIndexes[i];
                callersSF.doubleRegs[callersRetRegIndex] = currentSF.doubleRegs[j];
                break;
            case InstructionCodes.SRET:
                i = operands[0];
                j = operands[1];
                currentSF = ctx.workerLocal;
                callersSF = ctx.workerResult;
                callersRetRegIndex = ctx.retRegIndexes[i];
                callersSF.stringRegs[callersRetRegIndex] = currentSF.stringRegs[j];
                break;
            case InstructionCodes.BRET:
                i = operands[0];
                j = operands[1];
                currentSF = ctx.workerLocal;
                callersSF = ctx.workerResult;
                callersRetRegIndex = ctx.retRegIndexes[i];
                callersSF.intRegs[callersRetRegIndex] = currentSF.intRegs[j];
                break;
            case InstructionCodes.LRET:
                i = operands[0];
                j = operands[1];
                currentSF = ctx.workerLocal;
                callersSF = ctx.workerResult;
                callersRetRegIndex = ctx.retRegIndexes[i];
                callersSF.byteRegs[callersRetRegIndex] = currentSF.byteRegs[j];
                break;
            case InstructionCodes.RRET:
                i = operands[0];
                j = operands[1];
                currentSF = ctx.workerLocal;
                callersSF = ctx.workerResult;
                callersRetRegIndex = ctx.retRegIndexes[i];
                callersSF.refRegs[callersRetRegIndex] = currentSF.refRegs[j];
                break;
            case InstructionCodes.RET:
                ctx = handleReturn(ctx);
                if (ctx == null) {
                    return;
                }
                break;
            case InstructionCodes.XMLATTRSTORE:
            case InstructionCodes.XMLATTRLOAD:
            case InstructionCodes.XML2XMLATTRS:
            case InstructionCodes.S2QNAME:
            case InstructionCodes.NEWQNAME:
            case InstructionCodes.NEWXMLELEMENT:
            case InstructionCodes.NEWXMLCOMMENT:
            case InstructionCodes.NEWXMLTEXT:
            case InstructionCodes.NEWXMLPI:
            case InstructionCodes.XMLSEQSTORE:
            case InstructionCodes.XMLSEQLOAD:
            case InstructionCodes.XMLLOAD:
            case InstructionCodes.XMLLOADALL:
            case InstructionCodes.NEWXMLSEQ:
                execXMLOpcodes(ctx, sf, opcode, operands);
                break;
            case InstructionCodes.ITR_NEW:
            case InstructionCodes.ITR_NEXT:
            case InstructionCodes.ITR_HAS_NEXT:
                execIteratorOperation(ctx, sf, instruction);
                break;
            case InstructionCodes.LOCK:
                InstructionLock instructionLock = (InstructionLock) instruction;
                if (!handleVariableLock(ctx, instructionLock.types, instructionLock.varRegs)) {
                    return;
                }
                break;
            case InstructionCodes.UNLOCK:
                InstructionLock instructionUnLock = (InstructionLock) instruction;
                handleVariableUnlock(ctx, instructionUnLock.types, instructionUnLock.varRegs);
                break;
            case InstructionCodes.AWAIT:
                ctx = execAwait(ctx, operands);
                if (ctx == null) {
                    return;
                }
                break;
            default:
                throw new UnsupportedOperationException();
        }
    }
}
Also used : BTable(org.ballerinalang.model.values.BTable) StringCPEntry(org.ballerinalang.util.codegen.cpentries.StringCPEntry) BValue(org.ballerinalang.model.values.BValue) InstructionTCALL(org.ballerinalang.util.codegen.Instruction.InstructionTCALL) InstructionWRKSendReceive(org.ballerinalang.util.codegen.Instruction.InstructionWRKSendReceive) BString(org.ballerinalang.model.values.BString) FunctionCallCPEntry(org.ballerinalang.util.codegen.cpentries.FunctionCallCPEntry) Instruction(org.ballerinalang.util.codegen.Instruction) BIntArray(org.ballerinalang.model.values.BIntArray) BTypeDescValue(org.ballerinalang.model.values.BTypeDescValue) InstructionLock(org.ballerinalang.util.codegen.Instruction.InstructionLock) StringJoiner(java.util.StringJoiner) InstructionFORKJOIN(org.ballerinalang.util.codegen.Instruction.InstructionFORKJOIN) BFunctionPointer(org.ballerinalang.model.values.BFunctionPointer) BRefType(org.ballerinalang.model.values.BRefType) BStruct(org.ballerinalang.model.values.BStruct) TypeRefCPEntry(org.ballerinalang.util.codegen.cpentries.TypeRefCPEntry) BString(org.ballerinalang.model.values.BString) FunctionInfo(org.ballerinalang.util.codegen.FunctionInfo) AttachedFunctionInfo(org.ballerinalang.util.codegen.AttachedFunctionInfo) BRefValueArray(org.ballerinalang.model.values.BRefValueArray) InstructionCALL(org.ballerinalang.util.codegen.Instruction.InstructionCALL) InstructionVCALL(org.ballerinalang.util.codegen.Instruction.InstructionVCALL) BJSON(org.ballerinalang.model.values.BJSON) BStringArray(org.ballerinalang.model.values.BStringArray) BBlobArray(org.ballerinalang.model.values.BBlobArray) BMapType(org.ballerinalang.model.types.BMapType) FunctionRefCPEntry(org.ballerinalang.util.codegen.cpentries.FunctionRefCPEntry) InstructionACALL(org.ballerinalang.util.codegen.Instruction.InstructionACALL) BBooleanArray(org.ballerinalang.model.values.BBooleanArray) BStream(org.ballerinalang.model.values.BStream) BFloatArray(org.ballerinalang.model.values.BFloatArray)

Aggregations

BBooleanArray (org.ballerinalang.model.values.BBooleanArray)9 BFloatArray (org.ballerinalang.model.values.BFloatArray)7 BIntArray (org.ballerinalang.model.values.BIntArray)7 BStringArray (org.ballerinalang.model.values.BStringArray)7 BRefValueArray (org.ballerinalang.model.values.BRefValueArray)4 BValue (org.ballerinalang.model.values.BValue)4 Test (org.testng.annotations.Test)4 BBlobArray (org.ballerinalang.model.values.BBlobArray)3 BJSON (org.ballerinalang.model.values.BJSON)3 BRefType (org.ballerinalang.model.values.BRefType)3 BString (org.ballerinalang.model.values.BString)3 BMapType (org.ballerinalang.model.types.BMapType)2 BInteger (org.ballerinalang.model.values.BInteger)2 StructureType (org.ballerinalang.model.values.StructureType)2 TypeRefCPEntry (org.ballerinalang.util.codegen.cpentries.TypeRefCPEntry)2 BallerinaException (org.ballerinalang.util.exceptions.BallerinaException)2 StringJoiner (java.util.StringJoiner)1 BEnumType (org.ballerinalang.model.types.BEnumType)1 BStructType (org.ballerinalang.model.types.BStructType)1 BFunctionPointer (org.ballerinalang.model.values.BFunctionPointer)1