fix tests for tcc, extract failing stuff to separate simpler files to ease debugging
* Fix compiling vlib/compiler/tests/fn_test.v with tcc. * Extract failing tests from fn_test.v so that they are more readable and easier to debug.pull/2733/head
parent
e6775913aa
commit
de5b4f0497
|
@ -57,8 +57,10 @@ CommonCHeaders = '
|
||||||
#define TCCSKIP(x) x
|
#define TCCSKIP(x) x
|
||||||
|
|
||||||
#ifdef __TINYC__
|
#ifdef __TINYC__
|
||||||
|
#undef EMPTY_STRUCT_DECLARATION
|
||||||
#undef EMPTY_STRUCT_INITIALIZATION
|
#undef EMPTY_STRUCT_INITIALIZATION
|
||||||
#define EMPTY_STRUCT_INITIALIZATION
|
#define EMPTY_STRUCT_DECLARATION char _dummy
|
||||||
|
#define EMPTY_STRUCT_INITIALIZATION 0
|
||||||
#undef EMPTY_ARRAY_OF_ELEMS
|
#undef EMPTY_ARRAY_OF_ELEMS
|
||||||
#define EMPTY_ARRAY_OF_ELEMS(x,n) (x[n])
|
#define EMPTY_ARRAY_OF_ELEMS(x,n) (x[n])
|
||||||
#undef TCCSKIP
|
#undef TCCSKIP
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
struct Foo {
|
||||||
|
}
|
||||||
|
fn (f Foo) str() string { return 'Foo{}' }
|
||||||
|
|
||||||
|
fn process_foo(foo &Foo) {
|
||||||
|
println('>process_foo, called for ${foo} === ${*foo}')
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get_foo() Foo {
|
||||||
|
println('>get_foo')
|
||||||
|
return Foo{}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
// TODO: Fix this. It 'works' only with tcc, but is not stable.
|
||||||
|
fn test_ref_fn_arg() {
|
||||||
|
process_foo(get_foo())
|
||||||
|
println(3434)
|
||||||
|
assert true
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
fn test_dummy(){}
|
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
// TODO: Fix this.
|
||||||
|
import time
|
||||||
|
|
||||||
|
// using a manual temporary intermediate variable should always work:
|
||||||
|
fn test_call_fn_that_requires_reference_with_function_that_returns_a_struct_manual(){
|
||||||
|
t1 := time.random()
|
||||||
|
t2 := t1.calc_unix()
|
||||||
|
println('tmp: $t2')
|
||||||
|
assert true
|
||||||
|
}
|
||||||
|
|
||||||
|
// v should produce temporary intermediate variables in chained calls:
|
||||||
|
fn test_call_fn_that_requires_reference_with_function_that_returns_a_struct_chained(){
|
||||||
|
res := (time.random().calc_unix())
|
||||||
|
println('res: $res')
|
||||||
|
assert true
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
fn test_dummy(){}
|
|
@ -21,8 +21,6 @@ multi line comment (3)
|
||||||
multi line comment (2)
|
multi line comment (2)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import time
|
|
||||||
|
|
||||||
type myfn fn (int) string
|
type myfn fn (int) string
|
||||||
|
|
||||||
type myfn2 fn (a int, b int) int
|
type myfn2 fn (a int, b int) int
|
||||||
|
@ -120,35 +118,3 @@ fn high_fn_multi_return(a int, b fn (c []int, d []string) ([]int, []string)) {
|
||||||
fn test_fns() {
|
fn test_fns() {
|
||||||
// no asserts for now, just test function declarations above
|
// no asserts for now, just test function declarations above
|
||||||
}
|
}
|
||||||
|
|
||||||
struct Foo {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
fn process_foo(foo &Foo) {
|
|
||||||
}
|
|
||||||
|
|
||||||
fn get_foo() Foo {
|
|
||||||
return Foo{}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// This used to be broken.
|
|
||||||
fn test_ref_fn_arg() {
|
|
||||||
// TODO tcc bug
|
|
||||||
/*
|
|
||||||
$if !tinyc {
|
|
||||||
process_foo(get_foo())
|
|
||||||
println(3434)
|
|
||||||
assert true
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
res := (time.random().calc_unix())
|
|
||||||
println(res)
|
|
||||||
assert true
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue