Пример #1
0
sym_id  FieldLookup( sym_id prev, char *name, uint len, intstar4 *offset ) {
//==========================================================================

// Search for a field name.

    *offset = 0;
    return( LookupField( prev, name, len, offset ) );
}
Пример #2
0
mdFieldDef Binder::GetFieldDef(BinderFieldID id)
{
    _ASSERTE(id != FIELD__NIL);
    _ASSERTE(id <= m_cFieldRIDs);
    if (m_pFieldRIDs[id-1] == 0)
        LookupField(id);
    return TokenFromRid(m_pFieldRIDs[id-1], mdtFieldDef);
}
Пример #3
0
int wxOdbcResultSet::GetFieldLength(const wxString& strField)
{
    int nIndex = LookupField(strField);
    if ( nIndex == -1 )
        return -1;

    return GetFieldLength( nIndex );
}
Пример #4
0
static  sym_id  LookupField( sym_id field, char *name, uint len,
                             intstar4 *offset ) {
//==============================================================

    sym_id      map;
    sym_id      u_field;
    intstar4    size;
    intstar4    f_size;
    intstar4    f_offset;

    f_offset = 0;
    for(;;) {
        if( field == NULL ) return( NULL );
        if( field->u.fd.typ == FT_UNION ) {
            size = 0;
            map = field->u.fd.xt.sym_record;
            while( map != NULL ) {
                u_field = LookupField( map->u.sd.fl.sym_fields, name, len, &f_size );
                if( u_field != NULL ) {
                    *offset = f_offset + f_size;
                    return( u_field );
                }
                if( size < map->u.sd.size ) {
                    size = map->u.sd.size;
                }
                map = map->u.sd.link;
            }
        } else {
            if( field->u.fd.name_len == len ) {
                if( memcmp( name, &field->u.fd.name, len ) == 0 ) {
                    *offset = f_offset;
                    return( field );
                }
            }
            if( field->u.fd.typ == FT_STRUCTURE ) {
                size = field->u.fd.xt.record->size;
            } else {
                size = field->u.fd.xt.size;
            }
            if( field->u.fd.dim_ext != NULL ) {
                size *= field->u.fd.dim_ext->num_elts;
            }
        }
        f_offset += size;
        field = field->u.fd.link;
    }
}
Пример #5
0
FieldDesc *Binder::FetchField(BinderFieldID id)
{
    THROWSCOMPLUSEXCEPTION();

    _ASSERTE(id != FIELD__NIL);
    _ASSERTE(id <= m_cFieldRIDs);

    FieldDesc *pFD;

    if (m_pFieldRIDs[id-1] == 0)
        pFD = LookupField(id);
    else
    {
        pFD = RawGetField(id);
        pFD->GetMethodTableOfEnclosingClass()->CheckRestore();
    }

    return pFD;
}
Пример #6
0
static AstExpression CheckMemberAccess(AstExpression expr)
{
	Type ty;
	Field fld;

	expr->kids[0] = CheckExpression(expr->kids[0]);
	if (expr->op == OP_MEMBER)
	{
		expr->kids[0] = Adjust(expr->kids[0], 0);
		ty = expr->kids[0]->ty;
		if (! IsRecordType(ty))
		{
			REPORT_OP_ERROR;
		}
		expr->lvalue = expr->kids[0]->lvalue;
	}
	else
	{
		expr->kids[0] = Adjust(expr->kids[0], 1);
		ty = expr->kids[0]->ty;
		if (! (IsPtrType(ty) && IsRecordType(ty->bty)))
		{
			REPORT_OP_ERROR;
		}
		ty = ty->bty;
		expr->lvalue = 1;
	}
	
	fld = LookupField(Unqual(ty), expr->val.p);
	if (fld == NULL)
	{
		Error(&expr->coord, "struct or union member %s doesn't exsist", expr->val.p);
		expr->ty = T(INT);
		return expr;
	}
	expr->ty = Qualify(ty->qual, fld->ty);
	expr->val.p = fld;
	expr->bitfld = fld->bits != 0;
	return expr;
}