v2: fix support for 'go fn()' in modules. sync.pool is again multithreaded.
							parent
							
								
									c32ed8af51
								
							
						
					
					
						commit
						b411d29577
					
				|  | @ -116,9 +116,7 @@ pub fn (pool mut PoolProcessor) work_on_pointers(items []voidptr) { | |||
| 	pool.thread_contexts << [voidptr(0)].repeat(pool.items.len) | ||||
| 	pool.waitgroup.add(njobs) | ||||
| 	for i := 0; i < njobs; i++ { | ||||
| 		// TODO: uncomment when `go func()` works again with v2
 | ||||
| 		// go process_in_thread(pool,i)
 | ||||
| 		process_in_thread(pool,i) | ||||
| 		go process_in_thread(pool,i) | ||||
| 	} | ||||
| 	pool.waitgroup.wait() | ||||
| } | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ struct Gen { | |||
| 	typedefs       strings.Builder | ||||
| 	definitions    strings.Builder // typedefs, defines etc (everything that goes to the top of the file)
 | ||||
| 	inits          strings.Builder // contents of `void _vinit(){}`
 | ||||
| 	gowrappers     strings.Builder // all go callsite wrappers
 | ||||
| 	table          &table.Table | ||||
| 	pref           &pref.Preferences | ||||
| mut: | ||||
|  | @ -63,6 +64,7 @@ pub fn cgen(files []ast.File, table &table.Table, pref &pref.Preferences) string | |||
| 		out: strings.new_builder(100) | ||||
| 		typedefs: strings.new_builder(100) | ||||
| 		definitions: strings.new_builder(100) | ||||
| 		gowrappers: strings.new_builder(100) | ||||
| 		inits: strings.new_builder(100) | ||||
| 		table: table | ||||
| 		pref: pref | ||||
|  | @ -100,7 +102,7 @@ pub fn cgen(files []ast.File, table &table.Table, pref &pref.Preferences) string | |||
| 	if g.is_test { | ||||
| 		g.write_tests_main() | ||||
| 	} | ||||
| 	return g.hashes() + g.typedefs.str() + g.definitions.str() + g.out.str() | ||||
| 	return g.hashes() + g.typedefs.str() + g.definitions.str() + g.gowrappers.str() + g.out.str() | ||||
| } | ||||
| 
 | ||||
| pub fn (g &Gen) hashes() string { | ||||
|  | @ -2839,22 +2841,26 @@ fn (g mut Gen) go_stmt(node ast.GoStmt) { | |||
| 				g.definitions.writeln('\t$styp arg${i+1};') | ||||
| 			} | ||||
| 			g.definitions.writeln('} $wrapper_struct_name;') | ||||
| 			g.definitions.writeln('void* ${wrapper_fn_name}($wrapper_struct_name *arg) {') | ||||
| 			g.definitions.write(name + '(') | ||||
| 			g.definitions.writeln('void* ${wrapper_fn_name}($wrapper_struct_name *arg);') | ||||
| 
 | ||||
| 			g.gowrappers.writeln('void* ${wrapper_fn_name}($wrapper_struct_name *arg) {') | ||||
| 			g.gowrappers.write('\t${name}(') | ||||
| 			if it.is_method { | ||||
| 				g.definitions.write('arg->arg0') | ||||
| 				g.gowrappers.write('arg->arg0') | ||||
| 				if it.args.len > 0 { | ||||
| 					g.definitions.write(', ') | ||||
| 					g.gowrappers.write(', ') | ||||
| 				} | ||||
| 			} | ||||
| 			for i in 0..it.args.len { | ||||
| 				g.definitions.write('arg->arg${i+1}') | ||||
| 				g.gowrappers.write('arg->arg${i+1}') | ||||
| 				if i < it.args.len - 1 { | ||||
| 					g.definitions.write(', ') | ||||
| 					g.gowrappers.write(', ') | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| 			g.definitions.writeln(');\n return 0; }') | ||||
| 			g.gowrappers.writeln(');') | ||||
| 			g.gowrappers.writeln('\treturn 0;') | ||||
| 			g.gowrappers.writeln('}') | ||||
| 			g.threaded_fns << name | ||||
| 		} | ||||
| 		else{} | ||||
|  | @ -2898,4 +2904,3 @@ fn type_to_fmt(typ table.Type) string { | |||
| 	} | ||||
| 	return '%d' | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue