Files
doslang-mirror/fec/tests/exec/structs.fe
T
coolguy 43555b261c lower+backend: 배열, 경계검사, 구조체, 그리고 실행 테스트 스위트
인덱스는 부호 없는 비교와 트랩으로 펴진다. --no-checks 는 메시지가 아니라
비교와 분기 자체를 없앤다 -- 그게 그 플래그의 전부다.

버그 셋:

- 값으로 넘긴 구조체 파라미터는 주소로 도착하는데 lowering 이 그걸 몰라서
  포인터를 구조체로 읽었다. 변수마다 by_address 를 기록한다.
- 덩어리 반환의 숨은 결과 인자를 지역이 아니라 임시값으로 다뤘다.
- store 에 폭이 없어서 1바이트 bool 을 4바이트로 썼다. 옆 지역변수가
  뭉개졌고 logic 프로그램이 틀린 답을 냈다.

tests/exec.py 가 새 스위트다. run.py 는 컴파일러가 프로그램에 대해 뭐라고
하는지 보고, 이쪽은 프로그램이 실제로 무엇을 하는지 본다. 보고만 되고
방출되지 않는 경계검사는 저기서는 통과하고 여기서는 실패한다.

run.py 194/194, exec.py 6/6.
2026-08-17 06:00:33 +09:00

21 lines
482 B
Plaintext

// EXIT:97
unit structs;
struct Point { x: i32, y: i32, }
fn make(a: i32, b: i32) -> Point { return Point{ x: a, y: b }; }
fn swap(p: Point) -> Point { return Point{ x: p.y, y: p.x }; }
fn main() -> i32 {
let p: Point = make(3, 8);
let q: Point = swap(p);
let grid: [3]Point = [make(1,1), make(2,2), make(3,3)];
var s: i32 = 0;
var i: i32 = 0;
while i < 3 {
s = s + grid[i].x * grid[i].y;
i = i + 1;
}
return q.x * 10 + q.y + s;
}