v2: fix hello world compilation with tcc

pull/4110/head
Delyan Angelov 2020-03-23 22:26:48 +02:00 committed by GitHub
parent 9c536f2233
commit efe21fed66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 20 additions and 17 deletions

View File

@ -704,8 +704,9 @@ fn (g mut Gen) expr(node ast.Expr) {
g.write('new_array($it.exprs.len, $it.exprs.len, sizeof($elem_type_str))') g.write('new_array($it.exprs.len, $it.exprs.len, sizeof($elem_type_str))')
} }
else { else {
g.write('new_array_from_c_array($it.exprs.len, $it.exprs.len, sizeof($elem_type_str), ') len := it.exprs.len
g.writeln('($elem_type_str[]){\t') g.write('new_array_from_c_array($len, $len, sizeof($elem_type_str), ')
g.writeln('($elem_type_str[$len]){\t')
for expr in it.exprs { for expr in it.exprs {
g.expr(expr) g.expr(expr)
g.write(', ') g.write(', ')

View File

@ -17,10 +17,9 @@ fn test_c_files() {
vroot := os.dir(vexe) vroot := os.dir(vexe)
for i in 1 .. (nr_tests + 1) { for i in 1 .. (nr_tests + 1) {
path := '$vroot/vlib/v/gen/tests/${i}.vv' path := '$vroot/vlib/v/gen/tests/${i}.vv'
mut ctext := os.read_file('$vroot/vlib/v/gen/tests/${i}.c') or { ctext := os.read_file('$vroot/vlib/v/gen/tests/${i}.c') or {
panic(err) panic(err)
} }
ctext = ctext // unused warn
mut b := builder.new_builder(pref.Preferences{}) mut b := builder.new_builder(pref.Preferences{})
b.module_search_paths = ['$vroot/vlib/v/gen/tests/'] b.module_search_paths = ['$vroot/vlib/v/gen/tests/']
mut res := b.gen_c([path]).after('#endbuiltin') mut res := b.gen_c([path]).after('#endbuiltin')
@ -44,7 +43,9 @@ fn compare_texts(a, b, path string) bool {
lines_a_ := a.trim_space().split_into_lines() lines_a_ := a.trim_space().split_into_lines()
lines_b_ := b.trim_space().split_into_lines() lines_b_ := b.trim_space().split_into_lines()
lines_a := lines_a_.filter(it != '') lines_a := lines_a_.filter(it != '')
lines_b := lines_b_.filter(it != '') mut lines_b := lines_b_.filter(it != '')
lines_b << ''
lines_b << ''
/* /*
if lines_a.len != lines_b.len { if lines_a.len != lines_b.len {
println(term.red('different len')) println(term.red('different len'))
@ -60,9 +61,10 @@ fn compare_texts(a, b, path string) bool {
} }
line_b := lines_b[i] line_b := lines_b[i]
if line_a.trim_space() != line_b.trim_space() { if line_a.trim_space() != line_b.trim_space() {
println('${path}: got\n$a') println('${path}: Got\n$a')
println('${term_fail} ${i}') println('${term_fail} near line: ${i}')
println(term.red('i=$i "$line_a" expected="$line_b"')) println(term.red('actual :${line_a}'))
println(term.red('expected:${line_b}'))
println(lines_b[i + 1]) println(lines_b[i + 1])
println(lines_b[i + 2]) println(lines_b[i + 2])
// exit(1) // exit(1)

View File

@ -75,7 +75,7 @@ void foo(int a) {
for (int i = 0; for (int i = 0;
i < 10; i++) { i < 10; i++) {
} }
array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[]){ array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[3]){
1, 2, 3, 1, 2, 3,
}); });
array_int nums2 = array_slice(nums, 0, 2); array_int nums2 = array_slice(nums, 0, 2);
@ -83,16 +83,16 @@ i < 10; i++) {
array_int nums4 = array_slice(nums, 1, nums.len); array_int nums4 = array_slice(nums, 1, nums.len);
int number = (*(int*)array_get(nums, 0)); int number = (*(int*)array_get(nums, 0));
array_set(&nums, 1, &(int[]) { 10 }); array_set(&nums, 1, &(int[]) { 10 });
array_bool bools = new_array_from_c_array(2, 2, sizeof(bool), (bool[]){ array_bool bools = new_array_from_c_array(2, 2, sizeof(bool), (bool[2]){
true, false, true, false,
}); });
array_User users = new_array_from_c_array(1, 1, sizeof(User), (User[]){ array_User users = new_array_from_c_array(1, 1, sizeof(User), (User[1]){
(User){ (User){
.age = 0, .age = 0,
}, },
}); });
bool b = (*(bool*)array_get(bools, 0)); bool b = (*(bool*)array_get(bools, 0));
array_string mystrings = new_array_from_c_array(2, 2, sizeof(string), (string[]){ array_string mystrings = new_array_from_c_array(2, 2, sizeof(string), (string[2]){
tos3("a"), tos3("b"), tos3("a"), tos3("b"),
}); });
string s = (*(string*)array_get(mystrings, 0)); string s = (*(string*)array_get(mystrings, 0));

View File

@ -66,7 +66,7 @@ void function2() {
} }
void init_array() { void init_array() {
array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[]){ array_int nums = new_array_from_c_array(3, 3, sizeof(int), (int[3]){
4, 2, 3, 4, 2, 3,
}); });
} }

View File

@ -30,7 +30,7 @@ Option_int get_opt() {
void User_foo(User* u) { void User_foo(User* u) {
int age = u->age; int age = u->age;
array_string zzz = array_repeat(new_array_from_c_array(1, 1, sizeof(string), (string[]){ array_string zzz = array_repeat(new_array_from_c_array(1, 1, sizeof(string), (string[1]){
tos3(""), tos3(""),
}), u->age); }), u->age);
int a = 10; int a = 10;

View File

@ -43,13 +43,13 @@ int main(int argc, char** argv) {
string e = tos3("hello"); string e = tos3("hello");
e = testb(111); e = testb(111);
e = tos3("world"); e = tos3("world");
array_int f = new_array_from_c_array(4, 4, sizeof(int), (int[]){ array_int f = new_array_from_c_array(4, 4, sizeof(int), (int[4]){
testa(), 2, 3, 4, testa(), 2, 3, 4,
}); });
array_string g = new_array_from_c_array(2, 2, sizeof(string), (string[]){ array_string g = new_array_from_c_array(2, 2, sizeof(string), (string[2]){
testb(1), tos3("hello"), testb(1), tos3("hello"),
}); });
array_Foo arr_foo = new_array_from_c_array(1, 1, sizeof(Foo), (Foo[]){ array_Foo arr_foo = new_array_from_c_array(1, 1, sizeof(Foo), (Foo[1]){
a, a,
}); });
Foo af_idx_el = (*(Foo*)array_get(arr_foo, 0)); Foo af_idx_el = (*(Foo*)array_get(arr_foo, 0));