예제 #1
0
static parameter *NameParm( entry_pt *entry )
{
// Process a symbolic dummy argument.

    parameter           *result;
    sym_id              sym;
    act_dim_list        *dim_ptr;
    unsigned_16         flags;
    unsigned_16         class;

    sym = LkSym();
    flags = sym->u.ns.flags;
    class = flags & SY_CLASS;
    if( class == SY_VARIABLE ) {
        if( InArgList( entry, sym ) ) {
            NameErr( AR_DUPLICATE_PARM, sym );
            return( NULL );
        } else if( flags & SY_SAVED ) {
            Error( SA_SAVED );
            return( NULL );
        } else if( flags & SY_IN_EC ) {
            IllName( sym );
            return( NULL );
        } else if( flags & SY_SUBSCRIPTED ) {
            dim_ptr = sym->u.ns.si.va.u.dim_ext;
            if( dim_ptr->dim_flags & DIM_PVD ) {
                dim_ptr->dim_flags |= DIM_ASSUMED;
                NameExt( SV_PVD, sym );
                if( dim_ptr->dim_flags & DIM_USED_IN_IO ) {
                    NameErr( SV_CANT_USE_ASSUMED, sym );
                    return( NULL );
                }
            }
        }
    } else if( class == SY_PARAMETER ) {
예제 #2
0
sym_id  LkSym( void ) {
//===============

// Look up symbol in symbol table and set flag bits.

    sym_id    sym;

    sym = SymLookup( CITNode->opnd, CITNode->opnd_size );
    CITNode->sym_ptr = sym;
    CITNode->flags = sym->ns.flags;
    CITNode->size = sym->ns.xt.size;
    CITNode->typ = sym->ns.typ;
    if( ( sym->ns.name_len > STD_SYMLEN ) &&
            ( ( ExtnSw & XS_LONG_NAME ) == 0 ) ) {
        NameExt( VA_NAME_LEN_EXT, sym );
        ExtnSw |= XS_LONG_NAME;
    }
    return( sym );
}