pack := Nod(OPACK, nil, nil);
pack.Sym = my;
- pack.Pkg = ipkg;
+ pack.Name.Pkg = ipkg;
pack.Lineno = int32($1);
if strings.HasPrefix(my.Name, ".") {
{
if $1.Op == OPACK {
var s *Sym
- s = restrictlookup($3.Name, $1.Pkg);
+ s = restrictlookup($3.Name, $1.Name.Pkg);
$1.Used = true;
$$ = oldname(s);
break;
{
if $1.Op == OPACK {
var s *Sym
- s = restrictlookup($3.Name, $1.Pkg);
+ s = restrictlookup($3.Name, $1.Name.Pkg);
$1.Used = true;
$$ = oldname(s);
break;
pkg = localpkg;
} else {
$1.Def.Used = true;
- pkg = $1.Def.Pkg;
+ pkg = $1.Def.Name.Pkg;
}
$$ = restrictlookup($3.Name, pkg);
}
// errors if a conflicting top-level name is
// introduced by a different file.
if !s.Def.Used && nsyntaxerrors == 0 {
- pkgnotused(int(s.Def.Lineno), s.Def.Pkg.Path, s.Name)
+ pkgnotused(int(s.Def.Lineno), s.Def.Name.Pkg.Path, s.Name)
}
s.Def = nil
continue
// throw away top-level name left over
// from previous import . "x"
if s.Def.Name != nil && s.Def.Name.Pack != nil && !s.Def.Name.Pack.Used && nsyntaxerrors == 0 {
- pkgnotused(int(s.Def.Name.Pack.Lineno), s.Def.Name.Pack.Pkg.Path, "")
+ pkgnotused(int(s.Def.Name.Pack.Lineno), s.Def.Name.Pack.Name.Pkg.Path, "")
s.Def.Name.Pack.Used = true
}
case ONAME:
n.Name = new(Name)
n.Param = new(Param)
- case OLABEL:
+ case OLABEL, OPACK:
n.Name = new(Name)
case ODCLFIELD:
n.Param = new(Param)
Curfn *Node // function for local variables
Param *Param
- // OPACK
- Pkg *Pkg
-
// Escape analysis.
Escflowsrc *NodeList // flow(this, src)
Escretval *NodeList // on OCALLxxx, list of dummy return values
Hasbreak bool // has break statement
}
-// Name holds Node fields used only by ONAME nodes.
+// Name holds Node fields used only by named nodes (ONAME, OPACK, some OLITERAL).
type Name struct {
Pack *Node // real package for import . names
+ Pkg *Pkg // pkg for OPACK nodes
Heapaddr *Node // temp holding heap address of param
Inlvar *Node // ONAME substitute while inlining
Defn *Node // initializing assignment
pack := Nod(OPACK, nil, nil)
pack.Sym = my
- pack.Pkg = ipkg
+ pack.Name.Pkg = ipkg
pack.Lineno = int32(yyDollar[1].i)
if strings.HasPrefix(my.Name, ".") {
{
if yyDollar[1].node.Op == OPACK {
var s *Sym
- s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Pkg)
+ s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Name.Pkg)
yyDollar[1].node.Used = true
yyVAL.node = oldname(s)
break
{
if yyDollar[1].node.Op == OPACK {
var s *Sym
- s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Pkg)
+ s = restrictlookup(yyDollar[3].sym.Name, yyDollar[1].node.Name.Pkg)
yyDollar[1].node.Used = true
yyVAL.node = oldname(s)
break
pkg = localpkg
} else {
yyDollar[1].sym.Def.Used = true
- pkg = yyDollar[1].sym.Def.Pkg
+ pkg = yyDollar[1].sym.Def.Name.Pkg
}
yyVAL.sym = restrictlookup(yyDollar[3].sym.Name, pkg)
}