// Copyright 2010 The postscript-go Authors. All rights reserved.
// created: 13/12/2010 by Laurent Le Goff

package postscript

type OperatorFunc func(interpreter *Interpreter)

type PrimitiveOperator struct {
	f OperatorFunc
}

func NewOperator(f OperatorFunc) *PrimitiveOperator {
	return &PrimitiveOperator{f}
}

func (o *PrimitiveOperator) Execute(interpreter *Interpreter) {
	o.f(interpreter)
}


func save(interpreter *Interpreter) {
	interpreter.Push("VM Snapshot")
}

func restore(interpreter *Interpreter) {
	interpreter.Pop()
}


func initSystemOperators(interpreter *Interpreter) {
	interpreter.SystemDefine("save", NewOperator(save))
	interpreter.SystemDefine("restore", NewOperator(restore))
	initStackOperator(interpreter)
	initMathOperators(interpreter)
	initArrayOperators(interpreter)
	initDictionaryOperators(interpreter)
	initRelationalOperators(interpreter)
	initControlOperators(interpreter)
	initMiscellaneousOperators(interpreter)
	initDrawingOperators(interpreter)

	initConflictingOperators(interpreter)
}
