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

Implement char?

It's somewhat broken, but it "works" for integers and chars?
Lucas Stadler лет назад: 8
Родитель
Сommit
c46a1e45dd
2 измененных файлов с 17 добавлено и 0 удалено
  1. 5 0
      scm/inc/compiler.scm
  2. 12 0
      scm/inc/tests.scm

+ 5 - 0
scm/inc/compiler.scm

67
        (emit-expr (primcall-operand1 x))
67
        (emit-expr (primcall-operand1 x))
68
        (emit "andl $~a, %eax" #b11)
68
        (emit "andl $~a, %eax" #b11)
69
        (emit-compare))
69
        (emit-compare))
70
       ((char?)
71
        (emit-expr (primcall-operand1 x))
72
        (emit "andl $~a, %eax" #b00001111)
73
        (emit "cmpl $~a, %eax" #b00001111)
74
        (emit-compare))
70
       ((boolean?)
75
       ((boolean?)
71
        (emit-expr (primcall-operand1 x))
76
        (emit-expr (primcall-operand1 x))
72
        (emit "andl $~a, %eax" #b0011111)
77
        (emit "andl $~a, %eax" #b0011111)

+ 12 - 0
scm/inc/tests.scm

87
    ["(boolean? 12421)" "#f\n"]
87
    ["(boolean? 12421)" "#f\n"]
88
    ["(boolean? #\\y)" "#f\n"]
88
    ["(boolean? #\\y)" "#f\n"]
89
    ["(boolean? ())" "#f\n"]
89
    ["(boolean? ())" "#f\n"]
90
91
    ["(char? #\\y)" "#t\n"]
92
    ["(char? #\\a)" "#t\n"]
93
    ["(char? #\\0)" "#t\n"]
94
    ["(char? #\\z)" "#t\n"]
95
    ["(char? 0)" "#f\n"]
96
    ["(char? 1412)" "#f\n"]
97
    ["(char? 10)" "#f\n"]
98
    ["(char? -1421)" "#f\n"]
99
    ;["(char? #t)" "#f\n"]
100
    ;["(char? #f)" "#f\n"]
101
    ;["(char? ())" "#f\n"]
90
    ])
102
    ])