private static void handleAnyToRefTypeCast(Strand ctx, StackFrame sf, int[] operands, BType targetType) { int i = operands[0]; int j = operands[1]; BRefType bRefType = sf.refRegs[i]; if (bRefType == null) { sf.refRegs[j] = null; } else if (bRefType.getType() == targetType) { sf.refRegs[j] = bRefType; } else { handleTypeCastError(ctx, sf, j, bRefType.getType(), targetType); } }
@Override public String stringValue() { return reason + " " + details.stringValue(); }
for (int index = 1; index <= params.size(); index++) { BRefType param = params.getRefValue(index - 1); switch (param.getType().getTag()) { case TypeTags.INT_TAG: stmt.setLong(index, (Long) param.value()); break; case TypeTags.STRING_TAG: stmt.setString(index, (String) param.value()); break; case TypeTags.FLOAT_TAG: stmt.setDouble(index, (Double) param.value()); break; case TypeTags.BOOLEAN_TAG: stmt.setBoolean(index, (Boolean) param.value()); break; case TypeTags.XML_TAG: case TypeTags.JSON_TAG: stmt.setString(index, (String) param.value()); break; case TypeTags.ARRAY_TAG: BType elementType = ((BArrayType) param.getType()).getElementType(); if (elementType.getTag() == TypeTags.BYTE_TAG) { byte[] blobData = (byte[]) param.value(); stmt.setBlob(index, new ByteArrayInputStream(blobData), blobData.length); } else {
private static void createClone(Strand ctx, int[] operands, StackFrame sf) { int i = operands[0]; int j = operands[1]; BRefType<?> refRegVal = sf.refRegs[i]; if (refRegVal == null) { return; } if (!checkIsLikeType(refRegVal, BTypes.typeAnydata)) { sf.refRegs[j] = BLangVMErrors.createError(ctx, BallerinaErrorReasons.CLONE_ERROR, BLangExceptionHelper.getErrorMessage( RuntimeErrors.UNSUPPORTED_CLONE_OPERATION, refRegVal.getType())); return; } sf.refRegs[j] = (BRefType<?>) refRegVal.copy(new HashMap<>()); }
sj.add((refValues[i].getType().getTag() == TypeTags.STRING_TAG) ? ("\"" + refValues[i] + "\"") : refValues[i].stringValue());
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); } } }
error = BLangVMErrors.createError(ctx, BallerinaErrorReasons.STAMP_ERROR, BLangExceptionHelper.getErrorMessage(RuntimeErrors.INCOMPATIBLE_STAMP_OPERATION, valueToBeStamped.getType(), targetType)); } else { error = BLangVMErrors.createError(ctx, BallerinaErrorReasons.STAMP_ERROR, valueToBeStamped.stamp(targetType); BError error = BLangVMErrors.createError(ctx, BallerinaErrorReasons.STAMP_ERROR, BLangExceptionHelper.getErrorMessage(RuntimeErrors.INCOMPATIBLE_STAMP_OPERATION, valueToBeStamped.getType(), targetType)); sf.refRegs[k] = error;
value.attemptFreeze(freezeStatus); sf.intRegs[j] = (value == null || value.isFrozen()) ? 1 : 0; break;
/** * {@inheritDoc} */ @Override public synchronized void attemptFreeze(BVM.FreezeStatus freezeStatus) { if (isOpenForFreeze(this.freezeStatus, freezeStatus)) { this.freezeStatus = freezeStatus; Arrays.stream(sequence.refValues).forEach(val -> val.attemptFreeze(freezeStatus)); } } }
public BRefType getDetails() { // TODO: Make details frozen. return (BRefType) details.copy(new HashMap<>()); }
((BTupleType) type).getTupleTypes().set(i, memberType); arrayValues[i].stamp(memberType); for (int i = 0; i < this.size(); i++) { if (arrayValues[i] != null) { arrayValues[i].stamp(BVM.resolveMatchingTypeForUnion(arrayValues[i], type)); for (int i = 0; i < this.size(); i++) { if (arrayValues[i] != null) { arrayValues[i].stamp(arrayElementType);
private static List<BreakPointDTO> buildBreakPoints(BRefType<?> json) { if (json == null || json.getType().getTag() != TypeTags.ARRAY_TAG) { return null; } List<BreakPointDTO> bPoints = new ArrayList<>(); BValueArray jsonArray = (BValueArray) json; for (int i = 0; i < jsonArray.size(); i++) { BMap<String, BRefType<?>> element = (BMap) jsonArray.getRefValue(i); BreakPointDTO bPoint = new BreakPointDTO(); bPoint.setPackagePath(element.get(PACKAGE_PATH) == null ? null : element.get(PACKAGE_PATH).stringValue()); bPoint.setFileName(element.get(FILE_NAME) == null ? null : element.get(FILE_NAME).stringValue()); bPoint.setLineNumber( element.get(LINE_NUMBER) == null ? -1 : (int) ((BInteger) element.get(LINE_NUMBER)).intValue()); bPoints.add(bPoint); } return bPoints; }
private BValueArray constructTablesForResultSets(List<ResultSet> resultSets, TableResourceManager rm, Context context, BValueArray structTypes, String databaseProductName) throws SQLException { BValueArray bTables = new BValueArray(new BArrayType(BTypes.typeTable)); // TODO: "mysql" equality condition is part of the temporary fix to support returning the result set in the case // of stored procedures returning only one result set in MySQL. Refer ballerina-platform/ballerina-lang#8643 if (databaseProductName.contains(MYSQL) && (structTypes != null && structTypes.size() > 1)) { throw new BallerinaException( "Retrieving result sets from stored procedures returning more than one result set, is not " + "supported"); } else if (structTypes == null || resultSets.size() != structTypes.size()) { throw new BallerinaException( "Mismatching record type count: " + (structTypes == null ? 0 : structTypes.size()) + " and " + "returned result set count: " + resultSets.size() + " from the stored procedure"); } for (int i = 0; i < resultSets.size(); i++) { bTables.add(i, constructTable(rm, context, resultSets.get(i), (BStructureType) structTypes.getRefValue(i).value(), databaseProductName)); } return bTables; }
/** * {@inheritDoc} */ @Override public synchronized void attemptFreeze(BVM.FreezeStatus freezeStatus) { if (!isOpenForFreeze(this.freezeStatus, freezeStatus)) { return; } this.freezeStatus = freezeStatus; if (elementType == null || !(elementType.getTag() == TypeTags.INT_TAG || elementType.getTag() == TypeTags.STRING_TAG || elementType.getTag() == TypeTags.BOOLEAN_TAG || elementType.getTag() == TypeTags.FLOAT_TAG || elementType.getTag() == TypeTags.BYTE_TAG)) { for (int i = 0; i < this.size; i++) { if (this.getRefValue(i) != null) { this.getRefValue(i).attemptFreeze(freezeStatus); } } } }
IntStream.range(0, bound) .forEach(i -> values[i] = this.refValues[i] == null ? null : (BRefType<?>) this.refValues[i].copy(refs)); return refValueArray;
/** * Method to build CommandDTO instance with given json msg. * * @param jsonStr msg String. * @return object instance. */ public static CommandDTO buildCommandDTO(String jsonStr) { BRefType<?> node = JsonParser.parse(jsonStr); CommandDTO commandDTO = new CommandDTO(); if (node.getType().getTag() == TypeTags.JSON_TAG) { BMap<String, BRefType<?>> json = (BMap) node; commandDTO.setCommand(json.get(COMMAND) == null ? null : json.get(COMMAND).stringValue()); commandDTO.setThreadId(json.get(THREAD_ID) == null ? null : json.get(THREAD_ID).stringValue()); commandDTO.setVariableName(json.get(EXPRESSION) == null ? null : json.get(EXPRESSION).stringValue()); commandDTO.setPoints(buildBreakPoints(json.get(POINTS))); } return commandDTO; }
public static BRefType<?> convertUnionTypeToJSON(BRefType<?> source, BJSONType targetType) { if (source == null) { return null; } switch (source.getType().getTag()) { case TypeTags.INT_TAG: case TypeTags.FLOAT_TAG: case TypeTags.DECIMAL_TAG: case TypeTags.STRING_TAG: case TypeTags.BOOLEAN_TAG: return source; case TypeTags.NULL_TAG: return null; case TypeTags.MAP_TAG: case TypeTags.OBJECT_TYPE_TAG: case TypeTags.RECORD_TYPE_TAG: return convertMapToJSON((BMap<String, BValue>) source, targetType); case TypeTags.JSON_TAG: return source; default: throw BLangExceptionHelper.getRuntimeException(RuntimeErrors.INCOMPATIBLE_TYPE, BTypes.typeJSON, source.getType()); } }
private String getSQLType(BMap<String, BValue> parameter) { String sqlType = ""; BRefType refType = (BRefType) parameter.get(PARAMETER_SQL_TYPE_FIELD); if (refType != null) { sqlType = refType.stringValue(); } return sqlType; }
/** * {@inheritDoc} */ @Override public void addChildren(BXML<?> seq) { synchronized (this) { if (freezeStatus.getState() != BVM.FreezeStatus.State.UNFROZEN) { handleInvalidUpdate(freezeStatus.getState()); } } if (seq == null) { return; } OMElement currentNode; switch (nodeType) { case ELEMENT: currentNode = ((OMElement) omNode); break; default: throw new BallerinaException("not an " + XMLNodeType.ELEMENT); } if (seq.getNodeType() == XMLNodeType.SEQUENCE) { BValueArray childSeq = ((BXMLSequence) seq).value(); for (int i = 0; i < childSeq.size(); i++) { currentNode.addChild((OMNode) childSeq.getRefValue(i).value()); } } else { currentNode.addChild((OMNode) seq.value()); } }
private static void execExplicitlyTypedExpressionOpCode(Strand ctx, StackFrame sf, BType targetType, BRefType bRefTypeValue, int regIndex) { BType sourceType = bRefTypeValue.getType(); int targetTag = targetType.getTag(); if (!isSimpleBasicType(sourceType) || ctx.setError(BLangVMErrors.createError(ctx, BallerinaErrorReasons.TYPE_ASSERTION_ERROR, "assertion error: expected '" + targetType + "', found '" + bRefTypeValue.getType() + "'")); handleError(ctx); return; switch (targetTag) { case TypeTags.STRING_TAG: sf.stringRegs[regIndex] = bRefTypeValue.stringValue(); break; case TypeTags.FLOAT_TAG: