12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include "sans.h"
- #include "garbagecollector.h"
- #include "runtime.h"
- #include "symboltable.h"
- sdata bltn_newline() {
- printf("\n");
- return SDBOOL(0);
- }
- void display_string(sdata ob) {
- u len = heap_ref(ob.data.value).data.ivalue;
- u i;
- sdata c;
- for(i=0; i<len; i++){
- c = heap_ref(ob.data.value + 1 + i);
- printf("%c", (char)c.data.ivalue);
- }
- }
- sdata bltn_display(sdata ob) {
- switch (ob.tag) {
- case tbool:
- if(ob.data.ivalue) {
- printf("#t");
- } else {
- printf("#f");
- }
- break;
- case tchar:
- printf("%c", (char)ob.data.ivalue);
- break;
- case tstrn:
- display_string(ob);
- break;
- case tsymb:
- printf("%s", lookup(ob.data.value));
- break;
- case tnumb:
- printf("%lu",ob.data.ivalue);
- break;
- case tcons:
- printf("(");
- bltn_display(heap_ref(ob.data.value));
- printf(" . ");
- bltn_display(heap_ref(ob.data.value+1));
- printf(")");
- break;
- case tnull:
- printf("()");
- break;
- default:
- log_err("runtime/bltn_display: cannot print type [%d]\n", ob.tag);
- }
- return SDBOOL(0);
- }
- sdata bltn_print(sdata ob) {
- bltn_display(ob);
- return bltn_newline();
- }
|