cgen: fix the tests

pull/4092/head
Alexander Medvednikov 2020-03-21 11:47:23 +01:00
parent b2d1f55702
commit 7ad1441c81
6 changed files with 39 additions and 6 deletions

View File

@ -43,7 +43,7 @@ pub fn cgen(files []ast.File, table &table.Table) string {
g.stmts(file.stmts) g.stmts(file.stmts)
} }
g.write_variadic_types() g.write_variadic_types()
g.write_str_definitions() // g.write_str_definitions()
g.write_init_function() g.write_init_function()
return g.typedefs.str() + g.definitions.str() + g.out.str() return g.typedefs.str() + g.definitions.str() + g.out.str()
} }
@ -57,6 +57,7 @@ pub fn (g mut Gen) init() {
g.definitions.writeln('\nstring _STR_TMP(const char*, ...);\n') g.definitions.writeln('\nstring _STR_TMP(const char*, ...);\n')
g.write_builtin_types() g.write_builtin_types()
g.write_typedef_types() g.write_typedef_types()
g.write_str_definitions()
g.write_sorted_types() g.write_sorted_types()
g.write_multi_return_types() g.write_multi_return_types()
g.definitions.writeln('// end of definitions #endif') g.definitions.writeln('// end of definitions #endif')
@ -1591,13 +1592,12 @@ string _STR_TMP(const char *fmt, ...) {
//puts(g_str_buf); //puts(g_str_buf);
#endif #endif
return tos2(g_str_buf); return tos2(g_str_buf);
} } // endof _STR_TMP
') ')
} }
const ( const (
// TODO all builtin types must be lowercase
builtins = ['string', 'array', 'KeyValue', 'DenseArray', 'map', 'Option'] builtins = ['string', 'array', 'KeyValue', 'DenseArray', 'map', 'Option']
) )
@ -1625,7 +1625,6 @@ fn (g mut Gen) write_sorted_types() {
types_sorted := g.sort_structs(types) types_sorted := g.sort_structs(types)
// Generate C code // Generate C code
g.definitions.writeln('// builtin types:') g.definitions.writeln('// builtin types:')
// g.write_types(builtin_types)
g.definitions.writeln('//------------------ #endbuiltin') g.definitions.writeln('//------------------ #endbuiltin')
g.write_types(types_sorted) g.write_types(types_sorted)
} }

View File

@ -23,7 +23,14 @@ fn test_c_files() {
ctext = ctext // unused warn 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/']
res := b.gen_c([path]).after('#endbuiltin') mut res := b.gen_c([path]).after('#endbuiltin')
if res.contains('string _STR') {
pos := res.index('string _STR') or {
-1
}
end := res.index_after('endof _STR_TMP', pos)
res = res[..pos] + res[end + 15..]
}
if compare_texts(res, ctext, path) { if compare_texts(res, ctext, path) {
println('${term_ok} ${i}') println('${term_ok} ${i}')
} }
@ -47,6 +54,15 @@ fn compare_texts(a, b, path string) bool {
*/ */
for i, line_a in lines_a { for i, line_a in lines_a {
// mut j := 0
// for i := 0; i < lines_a.len; i++ {
// line_a := lines_a[i]
// if line_a.contains('string _STR') {
// println(' SKIPPING!!')
// for !lines_a[i].contains('}') {
// i++
// }
// }
if i >= lines_b.len { if i >= lines_b.len {
println(line_a) println(line_a)
return false return false

View File

@ -304,6 +304,7 @@ typedef array array_u64;
typedef map map_int; typedef map map_int;
typedef map map_string; typedef map map_string;
typedef byte array_fixed_byte_300 [300]; typedef byte array_fixed_byte_300 [300];
typedef byte array_fixed_byte_400 [400];
#ifndef bool #ifndef bool
typedef int bool; typedef int bool;
#define true 1 #define true 1

View File

@ -76,7 +76,13 @@ void end() {
int main(int argc, char** argv) { int main(int argc, char** argv) {
_init();
os__args = os__init_os_args(argc, (byteptr*)argv);
return 0; return 0;
} }
void _init() {
}

View File

@ -63,6 +63,8 @@ void handle_expr(Expr e) {
} }
int main(int argc, char** argv) { int main(int argc, char** argv) {
_init();
os__args = os__init_os_args(argc, (byteptr*)argv);
User user = (User){ User user = (User){
0}; 0};
user.age = 10; user.age = 10;
@ -74,3 +76,7 @@ int main(int argc, char** argv) {
0}); 0});
return 0; return 0;
} }
void _init() {
}

View File

@ -22,7 +22,9 @@ int Foo_testa(Foo* f);
int Foo_testb(Foo* f); int Foo_testb(Foo* f);
int Bar_testa(Bar* b); int Bar_testa(Bar* b);
int main() { int main(int argc, char** argv) {
_init();
os__args = os__init_os_args(argc, (byteptr*)argv);
Bar b = (Bar){ Bar b = (Bar){
.a = 122, .a = 122,
}; };
@ -91,3 +93,6 @@ int Foo_testb(Foo* f) {
int Bar_testa(Bar* b) { int Bar_testa(Bar* b) {
return 4; return 4;
} }
void _init() {
}