loader: use name "main" for the main package
This should make exported names a bit more consistent. I believe there was a bug report for this issue, but I can't easily find it. In any case, I think it's an important improvement to match the behavior of the Go toolchain.
Этот коммит содержится в:
		
							родитель
							
								
									c4d642007e
								
							
						
					
					
						коммит
						dbc438b2ae
					
				
					 2 изменённых файлов: 13 добавлений и 3 удалений
				
			
		
							
								
								
									
										4
									
								
								ir/ir.go
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								ir/ir.go
									
										
									
									
									
								
							|  | @ -67,7 +67,7 @@ func NewProgram(lprogram *loader.Program) *Program { | |||
| 	program := lprogram.LoadSSA() | ||||
| 	program.Build() | ||||
| 
 | ||||
| 	mainPkg := program.ImportedPackage(lprogram.MainPkg().ImportPath) | ||||
| 	mainPkg := program.Package(lprogram.MainPkg().Pkg) | ||||
| 	if mainPkg == nil { | ||||
| 		panic("could not find main package") | ||||
| 	} | ||||
|  | @ -79,7 +79,7 @@ func NewProgram(lprogram *loader.Program) *Program { | |||
| 	} | ||||
| 
 | ||||
| 	for _, pkg := range lprogram.Sorted() { | ||||
| 		p.AddPackage(program.ImportedPackage(pkg.ImportPath)) | ||||
| 		p.AddPackage(program.Package(pkg.Pkg)) | ||||
| 	} | ||||
| 
 | ||||
| 	return p | ||||
|  |  | |||
|  | @ -43,6 +43,7 @@ type Program struct { | |||
| type PackageJSON struct { | ||||
| 	Dir        string | ||||
| 	ImportPath string | ||||
| 	Name       string | ||||
| 	ForTest    string | ||||
| 
 | ||||
| 	// Source files | ||||
|  | @ -335,7 +336,16 @@ func (p *Package) Check() error { | |||
| 	// Do typechecking of the package. | ||||
| 	checker.Importer = p | ||||
| 
 | ||||
| 	typesPkg, err := checker.Check(p.ImportPath, p.program.fset, p.Files, &p.info) | ||||
| 	packageName := p.ImportPath | ||||
| 	if p.Name == "main" { | ||||
| 		// The main package normally has a different import path, such as | ||||
| 		// "command-line-arguments" or "./testdata/cgo". Therefore, use the name | ||||
| 		// "main" in such a case: this package isn't imported from anywhere. | ||||
| 		// This is safe as it isn't possible to import a package with the name | ||||
| 		// "main". | ||||
| 		packageName = "main" | ||||
| 	} | ||||
| 	typesPkg, err := checker.Check(packageName, p.program.fset, p.Files, &p.info) | ||||
| 	if err != nil { | ||||
| 		if err, ok := err.(Errors); ok { | ||||
| 			return err | ||||
|  |  | |||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче
	
	 Ayke van Laethem
						Ayke van Laethem