private static void convertArrayToJSON(Strand ctx, int[] operands, StackFrame sf) { int i = operands[0]; int j = operands[1]; BNewArray bArray = (BNewArray) sf.refRegs[i]; try { sf.refRegs[j] = JSONUtils.convertArrayToJSON(bArray); } catch (Exception e) { String errorMsg = "cannot convert '" + bArray.getType() + "' to type '" + BTypes.typeJSON + "': " + e.getMessage(); handleTypeConversionError(ctx, sf, j, errorMsg); } }
case TypeTags.ARRAY_TAG: BNewArray arr = (BNewArray) sourceValue; switch (arr.getType().getTag()) { case TypeTags.INT_TAG: case TypeTags.FLOAT_TAG:
private void handleMappingArrayElementToNonUnionType(boolean containsNull, BType nonNilType, BNewArray newArray, BMap<String, BValue> bStruct, String fieldName) { if (containsNull) { throw new BallerinaException( "Trying to assign an array containing NULL values to an array of a non-nillable element type"); } else { validateAndSetRefRecordField(bStruct, fieldName, ((BArrayType) nonNilType) .getElementType().getTag(), ((BArrayType) newArray.getType()).getElementType().getTag(), newArray, MISMATCHING_FIELD_ASSIGNMENT); } }
private void handleArrayValue(BMap<String, BValue> bStruct, String fieldName, Array data, BType fieldType) throws SQLException { int fieldTypeTag = fieldType.getTag(); BNewArray dataArray = getDataArray(data); if (dataArray != null) { BType nonNilType = fieldType; if (fieldTypeTag == TypeTags.UNION_TAG) { nonNilType = retrieveNonNilType(((BUnionType) fieldType).getMemberTypes()); } // The dataArray is created from the array returned from the database. There, an array of Union Type is // created only if the array includes NULL elements. boolean containsNull = dataArray.getType().getTag() == TypeTags.ARRAY_TAG && ((BArrayType) dataArray.getType()).getElementType().getTag() == TypeTags.UNION_TAG; handleMappingArrayValue(nonNilType, bStruct, dataArray, fieldName, containsNull); } else { if (fieldTypeTag == TypeTags.UNION_TAG) { bStruct.put(fieldName, null); } else { handleNilToNonNillableFieldAssignment(); } } }
/** * Convert {@link BNewArray} to JSON. * * @param bArray {@link BNewArray} to be converted to JSON * @return JSON representation of the provided bArray */ public static BValueArray convertArrayToJSON(BNewArray bArray) { if (bArray instanceof BDecimalArray) { return convertArrayToJSON(bArray); } else if (bArray instanceof BValueArray) { if (((BValueArray) bArray).elementType == BTypes.typeInt) { return convertIntArrayToJSON((BValueArray) bArray); } else if (((BValueArray) bArray).elementType == BTypes.typeBoolean) { return convertBooleanArrayToJSON((BValueArray) bArray); } else if (((BValueArray) bArray).elementType == BTypes.typeFloat) { return convertFloatArrayToJSON((BValueArray) bArray); } else if (((BValueArray) bArray).elementType == BTypes.typeString) { return convertStringArrayToJSON((BValueArray) bArray); } else { return convertRefArrayToJSON((BValueArray) bArray); } } throw BLangExceptionHelper.getRuntimeException(RuntimeErrors.INCOMPATIBLE_TYPE, BTypes.typeJSON, bArray.getType()); }
public static BRefType<?> execListGetOperation(BNewArray array, long index) { if (array.getType().getTag() != TypeTags.ARRAY_TAG) { BValueArray bRefValueArray = (BValueArray) array; return bRefValueArray.getRefValue(index); } switch (((BArrayType) array.getType()).getElementType().getTag()) { case TypeTags.BOOLEAN_TAG: BValueArray bBooleanArray = (BValueArray) array; int i = bBooleanArray.getBoolean(index); return i == 0 ? new BBoolean(false) : new BBoolean(true); case TypeTags.BYTE_TAG: BValueArray bByteArray = (BValueArray) array; return new BByte(bByteArray.getByte(index)); case TypeTags.FLOAT_TAG: BValueArray bFloatArray = (BValueArray) array; return new BFloat(bFloatArray.getFloat(index)); case TypeTags.DECIMAL_TAG: BValueArray bDecimalArray = (BValueArray) array; return new BDecimal(new BigDecimal(bDecimalArray.getRefValue(index).stringValue())); case TypeTags.INT_TAG: BValueArray bIntArray = (BValueArray) array; return new BInteger(bIntArray.getInt(index)); case TypeTags.STRING_TAG: BValueArray bStringArray = (BValueArray) array; return new BString(bStringArray.getString(index)); default: BValueArray bRefValueArray = (BValueArray) array; return bRefValueArray.getRefValue(index); } }
public static void execListAddOperation(BNewArray array, long index, BRefType refType) { if (array.getType().getTag() != TypeTags.ARRAY_TAG) { BValueArray bRefValueArray = (BValueArray) array; bRefValueArray.add(index, refType); return; } BValueArray bValueArray = (BValueArray) array; switch (((BArrayType) array.getType()).getElementType().getTag()) { case TypeTags.BOOLEAN_TAG: bValueArray.add(index, ((BBoolean) refType).value() ? 1 : 0); return; case TypeTags.BYTE_TAG: bValueArray.add(index, (byte) refType.value()); return; case TypeTags.FLOAT_TAG: bValueArray.add(index, (double) refType.value()); return; case TypeTags.INT_TAG: bValueArray.add(index, (long) refType.value()); return; case TypeTags.STRING_TAG: bValueArray.add(index, (String) refType.value()); return; default: bValueArray.add(index, refType); } } }
private void handleMappingArrayElementToUnionType(BArrayType expectedArrayType, BNewArray arrayTobeSet, String fieldName, BMap<String, BValue> bStruct) { BArrayType arrayType = (BArrayType) arrayTobeSet.getType(); if (arrayType.getElementType().getTag() == TypeTags.NULL_TAG) { bStruct.put(fieldName, arrayTobeSet); } else { BUnionType expectedArrayElementUnionType = (BUnionType) expectedArrayType.getElementType(); BType expectedNonNilArrayElementType = retrieveNonNilType(expectedArrayElementUnionType.getMemberTypes()); BType actualNonNilArrayElementType = getActualNonNilArrayElementType(arrayType.getElementType()); validateAndSetRefRecordField(bStruct, fieldName, expectedNonNilArrayElementType .getTag(), actualNonNilArrayElementType.getTag(), arrayTobeSet, UNASSIGNABLE_UNIONTYPE_EXCEPTION); } }
long index = sf.longRegs[j]; BRefType refReg = sf.refRegs[k]; BType elementType = (list.getType().getTag() == TypeTags.ARRAY_TAG) ? ((BArrayType) list.getType()).getElementType() : ((BTupleType) list.getType()).getTupleTypes().get((int) index); if (!checkCast(refReg, elementType)) { ctx.setError(BLangVMErrors.createError(ctx, BallerinaErrorReasons.INHERENT_TYPE_VIOLATION_ERROR,