예제 #1
0
sym_id  SymFind( char *name, int length ) {
//=========================================

// Determine if a symbol exists in the symbol table.

    return( STNameSearch( name, length ) );
}
예제 #2
0
static  sym_id  IFSymLookup( char *name, uint len ) {
//===================================================

    sym_id      sym;

    sym = STNameSearch( name, len );
    if( sym != NULL ) {
        if( ((sym->ns.flags & SY_CLASS) == SY_SUBPROGRAM) &&
               (sym->ns.flags & SY_INTRINSIC) ) {
            return( sym );
        }
    }
    sym = STSearch( name, len, IFList );
    if( sym == NULL ) {
        sym = STAdd( name, len );
        sym->ns.u3.address = NULL;
        sym->ns.link = IFList;
        IFList = sym;
    }
    return( sym );
}
예제 #3
0
sym_id  STName( char *name, int length ) {
//========================================

// Lookup the specified name in the symbol table.

    sym_id    sym;

    if( length > MAX_SYMLEN ) {
        length = MAX_SYMLEN;
    }
    sym = STNameSearch( name, length );
    if( sym == NULL ) {
        sym = STAdd( name, length );
        sym->ns.si.va.vi.ec_ext = NULL;
        sym->ns.u3.address = NULL;
        HashInsert( HashTable, HashValue, &NList, sym );
    } else if( ( ( sym->ns.flags & SY_CLASS ) == SY_VARIABLE ) &&
               ( sym->ns.flags & SY_SPECIAL_PARM ) ) {
        sym = FindShadow( sym ); // Shadowed variable
    }
    return( sym );
}