Index: trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c
===================================================================
--- trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 40314)
+++ trunk/Ohana/src/opihi/lib.shell/evaluate_stack.c	(revision 40315)
@@ -186,7 +186,28 @@
       got_two_op:
 	if (!status) {
-	  snprintf (line, 512, "syntax error: invalid operand for binary operation: %s or %s\n", stack[i-1].name, stack[i-2].name);
+	  // we are guaranteed to have stack[i-1] and stack[i-2] since i >= 2 (above)
+	  char tmpvector[] = "Temporary Vector";
+	  char tmpmatrix[] = "Temporary Matrix";
+	  
+	  char *name1 = NULL;
+	  if (stack[i-1].name) {
+	    name1 = stack[i-1].name;
+	  } else {
+	    if (stack[i-1].type == ST_VECTOR_TMP) name1 = tmpvector;
+	    if (stack[i-1].type == ST_MATRIX_TMP) name1 = tmpmatrix;
+	  }
+	  char *name2 = NULL;
+	  if (stack[i-2].name) {
+	    name2 = stack[i-2].name;
+	  } else {
+	    if (stack[i-2].type == ST_VECTOR_TMP) name2 = tmpvector;
+	    if (stack[i-2].type == ST_MATRIX_TMP) name2 = tmpmatrix;
+	  }
+
+	  snprintf (line, 512, "syntax error: invalid operand for binary operation: %s or %s\n", name1, name2);
 	  push_error (line);
-	  if (strchr(stack[i-1].name, ':') || strchr(stack[i-2].name, ':')) {
+
+	  // we need to verify that .name exists for both
+	  if ((stack[i-1].name && strchr(stack[i-1].name, ':')) || (stack[i-2].name && strchr(stack[i-2].name, ':'))) {
 	    snprintf (line, 512, "syntax error: invalid operand for binary operation: %s or %s\n(Note that the : in a trinary operation must be protected by spaces)\n", stack[i-1].name, stack[i-2].name);
 	    push_error (line);
