case *syntax.SelectorExpr:
// parser.new_dotname
obj := p.expr(expr.X)
- sel := p.name(expr.Sel)
if obj.Op == OPACK {
- s := restrictlookup(sel.Name, obj.Name.Pkg)
obj.Used = true
- return oldname(s)
+ return oldname(restrictlookup(expr.Sel.Value, obj.Name.Pkg))
}
- return p.setlineno(expr, nodSym(OXDOT, obj, sel))
+ return p.setlineno(expr, nodSym(OXDOT, obj, p.name(expr.Sel)))
case *syntax.IndexExpr:
return p.nod(expr, OINDEX, p.expr(expr.X), p.expr(expr.Index))
case *syntax.SliceExpr:
return name
case *syntax.SelectorExpr:
name := p.name(expr.X.(*syntax.Name))
- s := p.name(expr.Sel)
var pkg *Pkg
if name.Def == nil || name.Def.Op != OPACK {
yyerror("%v is not a package", name)
name.Def.Used = true
pkg = name.Def.Name.Pkg
}
- return restrictlookup(s.Name, pkg)
+ return restrictlookup(expr.Sel.Value, pkg)
}
panic(fmt.Sprintf("unexpected packname: %#v", expr))
}