runtime.c 644 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #include "sans.h"
  6. #include "garbagecollector.h"
  7. #include "runtime.h"
  8. #include "symboltable.h"
  9. sdata bltn_read_char() {
  10. if(!feof(stdin)) {
  11. char c = getc(stdin);
  12. return SDCHAR(c);
  13. }
  14. else {
  15. return SDEOF();
  16. }
  17. }
  18. sdata bltn_unread_char(sdata ob) {
  19. if(ob.tag != tchar) {
  20. log_err("bltn_unread_char: ob not a character\n");
  21. }
  22. ungetc((char)ob.data.ivalue, stdin);
  23. return SDBOOL(0);
  24. }
  25. sdata bltn_exit(sdata ob) {
  26. if (ob.tag != tnumb) {
  27. log_err("runtime/exit: ob not a number\n");
  28. }
  29. exit(ob.data.ivalue);
  30. return(SDBOOL(0));
  31. }