added better support for structs for extern functions, added a flag to disable list folding and made extern functions automaticly have priority 1
This commit is contained in:
71
extra_tests/c_extern_structs.sl
Normal file
71
extra_tests/c_extern_structs.sl
Normal file
@@ -0,0 +1,71 @@
|
||||
import stdlib.sl
|
||||
|
||||
cstruct Pair
|
||||
cfield a i64
|
||||
cfield b i64
|
||||
end
|
||||
|
||||
cstruct Big
|
||||
cfield a i64
|
||||
cfield b i64
|
||||
cfield c i64
|
||||
end
|
||||
|
||||
cstruct LDiv
|
||||
cfield quot i64
|
||||
cfield rem i64
|
||||
end
|
||||
|
||||
cstruct TimeSpec
|
||||
cfield tv_sec i64
|
||||
cfield tv_nsec i64
|
||||
end
|
||||
|
||||
extern long long pair_sum(struct Pair p)
|
||||
extern struct Pair make_pair(long long seed)
|
||||
extern struct Big make_big(long long seed)
|
||||
extern long long big_sum(struct Big b)
|
||||
extern long long pair_after_six(long long a, long long b, long long c, long long d, long long e, long long f, struct Pair p)
|
||||
extern struct LDiv ldiv(long numer, long denom)
|
||||
extern int timespec_get(struct TimeSpec* ts, int base)
|
||||
extern void exit(int status)
|
||||
|
||||
word main
|
||||
Pair.size alloc dup >r
|
||||
r@ 11 Pair.a!
|
||||
r@ 31 Pair.b!
|
||||
r@ pair_sum puti cr
|
||||
r> Pair.size free
|
||||
|
||||
100 make_big dup >r
|
||||
r@ Big.a@ puti cr
|
||||
r@ Big.b@ puti cr
|
||||
r@ Big.c@ puti cr
|
||||
r@ big_sum puti cr
|
||||
r> Big.size free
|
||||
|
||||
7 make_pair dup >r
|
||||
r@ Pair.a@ puti cr
|
||||
r@ Pair.b@ puti cr
|
||||
r> Pair.size free
|
||||
|
||||
Pair.size alloc dup >r
|
||||
r@ 11 Pair.a!
|
||||
r@ 31 Pair.b!
|
||||
1 2 3 4 5 6 r@ pair_after_six puti cr
|
||||
r> Pair.size free
|
||||
|
||||
20 3 ldiv dup >r
|
||||
r@ LDiv.quot@ puti cr
|
||||
r@ LDiv.rem@ puti cr
|
||||
r> LDiv.size free
|
||||
|
||||
TimeSpec.size alloc dup >r
|
||||
r@ 1 timespec_get 1 == if 1 else 0 end puti cr
|
||||
r@ TimeSpec.tv_sec@ 0 > if 1 else 0 end puti cr
|
||||
r@ TimeSpec.tv_nsec@ 0 >= if 1 else 0 end puti cr
|
||||
r@ TimeSpec.tv_nsec@ 1000000000 < if 1 else 0 end puti cr
|
||||
r> TimeSpec.size free
|
||||
|
||||
0 exit
|
||||
end
|
||||
Reference in New Issue
Block a user