Esempio n. 1
0
Value *
IfElseFn (const char *name, State * state, int argc, Expr * argv[])
{
  if (argc != 2 && argc != 3)
	  {
	    free (state->errmsg);
	    state->errmsg = strdup ("ifelse expects 2 or 3 arguments");
	    return NULL;
	  }
  char *cond = Evaluate (state, argv[0]);

  if (cond == NULL)
	  {
	    return NULL;
	  }

  if (BooleanString (cond) == true)
	  {
	    free (cond);
	    return EvaluateValue (state, argv[1]);
	  }
  else
	  {
	    if (argc == 3)
		    {
		      free (cond);
		      return EvaluateValue (state, argv[2]);
		    }
	    else
		    {
		      return StringValue (cond);
		    }
	  }
}
Esempio n. 2
0
Value *
SequenceFn (const char *name, State * state, int argc, Expr * argv[])
{
  Value *left = EvaluateValue (state, argv[0]);

  if (left == NULL)
    return NULL;
  FreeValue (left);
  return EvaluateValue (state, argv[1]);
}
Esempio n. 3
0
// Evaluate the expressions in argv, giving 'count' Value* (the ... is
// zero or more Value** to put them in).  If any expression evaluates
// to NULL, free the rest and return -1.  Return 0 on success.
int
ReadValueArgs (State * state, Expr * argv[], int count, ...)
{
  Value **args = malloc (count * sizeof (Value *));
  va_list v;

  va_start (v, count);
  int i;

  for (i = 0; i < count; ++i)
	  {
	    args[i] = EvaluateValue (state, argv[i]);
	    if (args[i] == NULL)
		    {
		      va_end (v);
		      int j;

		      for (j = 0; j < i; ++j)
			      {
				FreeValue (args[j]);
			      }
		      free (args);
		      return -1;
		    }
	    *(va_arg (v, Value **)) = args[i];
	  }
  va_end (v);
  free (args);
  return 0;
}
Value* LogicalOrFn(const char* name, State* state,
                   int argc, Expr* argv[]) {
    char* left = Evaluate(state, argv[0]);
    if (left == NULL) return NULL;
    if (BooleanString(left) == false) {
        free(left);
        return EvaluateValue(state, argv[1]);
    } else {
        return StringValue(left);
    }
}
Esempio n. 5
0
/*
 * Evaluate
 *--------------------------------------------------
 *  Pre:
 *  Post:
 *--------------------------------------------------
 */
void Hand::Evaluate(){
	
	sort(hand.begin(), hand.end(), CardComparer());
	EvaluateType();
	EvaluateValue();
}