aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/llgcode/ps/operators_conflict.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/llgcode/ps/operators_conflict.go')
-rw-r--r--vendor/github.com/llgcode/ps/operators_conflict.go96
1 files changed, 96 insertions, 0 deletions
diff --git a/vendor/github.com/llgcode/ps/operators_conflict.go b/vendor/github.com/llgcode/ps/operators_conflict.go
new file mode 100644
index 0000000..9716202
--- /dev/null
+++ b/vendor/github.com/llgcode/ps/operators_conflict.go
@@ -0,0 +1,96 @@
+package ps
+
+import (
+ "fmt"
+ "log"
+)
+
+// dictionary copy conflict with stack copy
+// type dicriminant
+func commonCopy(interpreter *Interpreter) {
+ switch v := interpreter.Peek().(type) {
+ case float64:
+ 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))
+}