diff options
author | Ayke van Laethem <[email protected]> | 2023-05-19 15:24:28 +0200 |
---|---|---|
committer | Ron Evans <[email protected]> | 2023-05-20 11:24:20 +0200 |
commit | 6dba16f28e4a5fb0f0d856309acb3c4ecfbaf3c5 (patch) | |
tree | cb27ca1969a2d865f8570e6306ae6838629ff06e /compiler | |
parent | b336a1561f6be666e093a6e3b93e1f9590e6cdd2 (diff) | |
download | tinygo-6dba16f28e4a5fb0f0d856309acb3c4ecfbaf3c5.tar.gz tinygo-6dba16f28e4a5fb0f0d856309acb3c4ecfbaf3c5.zip |
compiler: only calculate functionInfo once
This is a small change that's not really important in itself, but it
avoids duplicate errors in a future commit that adds error messages to
//go:wasmimport.
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/compiler.go | 16 | ||||
-rw-r--r-- | compiler/symbol.go | 4 |
2 files changed, 13 insertions, 7 deletions
diff --git a/compiler/compiler.go b/compiler/compiler.go index 453335e9f..09f11e614 100644 --- a/compiler/compiler.go +++ b/compiler/compiler.go @@ -82,6 +82,7 @@ type compilerContext struct { uintptrType llvm.Type program *ssa.Program diagnostics []error + functionInfos map[*ssa.Function]functionInfo astComments map[string]*ast.CommentGroup embedGlobals map[string][]*loader.EmbedFile pkg *types.Package @@ -93,13 +94,14 @@ type compilerContext struct { // importantly with a newly created LLVM context and module. func newCompilerContext(moduleName string, machine llvm.TargetMachine, config *Config, dumpSSA bool) *compilerContext { c := &compilerContext{ - Config: config, - DumpSSA: dumpSSA, - difiles: make(map[string]llvm.Metadata), - ditypes: make(map[types.Type]llvm.Metadata), - machine: machine, - targetData: machine.CreateTargetData(), - astComments: map[string]*ast.CommentGroup{}, + Config: config, + DumpSSA: dumpSSA, + difiles: make(map[string]llvm.Metadata), + ditypes: make(map[types.Type]llvm.Metadata), + machine: machine, + targetData: machine.CreateTargetData(), + functionInfos: map[*ssa.Function]functionInfo{}, + astComments: map[string]*ast.CommentGroup{}, } c.ctx = llvm.NewContext() diff --git a/compiler/symbol.go b/compiler/symbol.go index de7838173..7d9fcc2ff 100644 --- a/compiler/symbol.go +++ b/compiler/symbol.go @@ -239,12 +239,16 @@ func (c *compilerContext) getFunction(fn *ssa.Function) (llvm.Type, llvm.Value) // present in *ssa.Function, such as the link name and whether it should be // exported. func (c *compilerContext) getFunctionInfo(f *ssa.Function) functionInfo { + if info, ok := c.functionInfos[f]; ok { + return info + } info := functionInfo{ // Pick the default linkName. linkName: f.RelString(nil), } // Check for //go: pragmas, which may change the link name (among others). info.parsePragmas(f) + c.functionInfos[f] = info return info } |