aboutsummaryrefslogtreecommitdiffhomepage
path: root/compiler
diff options
context:
space:
mode:
authorAyke van Laethem <[email protected]>2023-05-19 15:24:28 +0200
committerRon Evans <[email protected]>2023-05-20 11:24:20 +0200
commit6dba16f28e4a5fb0f0d856309acb3c4ecfbaf3c5 (patch)
treecb27ca1969a2d865f8570e6306ae6838629ff06e /compiler
parentb336a1561f6be666e093a6e3b93e1f9590e6cdd2 (diff)
downloadtinygo-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.go16
-rw-r--r--compiler/symbol.go4
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
}