2010-12-13 19:13:10 +00:00
|
|
|
package postscript
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
)
|
|
|
|
|
|
|
|
// dictionary copy conflict with stack copy
|
|
|
|
// type dicriminant
|
|
|
|
func commonCopy(interpreter *Interpreter) {
|
|
|
|
switch v := interpreter.Peek().(type) {
|
2011-02-02 21:38:05 +00:00
|
|
|
case float64:
|
2010-12-13 19:13:10 +00:00
|
|
|
copystack(interpreter)
|
|
|
|
case Dictionary:
|
|
|
|
copydict(interpreter)
|
|
|
|
default:
|
|
|
|
panic(fmt.Sprintf("Not yet implemented: %v copy", v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func commonforall(interpreter *Interpreter) {
|
|
|
|
switch v := interpreter.Get(1).(type) {
|
|
|
|
case Dictionary:
|
|
|
|
foralldict(interpreter)
|
|
|
|
case []Value:
|
|
|
|
forallarray(interpreter)
|
|
|
|
case string:
|
|
|
|
panic("Not yet implemented: string proc forall")
|
|
|
|
default:
|
|
|
|
panic(fmt.Sprintf("Not yet implemented: %v proc forall", v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func length(interpreter *Interpreter) {
|
|
|
|
switch v := interpreter.Peek().(type) {
|
|
|
|
case Dictionary:
|
|
|
|
lengthdict(interpreter)
|
|
|
|
case []Value:
|
|
|
|
lengtharray(interpreter)
|
|
|
|
case string:
|
|
|
|
panic("Not yet implemented: string proc forall")
|
|
|
|
default:
|
|
|
|
panic(fmt.Sprintf("Not yet implemented: %v length", v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func get(interpreter *Interpreter) {
|
|
|
|
switch v := interpreter.Get(1).(type) {
|
|
|
|
case Dictionary:
|
|
|
|
getdict(interpreter)
|
|
|
|
case []Value:
|
|
|
|
getarray(interpreter)
|
|
|
|
case string:
|
|
|
|
panic("Not yet implemented: string proc forall")
|
|
|
|
default:
|
|
|
|
panic(fmt.Sprintf("Not yet implemented: %v index get", v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
func put(interpreter *Interpreter) {
|
|
|
|
switch v := interpreter.Get(2).(type) {
|
|
|
|
case Dictionary:
|
|
|
|
putdict(interpreter)
|
|
|
|
case []Value:
|
|
|
|
putarray(interpreter)
|
|
|
|
case string:
|
|
|
|
panic("Not yet implemented: string proc forall")
|
|
|
|
default:
|
|
|
|
panic(fmt.Sprintf("Not yet implemented: %v index any put", v))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func readonly(interpreter *Interpreter) {
|
|
|
|
log.Println("readonly, not yet implemented")
|
|
|
|
}
|
|
|
|
|
|
|
|
func cvlit(interpreter *Interpreter) {
|
|
|
|
log.Println("cvlit, not yet implemented")
|
|
|
|
}
|
|
|
|
|
|
|
|
func xcheck(interpreter *Interpreter) {
|
|
|
|
value := interpreter.Pop()
|
|
|
|
if _, ok := value.(*ProcedureDefinition); ok {
|
|
|
|
interpreter.Push(true)
|
|
|
|
} else {
|
|
|
|
interpreter.Push(false)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func initConflictingOperators(interpreter *Interpreter) {
|
|
|
|
interpreter.SystemDefine("copy", NewOperator(commonCopy))
|
|
|
|
interpreter.SystemDefine("forall", NewOperator(commonforall))
|
|
|
|
interpreter.SystemDefine("length", NewOperator(length))
|
|
|
|
interpreter.SystemDefine("get", NewOperator(get))
|
|
|
|
interpreter.SystemDefine("put", NewOperator(put))
|
|
|
|
interpreter.SystemDefine("readonly", NewOperator(readonly))
|
|
|
|
interpreter.SystemDefine("cvlit", NewOperator(cvlit))
|
|
|
|
interpreter.SystemDefine("xcheck", NewOperator(xcheck))
|
|
|
|
}
|