slovo/tests/array-struct-fields.surface.lower
2026-05-22 08:38:43 +02:00

125 lines
2.7 KiB
Plaintext

program main
struct ArrayRecord
field ints: (array i32 3)
field wides: (array i64 2)
field ratios: (array f64 3)
field flags: (array bool 3)
field words: (array string 3)
fn make_record(base: i32, head: string) -> ArrayRecord
construct ArrayRecord
field ints
array i32
var base
binary +
var base
int 1
binary +
var base
int 2
field wides
array i64
i64 40
i64 41
field ratios
array f64
float 1.5
float 2.5
float 3.5
field flags
array bool
bool false
bool true
bool true
field words
array string
var head
string "moon"
string "star"
fn echo_record(record: ArrayRecord) -> ArrayRecord
var record
fn local_record(head: string) -> ArrayRecord
local let record: ArrayRecord
call make_record
int 7
var head
call echo_record
var record
fn int_at(record: ArrayRecord, i: i32) -> i32
index
field-access ints
var record
var i
fn wide_at(record: ArrayRecord, i: i32) -> i64
index
field-access wides
var record
var i
fn ratio_at(record: ArrayRecord, i: i32) -> f64
index
field-access ratios
var record
var i
fn flag_at(record: ArrayRecord, i: i32) -> bool
index
field-access flags
var record
var i
fn word_at(record: ArrayRecord, i: i32) -> string
index
field-access words
var record
var i
fn main() -> i32
if
call flag_at
call local_record
string "sun"
int 2
int 0
int 1
test "struct array i32 field access"
binary =
call int_at
call make_record
int 7
string "sun"
int 2
int 9
test "struct array i64 field access"
binary =
call wide_at
call make_record
int 7
string "sun"
int 1
i64 41
test "struct array f64 field access"
binary =
call ratio_at
call make_record
int 7
string "sun"
int 2
float 3.5
test "struct array bool field access"
call flag_at
call make_record
int 7
string "sun"
int 1
test "struct array string field access"
binary =
call word_at
call make_record
int 7
string "sun"
int 1
string "moon"
test "struct array local param return call flow"
binary =
call word_at
call local_record
string "sun"
int 0
string "sun"