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