Просмотр исходного кода

Support printing the empty list

Lucas Stadler лет назад: 8
Родитель
Сommit
ccb51ff1fd
2 измененных файлов с 5 добавлено и 1 удалено
  1. 1 1
      scm/inc/compiler.scm
  2. 4 0
      scm/inc/driver.c

+ 1 - 1
scm/inc/compiler.scm

25
  (emit "movl $~a, %eax" (immediate-rep x))
25
  (emit "movl $~a, %eax" (immediate-rep x))
26
  (emit "ret"))
26
  (emit "ret"))
27
27
28
(compile-program 42)
28
(compile-program '())

+ 4 - 0
scm/inc/driver.c

6
#define fixnum_tag   0 // 00
6
#define fixnum_tag   0 // 00
7
#define fixnum_shift 2
7
#define fixnum_shift 2
8
8
9
#define empty_list   47 // 00101111
10
9
int scheme_entry();
11
int scheme_entry();
10
12
11
int main(int argc, char **argv) {
13
int main(int argc, char **argv) {
12
	int val = scheme_entry();
14
	int val = scheme_entry();
13
	if ((val & fixnum_mask) == fixnum_tag) {
15
	if ((val & fixnum_mask) == fixnum_tag) {
14
		printf("%d\n", val >> fixnum_shift);
16
		printf("%d\n", val >> fixnum_shift);
17
	} else if (val == empty_list) {
18
		printf("()\n");
15
	} else {
19
	} else {
16
		printf("Error: unhandled value: %d\n", val);
20
		printf("Error: unhandled value: %d\n", val);
17
		return 1;
21
		return 1;