Exemplo n.º 1
0
IHqlExpression * convertAddressToValue(IHqlExpression * address, ITypeInfo * columnType)
{
    if (isTypePassedByAddress(columnType) && !columnType->isReference())
    {
        Owned<ITypeInfo> refType = makeReferenceModifier(LINK(columnType));
        assertex(address->getOperator() == no_externalcall || refType == address->queryType());
        return createValue(no_implicitcast, LINK(refType), LINK(address));
    }

    Owned<ITypeInfo> pointerType = makePointerType(LINK(columnType));
    assertex(address->getOperator() == no_externalcall || pointerType == address->queryType());
    IHqlExpression * temp = createValue(no_implicitcast, LINK(pointerType), LINK(address));
    return createValue(no_deref, LINK(columnType), temp);
}
Exemplo n.º 2
0
ITypeInfo * makeRowReferenceType(IHqlExpression * ds)
{
    ITypeInfo * recordType = ds ? LINK(ds->queryRecordType()) : NULL;
    ITypeInfo * rowType = makeReferenceModifier(makeRowType(recordType));
    if (ds)
    {
        ITypeInfo * dsType = ds->queryType();
        if (hasLinkedRow(dsType))
            rowType = makeAttributeModifier(rowType, getLinkCountedAttr());
        if (hasOutOfLineModifier(dsType))
            rowType = makeOutOfLineModifier(rowType);
    }

    return rowType;
}