Giter Club home page Giter Club logo

Comments (5)

WAY29 avatar WAY29 commented on May 25, 2024

Hope for more Information about this technique. Maybe a detailed article?

from xgo.

xhd2015 avatar xhd2015 commented on May 25, 2024

I will add materials on this issue thread to supplement the design document.

from xgo.

xhd2015 avatar xhd2015 commented on May 25, 2024

A new gained technique: declare init bodies.

Description: the following code always panics no matter you have deleted __xgo_link_generate_init_regs_body 's body or replaced it with completely new contents.

The only difference with other linking names is that it is called from init.

So the best practice is to not include that panic.

However, in user written code there are also cases where a linked method is called from init, but they are all fine with a panic.

Still needs to dig into this.

func init() {
	__xgo_link_generate_init_regs_body()
}

func __xgo_link_generate_init_regs_body() {
	panic("failed to link __xgo_link_generate_init_regs_body")
}

See d6c2b3d#diff-61c14e77880a87918b0cf686da52025d4e0abdd7b94047196c7baf56eb59ce9fR35

from xgo.

xhd2015 avatar xhd2015 commented on May 25, 2024

the trap.Inspect(fn) implements a way to retrieve func info.
It has different internal paths for these function types:

  • package level function
    • PC lookup
  • struct method
    • -fm suffix check
    • struct.method proto existence check
    • dynamic retrieval
  • interface method
    • -fm suffix check
    • interface proto existence check
    • dynamic retrieval
  • closure
    • closure is registered using IR
    • PC lookup
  • generic function
    • fullName parsing to de-generic
    • generic template existence check
    • no dynamic retrieval since no recv, but is legal to do so
  • generic struct method
    • -fm suffix check
    • fullName parsing to de-generic
    • generic method template existence check
    • dynamic retrieval just for receiver
  • generic interface method
    • to be supported

from xgo.

xhd2015 avatar xhd2015 commented on May 25, 2024

the trap.Inspect(fn) implements a way to retrieve func info.
It has different internal paths for these function types:

As a result, xgo exposes a single powerful Mock API to users, because it handle these cases smartly. Hiding most complexity from users. All mock can be done in single unified form:

// package level func
mock.Mock(SomeFunc, interceptor)

// per-instance method
// only the bound instance `v` will be mocked
// `v` can be either a struct or an interface
mock.Mock(v.Method, interceptor)

// per-TParam generic function
// only the specified `int` version will be mocked
mock.Mock(GenericFunc[int], interceptor)

// per TParam and instance generic method
v := GenericStruct[int]
mock.Mock(v.Method, interceptor)

// closure can also be mocked
// less used, but also supported
mock.Mock(closure, interceptor)

However, behind the scene, this topic deserves a good description.

from xgo.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.