compiler: Fix interface analysis (oops!)
Этот коммит содержится в:
		
							родитель
							
								
									0d1b7239c1
								
							
						
					
					
						коммит
						808cb991af
					
				
					 1 изменённых файлов: 9 добавлений и 5 удалений
				
			
		
							
								
								
									
										14
									
								
								analysis.go
									
										
									
									
									
								
							
							
						
						
									
										14
									
								
								analysis.go
									
										
									
									
									
								
							| 
						 | 
					@ -2,6 +2,8 @@
 | 
				
			||||||
package main
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"go/types"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"golang.org/x/tools/go/ssa"
 | 
						"golang.org/x/tools/go/ssa"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -35,8 +37,10 @@ func (a *Analysis) AddPackage(pkg *ssa.Package) {
 | 
				
			||||||
			a.addFunction(member)
 | 
								a.addFunction(member)
 | 
				
			||||||
		case *ssa.Type:
 | 
							case *ssa.Type:
 | 
				
			||||||
			ms := pkg.Prog.MethodSets.MethodSet(member.Type())
 | 
								ms := pkg.Prog.MethodSets.MethodSet(member.Type())
 | 
				
			||||||
			for i := 0; i < ms.Len(); i++ {
 | 
								if !types.IsInterface(member.Type()) {
 | 
				
			||||||
				a.addFunction(pkg.Prog.MethodValue(ms.At(i)))
 | 
									for i := 0; i < ms.Len(); i++ {
 | 
				
			||||||
 | 
										a.addFunction(pkg.Prog.MethodValue(ms.At(i)))
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -118,9 +122,9 @@ func (a *Analysis) AnalyseBlockingRecursive() {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Check whether we need a scheduler. This is only necessary when there are go
 | 
					// Check whether we need a scheduler. A scheduler is only necessary when there
 | 
				
			||||||
// calls that start blocking functions (if they're not blocking, the go function
 | 
					// are go calls that start blocking functions (if they're not blocking, the go
 | 
				
			||||||
// can be turned into a regular function call).
 | 
					// function can be turned into a regular function call).
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// Depends on AnalyseBlockingRecursive.
 | 
					// Depends on AnalyseBlockingRecursive.
 | 
				
			||||||
func (a *Analysis) AnalyseGoCalls() {
 | 
					func (a *Analysis) AnalyseGoCalls() {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Загрузка…
	
	Создание таблицы
		
		Сослаться в новой задаче