• Austin Clements's avatar
    runtime: avoid repeated findmoduledatap calls · 0efc8b21
    Austin Clements authored
    Currently almost every function that deals with a *_func has to first
    look up the *moduledata for the module containing the function's entry
    point. This means we almost always do at least two identical module
    lookups whenever we deal with a *_func (one to get the *_func and
    another to get something from its module data) and sometimes several
    more.
    
    Fix this by making findfunc return a new funcInfo type that embeds
    *_func, but also includes the *moduledata, and making all of the
    functions that currently take a *_func instead take a funcInfo and use
    the already-found *moduledata.
    
    This transformation is trivial for the most part, since the *_func
    type is usually inferred. The annoying part is that we can no longer
    use nil to indicate failure, so this introduces a funcInfo.valid()
    method and replaces nil checks with calls to valid.
    
    Change-Id: I9b8075ef1c31185c1943596d96dec45c7ab5100f
    Reviewed-on: https://go-review.googlesource.com/37331
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarMichael Hudson-Doyle <michael.hudson@canonical.com>
    0efc8b21
trace.go 32.5 KB