Documentation
¶
Overview ¶
Package registry provides a plugin architecture for registering Scheme primitives.
The registry allows extensions to register primitives that are applied to environments at initialization time. Primitives can be registered for different phases: runtime, expand-time, and compile-time.
Key Types ¶
- Registry: central store for primitive registrations
- PrimitiveSpec: defines a single primitive (name, params, implementation)
- Phase: bit flags controlling environment placement (Runtime, Expand, Compile)
- Extension: interface for modular primitive packages
Registration ¶
reg := registry.NewRegistry()
reg.AddPrimitives([]registry.PrimitiveSpec{
{Name: "my-func", ParamCount: 1, Impl: myFuncImpl},
}, registry.PhaseRuntime|registry.PhaseExpand)
Application ¶
After registration, apply the registry to an environment:
err := reg.Apply(ctx, env)
Extensions ¶
Extensions implement the Extension interface and can be composed:
var Extension = registry.NewExtension("myext", AddToRegistry)
The RegistryBuilder type provides a convenient way to compose multiple registration functions into a single extension.
Index ¶
- type ApplyContext
- type Extension
- type ExtensionFunc
- type InitFunc
- type Phase
- type PrimitiveRegistration
- type PrimitiveSpec
- type Registry
- func (p *Registry) AddBinding(name string)
- func (p *Registry) AddBindings(names []string)
- func (p *Registry) AddInitFunc(f InitFunc)
- func (p *Registry) AddMacroSource(source string)
- func (p *Registry) AddPrimitive(spec PrimitiveSpec, phases Phase)
- func (p *Registry) AddPrimitives(specs []PrimitiveSpec, phases Phase)
- func (p *Registry) Apply(ctx context.Context, env *environment.EnvironmentFrame) error
- func (p *Registry) BindingCount() int
- func (p *Registry) Bindings() []string
- func (p *Registry) Clone() *Registry
- func (p *Registry) InitFuncs() []InitFunc
- func (p *Registry) MacroSources() []string
- func (p *Registry) PrimitiveCount() int
- func (p *Registry) Primitives() []PrimitiveRegistration
- type RegistryBuilder
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ApplyContext ¶
type ApplyContext interface {
Environment() *environment.EnvironmentFrame
}
ApplyContext provides context during registry application.
type Extension ¶
type Extension interface {
// Name returns the extension name for logging/debugging.
Name() string
// AddToRegistry registers primitives with the registry.
AddToRegistry(r *Registry) error
}
Extension represents a loadable extension that adds primitives to a registry.
type ExtensionFunc ¶
type ExtensionFunc struct {
// contains filtered or unexported fields
}
ExtensionFunc adapts a function to the Extension interface.
func (*ExtensionFunc) AddToRegistry ¶
func (p *ExtensionFunc) AddToRegistry(r *Registry) error
AddToRegistry registers primitives with the registry.
type InitFunc ¶
type InitFunc func(ApplyContext) error
InitFunc is called after primitives are registered.
type Phase ¶
type Phase int
Phase indicates when a primitive is available.
func (Phase) HasCompile ¶
HasCompile returns true if the phase includes compile time.
func (Phase) HasRuntime ¶
HasRuntime returns true if the phase includes runtime.
type PrimitiveRegistration ¶
type PrimitiveRegistration struct {
Spec PrimitiveSpec
Phases Phase
}
PrimitiveRegistration holds a primitive and its phases.
type PrimitiveSpec ¶
type PrimitiveSpec struct {
Name string
ParamCount int
IsVariadic bool
Impl machine.ForeignFunction
}
PrimitiveSpec defines a primitive to be registered.
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry is the central registry for primitives.
func (*Registry) AddBinding ¶
AddBinding registers a compile-time only binding (no runtime value).
func (*Registry) AddBindings ¶
AddBindings registers multiple compile-time only bindings.
func (*Registry) AddInitFunc ¶
AddInitFunc registers an initialization function.
func (*Registry) AddMacroSource ¶
AddMacroSource adds Scheme source code for bootstrap macros.
func (*Registry) AddPrimitive ¶
func (p *Registry) AddPrimitive(spec PrimitiveSpec, phases Phase)
AddPrimitive registers a primitive with the given phases.
func (*Registry) AddPrimitives ¶
func (p *Registry) AddPrimitives(specs []PrimitiveSpec, phases Phase)
AddPrimitives registers multiple primitives with the given phases.
func (*Registry) Apply ¶
func (p *Registry) Apply(ctx context.Context, env *environment.EnvironmentFrame) error
Apply registers all primitives and runs init functions on an environment.
func (*Registry) BindingCount ¶
BindingCount returns the number of compile-time bindings.
func (*Registry) MacroSources ¶
MacroSources returns copies of macro source strings.
func (*Registry) PrimitiveCount ¶
PrimitiveCount returns the number of registered primitives.
func (*Registry) Primitives ¶
func (p *Registry) Primitives() []PrimitiveRegistration
Primitives returns a copy of the primitive registrations.
type RegistryBuilder ¶
RegistryBuilder collects functions that add primitives to a registry.
func NewRegistryBuilder ¶
func NewRegistryBuilder(funcs ...func(*Registry) error) RegistryBuilder
NewRegistryBuilder creates a builder with the given registration functions.
func (RegistryBuilder) AddToRegistry ¶
func (p RegistryBuilder) AddToRegistry(r *Registry) error
AddToRegistry applies all registration functions to the registry.
func (RegistryBuilder) Build ¶
func (p RegistryBuilder) Build() (*Registry, error)
Build creates a new registry and applies all registration functions.
func (*RegistryBuilder) Register ¶
func (p *RegistryBuilder) Register(funcs ...func(*Registry) error)
Register adds registration functions to the builder.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package core provides the essential primitives required for Scheme to function.
|
Package core provides the essential primitives required for Scheme to function. |
|
Package helpers provides shared utility functions for primitive implementations.
|
Package helpers provides shared utility functions for primitive implementations. |
|
Package testhelpers provides shared test infrastructure for Scheme primitive tests.
|
Package testhelpers provides shared test infrastructure for Scheme primitive tests. |