mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
67 lines
1.7 KiB
Plaintext
67 lines
1.7 KiB
Plaintext
// #target: macos-x64
|
|
module test;
|
|
import std;
|
|
distinct TypeA = char[];
|
|
|
|
fn char TypeA.get(self, usz i) @operator([]) {
|
|
return ((char[])self)[i];
|
|
}
|
|
|
|
fn usz TypeA.len(self) @operator(len)
|
|
{
|
|
return self.len;
|
|
}
|
|
|
|
fn int main() {
|
|
TypeA x = "AAAAA";
|
|
foreach(y : x)
|
|
{
|
|
int z = y;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/* #expect: test.ll
|
|
|
|
et i64 %2
|
|
}
|
|
|
|
define i32 @main() #0 {
|
|
entry:
|
|
%x = alloca %"char[]", align 8
|
|
%.anon = alloca i64, align 8
|
|
%.anon1 = alloca i64, align 8
|
|
%y = alloca i8, align 1
|
|
%z = alloca i32, align 4
|
|
store %"char[]" { ptr @.str, i64 5 }, ptr %x, align 8
|
|
%lo = load ptr, ptr %x, align 8
|
|
%ptradd = getelementptr inbounds i8, ptr %x, i64 8
|
|
%hi = load i64, ptr %ptradd, align 8
|
|
%0 = call i64 @test.TypeA.len(ptr %lo, i64 %hi)
|
|
store i64 %0, ptr %.anon, align 8
|
|
store i64 0, ptr %.anon1, align 8
|
|
br label %loop.cond
|
|
|
|
loop.cond: ; preds = %loop.body, %entry
|
|
%1 = load i64, ptr %.anon1, align 8
|
|
%2 = load i64, ptr %.anon, align 8
|
|
%lt = icmp ult i64 %1, %2
|
|
br i1 %lt, label %loop.body, label %loop.exit
|
|
|
|
loop.body: ; preds = %loop.cond
|
|
%lo2 = load ptr, ptr %x, align 8
|
|
%ptradd3 = getelementptr inbounds i8, ptr %x, i64 8
|
|
%hi4 = load i64, ptr %ptradd3, align 8
|
|
%3 = load i64, ptr %.anon1, align 8
|
|
%4 = call i8 @test.TypeA.get(ptr %lo2, i64 %hi4, i64 %3)
|
|
store i8 %4, ptr %y, align 1
|
|
%5 = load i8, ptr %y, align 1
|
|
%zext = zext i8 %5 to i32
|
|
store i32 %zext, ptr %z, align 4
|
|
%6 = load i64, ptr %.anon1, align 8
|
|
%addnuw = add nuw i64 %6, 1
|
|
store i64 %addnuw, ptr %.anon1, align 8
|
|
br label %loop.cond
|
|
|
|
loop.exit: ; preds = %loop.cond
|
|
ret i32 0 |