mirror of
https://github.com/rui314/chibicc
synced 2025-03-11 08:42:54 +03:00
Add arrays of arrays
This commit is contained in:
parent
8b6395d0f2
commit
3ce1b2d067
5
parse.c
5
parse.c
@ -125,7 +125,7 @@ static Type *func_params(Token **rest, Token *tok, Type *ty) {
|
||||
}
|
||||
|
||||
// type-suffix = "(" func-params
|
||||
// | "[" num "]"
|
||||
// | "[" num "]" type-suffix
|
||||
// | ε
|
||||
static Type *type_suffix(Token **rest, Token *tok, Type *ty) {
|
||||
if (equal(tok, "("))
|
||||
@ -133,7 +133,8 @@ static Type *type_suffix(Token **rest, Token *tok, Type *ty) {
|
||||
|
||||
if (equal(tok, "[")) {
|
||||
int sz = get_number(tok->next);
|
||||
*rest = skip(tok->next->next, "]");
|
||||
tok = skip(tok->next->next, "]");
|
||||
ty = type_suffix(rest, tok, ty);
|
||||
return array_of(ty, sz);
|
||||
}
|
||||
|
||||
|
7
test.sh
7
test.sh
@ -118,4 +118,11 @@ assert 3 'int main() { int x[3]; *x=3; *(x+1)=4; *(x+2)=5; return *x; }'
|
||||
assert 4 'int main() { int x[3]; *x=3; *(x+1)=4; *(x+2)=5; return *(x+1); }'
|
||||
assert 5 'int main() { int x[3]; *x=3; *(x+1)=4; *(x+2)=5; return *(x+2); }'
|
||||
|
||||
assert 0 'int main() { int x[2][3]; int *y=x; *y=0; return **x; }'
|
||||
assert 1 'int main() { int x[2][3]; int *y=x; *(y+1)=1; return *(*x+1); }'
|
||||
assert 2 'int main() { int x[2][3]; int *y=x; *(y+2)=2; return *(*x+2); }'
|
||||
assert 3 'int main() { int x[2][3]; int *y=x; *(y+3)=3; return **(x+1); }'
|
||||
assert 4 'int main() { int x[2][3]; int *y=x; *(y+4)=4; return *(*(x+1)+1); }'
|
||||
assert 5 'int main() { int x[2][3]; int *y=x; *(y+5)=5; return *(*(x+1)+2); }'
|
||||
|
||||
echo OK
|
||||
|
Loading…
x
Reference in New Issue
Block a user