+tSpiderValue *AST_ExecuteNode_UniOp(tSpiderScript *Script, tAST_Node *Node, int Operation, tSpiderValue *Value)
+{
+ tSpiderValue *ret;
+ #if 0
+ if( Value->Type == SS_DATATYPE_OBJECT )
+ {
+ const char *fcnname;
+ switch(Operation)
+ {
+ case NODETYPE_NEGATE: fcnname = "-ve"; break;
+ case NODETYPE_BWNOT: fcnname = "~"; break;
+ default: fcnname = NULL; break;
+ }
+
+ if( fcnname )
+ {
+ ret = Object_ExecuteMethod(Value->Object, fcnname, );
+ if( ret != ERRPTR )
+ return ret;
+ }
+ }
+ #endif
+ switch(Value->Type)
+ {
+ // Integer Operations
+ case SS_DATATYPE_INTEGER:
+ if( Value->ReferenceCount == 1 )
+ SpiderScript_ReferenceValue(ret = Value);
+ else
+ ret = SpiderScript_CreateInteger(0);
+ switch(Operation)
+ {
+ case NODETYPE_NEGATE: ret->Integer = -Value->Integer; break;
+ case NODETYPE_BWNOT: ret->Integer = ~Value->Integer; break;
+ default:
+ AST_RuntimeError(Node, "SpiderScript internal error: Exec,UniOP,Integer unknown op %i", Operation);
+ SpiderScript_DereferenceValue(ret);
+ ret = ERRPTR;
+ break;
+ }
+ break;
+ // Real number Operations
+ case SS_DATATYPE_REAL:
+ switch(Operation)
+ {
+ case NODETYPE_NEGATE: ret = SpiderScript_CreateInteger( -Value->Real ); break;
+ default:
+ AST_RuntimeError(Node, "SpiderScript internal error: Exec,UniOP,Real unknown op %i", Operation);
+ ret = ERRPTR;
+ break;
+ }
+ break;
+
+ default:
+ AST_RuntimeError(NULL, "Invalid operation (%i) on type (%i)", Operation, Value->Type);
+ ret = ERRPTR;
+ break;
+ }
+
+ return ret;
+}
+
+tSpiderValue *AST_ExecuteNode_BinOp(tSpiderScript *Script, tAST_Node *Node, int Operation, tSpiderValue *Left, tSpiderValue *Right)