mescc: Tinycc support: bitwise-or initializer.
* module/language/c99/compiler.mes (initzer->value): New function. (initzer->data): Use it to support bitwise-or initializer. * scaffold/tests/74-multi-line-string.c (test): Test it.
This commit is contained in:
parent
3687740b64
commit
11fb4e03dc
|
@ -1966,6 +1966,12 @@
|
|||
`(initzer (p-expr (fixed ,(number->string value))))))
|
||||
(_ o))))
|
||||
|
||||
(define (initzer->value info)
|
||||
(lambda (o)
|
||||
(pmatch o
|
||||
((p-expr (fixed ,value)) (cstring->number value))
|
||||
(_ (error "initzer->value: " o)))))
|
||||
|
||||
(define (initzer->data info)
|
||||
(lambda (o)
|
||||
(pmatch o
|
||||
|
@ -1979,6 +1985,10 @@
|
|||
((initzer (p-expr (string ,string))) `((#:string ,string) #f #f #f))
|
||||
((initzer (p-expr (string . ,strings))) `((#:string ,(string-join strings "")) #f #f #f))
|
||||
((initzer (initzer-list . ,initzers)) (append-map (initzer->data info) initzers))
|
||||
((initzer (bitwise-or . ,values))
|
||||
(let loop ((values (map (initzer->value info) values)) (value 0))
|
||||
(if (null? values) (int->bv32 value)
|
||||
(loop (cdr values) (logior value (car values))))))
|
||||
(() (int->bv32 0))
|
||||
(_ (error "initzer->data: unsupported: " o)))))
|
||||
|
||||
|
|
|
@ -31,7 +31,10 @@ char const* help =
|
|||
int
|
||||
test ()
|
||||
{
|
||||
if (printf ("belong to us"), strcmp (help, "All your base are")) return 1;
|
||||
if (printf ("belong to us\n"), strcmp (help, "All your base are")) return 1;
|
||||
|
||||
int i = 1 | 2 | 4;
|
||||
if (i != 7) return 1;
|
||||
|
||||
return 2,1,0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue