interpreter

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 2, 2026 License: MIT Imports: 16 Imported by: 0

Documentation

Overview

builtins.go installs the MX Script standard library into the global environment. Every native function is registered here so they're available in every .mx program without an import.

Package interpreter is the heart of MX Script. It walks the parsed AST, evaluates expressions, drives the standard library, and (when route declarations are present) starts an HTTP server that dispatches incoming requests to user-defined route bodies.

parse_helper.go wires the interpreter's import statement to the lexer and parser without forcing the consumer of this package to do it themselves.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ParseSource

func ParseSource(src string) (*parser.Program, error)

ParseSource lexes and parses a string of MX Script source code.

Types

type Env

type Env struct {
	// contains filtered or unexported fields
}

func NewEnv

func NewEnv(parent *Env) *Env

func (*Env) Assign

func (e *Env) Assign(name string, v Value)

Assign walks up parents until the variable is found, then replaces it. If not found, defines it in the current scope.

func (*Env) Get

func (e *Env) Get(name string) (Value, bool)

func (*Env) Set

func (e *Env) Set(name string, v Value)

type Function

type Function struct {
	Name    string
	Params  []string
	Body    []parser.Stmt
	Closure *Env
	Native  func(interp *Interpreter, args []Value) (Value, error)
}

type Interpreter

type Interpreter struct {
	// contains filtered or unexported fields
}

func New

func New() *Interpreter

New constructs an interpreter pre-populated with all built-ins.

func (*Interpreter) Run

func (i *Interpreter) Run(prog *parser.Program) error

Run executes a parsed program. If the program declared any routes, it boots an HTTP server and blocks; otherwise it returns once the top-level statements have all been evaluated.

func (*Interpreter) SetFile

func (i *Interpreter) SetFile(path string)

SetFile records the source file path for error messages.

func (*Interpreter) SetPort

func (i *Interpreter) SetPort(p int)

SetPort marks the CLI-provided port. It overrides any port set by the program's `server { port: ... }` block so `mx run --port 3000` always wins.

type MXError

type MXError struct {
	Message string
	Line    int
	Col     int
	File    string
}

MXError is a structured runtime error with file/line context.

func (*MXError) Error

func (e *MXError) Error() string

type OrderedMap

type OrderedMap struct {
	Keys   []string
	Values map[string]Value
}

OrderedMap preserves insertion order of object keys for predictable JSON output.

func NewOrderedMap

func NewOrderedMap() *OrderedMap

func (*OrderedMap) Get

func (o *OrderedMap) Get(k string) (Value, bool)

func (*OrderedMap) Set

func (o *OrderedMap) Set(k string, v Value)

type Response

type Response struct {
	Status      int
	ContentType string
	Body        Value
	Headers     map[string]string
}

type Value

type Value struct {
	Kind     ValueKind
	Bool     bool
	Number   float64
	String   string
	Array    []Value
	Object   *OrderedMap
	Function *Function
	Response *Response
}

func ArrayValue

func ArrayValue(a []Value) Value

func BoolValue

func BoolValue(b bool) Value

func FunctionValue

func FunctionValue(f *Function) Value

func NullValue

func NullValue() Value

Helpers to construct values.

func NumberValue

func NumberValue(n float64) Value

func ObjectValue

func ObjectValue(o *OrderedMap) Value

func ResponseValue

func ResponseValue(r *Response) Value

func StringValue

func StringValue(s string) Value

func (Value) Display

func (v Value) Display() string

String produces a human-readable representation, used by print().

func (Value) IsTruthy

func (v Value) IsTruthy() bool

IsTruthy follows the rules: null/false/0/""/[]/{} are falsy; anything else is truthy.

type ValueKind

type ValueKind int
const (
	KindNull ValueKind = iota
	KindBool
	KindNumber
	KindString
	KindArray
	KindObject
	KindFunction
	KindResponse
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL