Commit 2d7cb295 authored by LE Manh Cuong's avatar LE Manh Cuong Committed by Keith Randall

cmd/compile: clarify the difference between types.Sym and obj.LSym

Both types.Sym and obj.LSym have the field Name, and that field is
widely used in compiler source. It can lead to confusion that when to
use which one.

So, adding documentation for clarifying the difference between them,
eliminate the confusion, or at least, make the code which use them
clearer for the reader.

See https://github.com/golang/go/issues/31252#issuecomment-481929174

Change-Id: I31f7fc6e4de4cf68f67ab2e3a385a7f451c796f5
Reviewed-on: https://go-review.googlesource.com/c/go/+/175019Reviewed-by: default avatarKeith Randall <khr@golang.org>
Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
parent ab724d43
...@@ -280,7 +280,7 @@ func (n *Node) isMethodExpression() bool { ...@@ -280,7 +280,7 @@ func (n *Node) isMethodExpression() bool {
return n.Op == ONAME && n.Left != nil && n.Left.Op == OTYPE && n.Right != nil && n.Right.Op == ONAME return n.Op == ONAME && n.Left != nil && n.Left.Op == OTYPE && n.Right != nil && n.Right.Op == ONAME
} }
// funcname returns the name of the function n. // funcname returns the name (without the package) of the function n.
func (n *Node) funcname() string { func (n *Node) funcname() string {
if n == nil || n.Func == nil || n.Func.Nname == nil { if n == nil || n.Func == nil || n.Func.Nname == nil {
return "<nil>" return "<nil>"
......
...@@ -11,14 +11,20 @@ import ( ...@@ -11,14 +11,20 @@ import (
"unicode/utf8" "unicode/utf8"
) )
// Sym represents an object name. Most commonly, this is a Go identifier naming // Sym represents an object name in a segmented (pkg, name) namespace.
// an object declared within a package, but Syms are also used to name internal // Most commonly, this is a Go identifier naming an object declared within a package,
// synthesized objects. // but Syms are also used to name internal synthesized objects.
// //
// As an exception, field and method names that are exported use the Sym // As an exception, field and method names that are exported use the Sym
// associated with localpkg instead of the package that declared them. This // associated with localpkg instead of the package that declared them. This
// allows using Sym pointer equality to test for Go identifier uniqueness when // allows using Sym pointer equality to test for Go identifier uniqueness when
// handling selector expressions. // handling selector expressions.
//
// Ideally, Sym should be used for representing Go language constructs,
// while cmd/internal/obj.LSym is used for representing emitted artifacts.
//
// NOTE: In practice, things can be messier than the description above
// for various reasons (historical, convenience).
type Sym struct { type Sym struct {
Importdef *Pkg // where imported definition was found Importdef *Pkg // where imported definition was found
Linkname string // link name Linkname string // link name
......
...@@ -377,6 +377,7 @@ const ( ...@@ -377,6 +377,7 @@ const (
) )
// An LSym is the sort of symbol that is written to an object file. // An LSym is the sort of symbol that is written to an object file.
// It represents Go symbols in a flat pkg+"."+name namespace.
type LSym struct { type LSym struct {
Name string Name string
Type objabi.SymKind Type objabi.SymKind
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment