general

package
v0.1.3 Latest Latest
Warning

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

Go to latest
Published: Feb 21, 2026 License: MIT Imports: 4 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var GeneralBuiltins = map[string]*object.Builtin{
	"print": {
		Fn: func(node *ast.CallExpression, args ...object.Object) object.Object {
			for i, value := range args {
				fmt.Print(value.Inspect())
				if i < len(args)-1 {
					fmt.Print(" ")
				}
			}
			fmt.Println()
			return nil
		},
	},
	"printf": {
		Fn: func(node *ast.CallExpression, args ...object.Object) object.Object {
			if len(args) < 2 {
				return nil
			}

			formatStr, isFormat := args[0].(*object.String)

			if isFormat && len(args) > 1 && strings.Contains(formatStr.Value, "%") {
				goArgs := make([]any, len(args)-1)
				for i, arg := range args[1:] {
					goArgs[i] = unwrapObject(arg)
				}
				fmt.Printf(formatStr.Value, goArgs...)
				fmt.Println()
			}
			return nil
		},
	},
	"len": {
		Fn: func(node *ast.CallExpression, args ...object.Object) object.Object {
			if len(args) != 1 {
				return object.NewError(node.Line(), node.Column(), "wrong number of arguments. got=%d, want=1", len(args))
			}

			switch arg := args[0].(type) {
			case *object.Array:
				return &object.Integer{Value: int64(len(arg.Elements))}
			case *object.String:
				return &object.Integer{Value: int64(len(arg.Value))}
			default:
				return object.NewError(node.Line(), node.Column(), "argument to `len` not supported, got %s", args[0].Type())
			}
		},
	},
	"typeof": {
		Fn: func(node *ast.CallExpression, args ...object.Object) object.Object {
			if len(args) != 1 {
				return object.NewError(node.Line(), node.Column(), "wrong number of arguments. got=%d, want=1", len(args))
			}
			return &object.String{Value: string(args[0].Type())}
		},
	},
}

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

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