#include <stddef.h>
#include <assert.h>

#include "sysdep.h"
#include "verbP.h"

AlVerb AlVerb_create(exec_fun, min_args, max_args, def_args)
     AlVerb_ExecutionFunc exec_fun;
     unsigned int min_args, max_args, def_args;
{
  AlVerb_rep *temp = create();

  assert(def_args >= min_args && max_args >= def_args);
  temp->exec_func = exec_fun;
  temp->min_args = min_args;
  temp->max_args = max_args;
  temp->def_args = def_args;
  return raise(temp);
}

unsigned int AlVerb_min_args(verb)
     AlVerb verb;
{
  assert(verb != NULL);
  return lower(verb)->min_args;
}

unsigned int AlVerb_max_args(verb)
     AlVerb verb;
{
  assert(verb != NULL);
  return lower(verb)->max_args;
}

unsigned int AlVerb_def_args(verb)
     AlVerb verb;
{
  assert(verb != NULL);
  return lower(verb)->def_args;
}

AlVerb_ExecutionFunc AlVerb_exec_func(verb)
     AlVerb verb;
{
  assert(verb != NULL);
  return lower(verb)->exec_func;
}
