You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

gen.h 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #ifndef L2_GEN_H
  2. #define L2_GEN_H
  3. #include "../io.h"
  4. #include "../strset.h"
  5. #include "../bytecode.h"
  6. struct l2_generator_string {
  7. l2_word length;
  8. l2_word pos;
  9. };
  10. struct l2_generator {
  11. struct l2_strset atomset;
  12. struct l2_strset stringset;
  13. struct l2_generator_string *strings;
  14. l2_word pos;
  15. struct l2_bufio_writer writer;
  16. };
  17. void l2_gen_init(struct l2_generator *gen, struct l2_io_writer *w);
  18. void l2_gen_flush(struct l2_generator *gen);
  19. void l2_gen_free(struct l2_generator *gen);
  20. void l2_gen_halt(struct l2_generator *gen);
  21. void l2_gen_rjmp(struct l2_generator *gen, l2_word len);
  22. void l2_gen_rjmp_placeholder(struct l2_generator *gen);
  23. void l2_gen_discard(struct l2_generator *gen);
  24. void l2_gen_swap_discard(struct l2_generator *gen);
  25. void l2_gen_ret(struct l2_generator *gen);
  26. void l2_gen_none(struct l2_generator *gen);
  27. void l2_gen_number(struct l2_generator *gen, double num);
  28. void l2_gen_string(struct l2_generator *gen, char **str);
  29. void l2_gen_string_copy(struct l2_generator *gen, char *str);
  30. void l2_gen_atom(struct l2_generator *gen, char **ident);
  31. void l2_gen_atom_copy(struct l2_generator *gen, char *ident);
  32. void l2_gen_function(struct l2_generator *gen, l2_word pos);
  33. void l2_gen_array(struct l2_generator *gen, l2_word count);
  34. void l2_gen_namespace(struct l2_generator *gen);
  35. void l2_gen_namespace_set(struct l2_generator *gen, char **ident);
  36. void l2_gen_namespace_set_copy(struct l2_generator *gen, char *ident);
  37. void l2_gen_namespace_lookup(struct l2_generator *gen, char **ident);
  38. void l2_gen_namespace_lookup_copy(struct l2_generator *gen, char *ident);
  39. void l2_gen_array_lookup(struct l2_generator *gen, int number);
  40. void l2_gen_array_set(struct l2_generator *gen, int number);
  41. void l2_gen_dynamic_lookup(struct l2_generator *gen);
  42. void l2_gen_dynamic_set(struct l2_generator *gen);
  43. void l2_gen_stack_frame_get_args(struct l2_generator *gen);
  44. void l2_gen_stack_frame_lookup(struct l2_generator *gen, char **ident);
  45. void l2_gen_stack_frame_lookup_copy(struct l2_generator *gen, char *ident);
  46. void l2_gen_stack_frame_set(struct l2_generator *gen, char **ident);
  47. void l2_gen_stack_frame_set_copy(struct l2_generator *gen, char *ident);
  48. void l2_gen_stack_frame_replace(struct l2_generator *gen, char **ident);
  49. void l2_gen_stack_frame_replace_copy(struct l2_generator *gen, char *ident);
  50. void l2_gen_func_call(struct l2_generator *gen, l2_word argc);
  51. void l2_gen_func_call_infix(struct l2_generator *gen);
  52. #endif