func UndefinedObject() Object {
	return Object{
		Type: ObjectTypeLiteral,
		Value: STNode{
			Head: UNDEFINED,
			Type: STNodeTypeIdentifier,
		},
	}
}
UndefinedObject: Produce the UNDEFINED identifier object.
Used because structs and other data structures are mutable by default and cannot
be stored in consts
this function returns the UNDEFINED Object
package golsp
import (
	"fmt"
	"strconv"
	"errors"
)
type STNodeType int
const (
	STNodeTypeScope STNodeType = 0
	STNodeTypeExpression STNodeType = 1
	STNodeTypeStringLiteral STNodeType = 2
	STNodeTypeNumberLiteral STNodeType = 3
	STNodeTypeList STNodeType = 4
	STNodeTypeMap STNodeType = 5
	STNodeTypeIdentifier STNodeType = 6
	STNodeTypeComment STNodeType = 7
)
type STNode struct {
	Head string
	Type STNodeType
	Children []STNode
	Spread bool
	Zip *STNode
	Dot *STNode
}
type Scope struct {
	Parent *Scope
	Identifiers map[string]Object
	Constants map[string]bool
}
type BuiltinFunction func(Scope, []Object) Object
type Function struct {
	Name string
	FunctionPatterns [][]STNode
	FunctionBodies []STNode
	BuiltinFunc BuiltinFunction
}
type ObjectType int
const (
	ObjectTypeBuiltinArgument ObjectType = -1
	ObjectTypeLiteral ObjectType = 0
	ObjectTypeFunction ObjectType = 1
	ObjectTypeList ObjectType = 2
	ObjectTypeMap ObjectType = 3
)
type Object struct {
	Scope Scope
	Type ObjectType
	Function Function
	Value STNode
	Elements List
	Map map[string]Object
	MapKeys []Object
}
func BuiltinFunctionObject(name string, fn BuiltinFunction) Object {
	return Object{
		Type: ObjectTypeFunction,
		Function: Function{Name: name, BuiltinFunc: fn},
	}
}