#ifndef _PRIMITIVES_H_
#define _PRIMITIVES_H_

typedef T_OBJECT (*t_primitive_fun )(t_stackpointer );

struct primitive_def {
  char*           name; /* Name der Primitiven  */
  int             args; /* Anzahl der Argumente */
  t_primitive_fun fun;  /* Primitive Funktion   */
};



T_OBJECT prim_class             (t_stackpointer stackpointer);
T_OBJECT prim_set_class         (t_stackpointer stackpointer);

T_OBJECT prim_add               (t_stackpointer stackpointer);
T_OBJECT prim_mul               (t_stackpointer stackpointer);
T_OBJECT prim_div               (t_stackpointer stackpointer);
T_OBJECT prim_minus             (t_stackpointer stackpointer);
T_OBJECT prim_sys_less          (t_stackpointer stackpointer);
T_OBJECT prim_print_number      (t_stackpointer stackpointer);
T_OBJECT prim_print_string      (t_stackpointer stackpointer);
T_OBJECT prim_print_symbol      (t_stackpointer stackpointer);
T_OBJECT prim_sys_slot_n        (t_stackpointer stackpointer);
T_OBJECT prim_sys_set_slot_n    (t_stackpointer stackpointer);
T_OBJECT prim_sys_new_vector    (t_stackpointer stackpointer);
T_OBJECT prim_sys_vector_length (t_stackpointer stackpointer);
T_OBJECT prim_sys_eq            (t_stackpointer stackpointer);
T_OBJECT prim_print_adress      (t_stackpointer stackpointer);

T_OBJECT prim_sys_class_for     (t_stackpointer stackpointer);
T_OBJECT prim_sys_register_class(t_stackpointer stackpointer);

T_OBJECT prim_sys_concat_string (t_stackpointer stackpointer);

T_OBJECT prim_sys_read_file     (t_stackpointer stackpointer);
T_OBJECT prim_sys_hash_id       (t_stackpointer stackpointer);
T_OBJECT prim_sys_as_symbol     (t_stackpointer stackpointer);
T_OBJECT prim_sys_exit          (t_stackpointer stackpointer);

T_OBJECT prim_sys_set_global_value (t_stackpointer stackpointer);
T_OBJECT prim_sys_global_value     (t_stackpointer stackpointer);

T_OBJECT prim_sys_throw         (t_stackpointer stackpointer);

T_OBJECT prim_sys_find_errorhandler (t_stackpointer stackpointer);
T_OBJECT prim_sys_perform           (t_stackpointer stackpointer);
T_OBJECT prim_sys_traceback         (t_stackpointer stackpointer);

T_OBJECT prim_sys_sub_seq           (t_stackpointer stackpointer);
T_OBJECT prim_sys_new_string        (t_stackpointer stackpointer);


#endif
