Word * Finder_FindQualifiedIDWord ( Finder * finder, byte * token ) { Word * word ; //while ( ( symbol = _Symbol_FindAny ( token ) ) ) while ( ( word = Finder_Word_FindUsing ( finder, token ) ) ) { if ( word->CType & ( NAMESPACE ) ) { Namespace * ns = ( Namespace * ) word ; Finder_SetQualifyingNamespace ( finder, ns ) ; } else if ( word->CType & ( OBJECT ) ) { Finder_SetQualifyingNamespace ( finder, word->ContainingNamespace ) ; } else if ( word->CType & ( CLASS_MEMBER_ACCESS ) ) { Finder_SetQualifyingNamespace ( finder, word->ClassFieldNamespace ) ; } else return word ; if ( Lexer_IsTokenForwardDotted ( _Context_->Lexer0 ) ) { Lexer_ReadToken ( _Context_->Lexer0 ) ; // the '.' token = Lexer_ReadToken ( _Context_->Lexer0 ) ; // the namespace continue ; } else return word ; } return 0 ; }
Word * Finder_Word_FindUsing ( Finder * finder, byte * name ) { Word * word = 0 ; if ( name ) { if ( finder->QualifyingNamespace ) { if ( String_Equal ( ".", ( char* ) name ) ) word = Word_FindUsing ( name ) ; // keep QualifyingNamespace intact // ?? assumes function of CfrTil_Dot is always and only named "." ?? else #if OLD { word = Word_FindInOneNamespace ( finder->QualifyingNamespace, name ) ; if ( ! GetState ( _Context_, CONTEXT_PARSING_QUALIFIED_ID ) ) Finder_SetQualifyingNamespace ( finder, 0 ) ; // nb. QualifyingNamespace is only good for one find } #else { word = Word_FindInOneNamespace ( finder->QualifyingNamespace, name ) ; if ( ReadLine_IsReverseTokenQualifiedID ( _Context_->ReadLiner0 ) ) { SetState ( _Context_, CONTEXT_PARSING_QUALIFIED_ID, false ) ; Finder_SetQualifyingNamespace ( finder, 0 ) ; // nb. QualifyingNamespace is only good for approximately one find } } #endif } if ( ! word ) word = Word_FindUsing ( name ) ; } return word ; }
void _Namespace_RemoveFromUsingListAndClear ( Namespace * ns ) { if ( ns ) { if ( ns == _Q_->OVT_CfrTil->InNamespace ) _Q_->OVT_CfrTil->InNamespace = ( Namespace* ) dlnode_Next ( ( dlnode* ) ns ) ; //dllist_First ( (dllist*) _Q_->CfrTil->Namespaces->Lo_List ) ; if ( ns == _Context_->Finder0->QualifyingNamespace ) Finder_SetQualifyingNamespace ( _Context_->Finder0, 0 ) ; _Namespace_Clear ( ns ) ; dlnode_Remove ( ( dlnode* ) ns ) ; } }