@@ -318,7 +318,6 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
318
318
let normalized_ident = Ident { span : normalized_span, ..ident } ;
319
319
320
320
// Walk backwards up the ribs in scope.
321
- let mut module = self . graph_root ;
322
321
for ( i, rib) in ribs. iter ( ) . enumerate ( ) . rev ( ) {
323
322
debug ! ( "walk rib\n {:?}" , rib. bindings) ;
324
323
// Use the rib kind to determine whether we are resolving parameters
@@ -334,51 +333,47 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
334
333
* original_rib_ident_def,
335
334
ribs,
336
335
) ) ) ;
336
+ } else if let RibKind :: Block ( Some ( module) ) = rib. kind
337
+ && let Ok ( binding) = self . cm ( ) . resolve_ident_in_module_unadjusted (
338
+ ModuleOrUniformRoot :: Module ( module) ,
339
+ ident,
340
+ ns,
341
+ parent_scope,
342
+ Shadowing :: Unrestricted ,
343
+ finalize. map ( |finalize| Finalize { used : Used :: Scope , ..finalize } ) ,
344
+ ignore_binding,
345
+ None ,
346
+ )
347
+ {
348
+ // The ident resolves to an item in a block.
349
+ return Some ( LexicalScopeBinding :: Item ( binding) ) ;
350
+ } else if let RibKind :: Module ( module) = rib. kind {
351
+ // Encountered a module item, abandon ribs and look into that module and preludes.
352
+ return self
353
+ . cm ( )
354
+ . early_resolve_ident_in_lexical_scope (
355
+ orig_ident,
356
+ ScopeSet :: Late ( ns, module, finalize. map ( |finalize| finalize. node_id ) ) ,
357
+ parent_scope,
358
+ finalize,
359
+ finalize. is_some ( ) ,
360
+ ignore_binding,
361
+ None ,
362
+ )
363
+ . ok ( )
364
+ . map ( LexicalScopeBinding :: Item ) ;
337
365
}
338
366
339
- module = match rib. kind {
340
- RibKind :: Module ( module) | RibKind :: Block ( Some ( module) ) => module,
341
- RibKind :: MacroDefinition ( def) if def == self . macro_def ( ident. span . ctxt ( ) ) => {
342
- // If an invocation of this macro created `ident`, give up on `ident`
343
- // and switch to `ident`'s source from the macro definition.
344
- ident. span . remove_mark ( ) ;
345
- continue ;
346
- }
347
- _ => continue ,
348
- } ;
349
-
350
- match module. kind {
351
- ModuleKind :: Block => { } // We can see through blocks
352
- _ => break ,
353
- }
354
-
355
- let item = self . cm ( ) . resolve_ident_in_module_unadjusted (
356
- ModuleOrUniformRoot :: Module ( module) ,
357
- ident,
358
- ns,
359
- parent_scope,
360
- Shadowing :: Unrestricted ,
361
- finalize. map ( |finalize| Finalize { used : Used :: Scope , ..finalize } ) ,
362
- ignore_binding,
363
- None ,
364
- ) ;
365
- if let Ok ( binding) = item {
366
- // The ident resolves to an item.
367
- return Some ( LexicalScopeBinding :: Item ( binding) ) ;
367
+ if let RibKind :: MacroDefinition ( def) = rib. kind
368
+ && def == self . macro_def ( ident. span . ctxt ( ) )
369
+ {
370
+ // If an invocation of this macro created `ident`, give up on `ident`
371
+ // and switch to `ident`'s source from the macro definition.
372
+ ident. span . remove_mark ( ) ;
368
373
}
369
374
}
370
- self . cm ( )
371
- . early_resolve_ident_in_lexical_scope (
372
- orig_ident,
373
- ScopeSet :: Late ( ns, module, finalize. map ( |finalize| finalize. node_id ) ) ,
374
- parent_scope,
375
- finalize,
376
- finalize. is_some ( ) ,
377
- ignore_binding,
378
- None ,
379
- )
380
- . ok ( )
381
- . map ( LexicalScopeBinding :: Item )
375
+
376
+ unreachable ! ( )
382
377
}
383
378
384
379
/// Resolve an identifier in lexical scope.
0 commit comments