Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions compiler/src/dmd/backend/machobj.d
Original file line number Diff line number Diff line change
Expand Up @@ -2652,6 +2652,7 @@ void MachObj_pubdefsize(int seg, Symbol* s, targ_size_t offset, targ_size_t syms
@trusted
void MachObj_pubdef(int seg, Symbol* s, targ_size_t offset)
{
//printf("MachObj_pubdef('%s') %p\n",s.Sident.ptr,s.Svalue);
//printf("MachObj_pubdef(%d:x%llx s=%p, %s)\n", seg, offset, s, s.Sident.ptr);
//symbol_print(*s);
symbol_debug(s);
Expand Down
7 changes: 5 additions & 2 deletions compiler/src/dmd/funcsem.d
Original file line number Diff line number Diff line change
Expand Up @@ -388,6 +388,7 @@ public:
*/
extern (C++) bool onlyOneMain(FuncDeclaration fd)
{
//printf("onlyOneMain() %s\n", fd.toPrettyChars());
if (auto lastMain = FuncDeclaration.lastMain)
{
const format = (target.os == Target.OS.Windows)
Expand Down Expand Up @@ -950,9 +951,11 @@ Ldone:
// Only mixin `_d_cmain` if it is defined
if (cmainTemplateExists())
{
// add `mixin _d_cmain!();` to the declaring module
// add `mixin _d_cmain!(funcdecl);` to the declaring module
auto tqual = new TypeIdentifier(funcdecl.loc, Id.CMain);
auto tm = new TemplateMixin(funcdecl.loc, null, tqual, null);
auto tiargs = new Objects();
tiargs.push(funcdecl);
auto tm = new TemplateMixin(funcdecl.loc, null, tqual, tiargs);
sc._module.members.push(tm);
}
}
Expand Down
5 changes: 2 additions & 3 deletions compiler/test/compilable/extra-files/vcg-ast.d.cg
Original file line number Diff line number Diff line change
Expand Up @@ -115,15 +115,14 @@ R!int
int elem;
}
}
mixin _d_cmain!();
mixin _d_cmain!(main);
{
extern (C)
{
extern (C) int _d_run_main(int argc, char** argv, void* mainFunc);
extern (C) int _Dmain(char[][] args);
extern (C) int main(int argc, char** argv)
{
return _d_run_main(argc, argv, & _Dmain);
return _d_run_main(argc, argv, & main);
}
version (Solaris)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
DW_AT_name : fix21153.i
D main
fix21153._d_cmain!().main
fix21153._d_cmain!(main).main
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@ DW_AT_name : fix22352.Foo
DW_AT_name : foo
DW_AT_name : fix22352.Foo[]
D main
fix22352._d_cmain!().main
fix22352._d_cmain!(main).main
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
DW_AT_artificial : 1
DW_AT_name : D main
DW_AT_name : __main._d_cmain!().main
DW_AT_name : __main._d_cmain!(main).main
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ DW_AT_decl_column : 10
DW_AT_decl_line : 2000
DW_AT_decl_column : 20
D main
issue22423._d_cmain!().main
issue22423._d_cmain!(main).main
4 changes: 1 addition & 3 deletions druntime/src/core/internal/entrypoint.d
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,12 @@ call D main. Any module containing a D main function declaration will
cause the compiler to generate a `mixin _d_cmain();` statement to inject
this code into the module.
*/
template _d_cmain()
template _d_cmain(alias _Dmain)
{
extern(C)
{
int _d_run_main(int argc, char **argv, void* mainFunc);

int _Dmain(char[][] args);

int main(int argc, char **argv)
{
return _d_run_main(argc, argv, &_Dmain);
Expand Down
4 changes: 1 addition & 3 deletions spec/windows.dd
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,12 @@ $(H2 All Console Programs)
to be added. The `_d_cmain` template looks like:
)
---
template _d_cmain()
template _d_cmain(alias _Dmain)
{
extern(C)
{
int _d_run_main(int argc, char **argv, void* mainFunc);

int _Dmain(char[][] args);

int main(int argc, char **argv)
{
return _d_run_main(argc, argv, &_Dmain);
Expand Down
Loading