diff options
author | Zahary Karadjov <zahary@gmail.com> | 2014-01-23 00:01:15 +0200 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2014-01-23 00:01:15 +0200 |
commit | 9dec669b941b8ebf6d66ec29c3bb9451ad164b51 (patch) | |
tree | 90bfd628745fc5fb38e7f0e011060aa0dc5cdbcc /compiler | |
parent | 85a5bfe60520a59ff9ce493dfa65bf9cbd86059e (diff) | |
download | Nim-9dec669b941b8ebf6d66ec29c3bb9451ad164b51.tar.gz |
nest PreMain inside NimMain for easier consumption of static libraries developed in Nimrod
fixes many uses of $N instead of $n for new lines that don't affect #line directives
Diffstat (limited to 'compiler')
-rw-r--r-- | compiler/cgen.nim | 124 |
1 files changed, 67 insertions, 57 deletions
diff --git a/compiler/cgen.nim b/compiler/cgen.nim index 0e6e48399..5057ae558 100644 --- a/compiler/cgen.nim +++ b/compiler/cgen.nim @@ -911,29 +911,29 @@ proc addIntTypes(result: var PRope) {.inline.} = appf(result, "#define NIM_INTBITS $1", [ platform.CPU[targetCPU].intSize.toRope]) -proc getCopyright(cfilenoext: string): PRope = - if optCompileOnly in gGlobalOptions: - result = ropeff("/* Generated by Nimrod Compiler v$1 */$n" & - "/* (c) 2014 Andreas Rumpf */$n" & - "/* The generated code is subject to the original license. */$n", - "; Generated by Nimrod Compiler v$1$n" & - "; (c) 2012 Andreas Rumpf$n", [toRope(VersionAsString)]) - else: - result = ropeff("/* Generated by Nimrod Compiler v$1 */$n" & - "/* (c) 2014 Andreas Rumpf */$n" & - "/* The generated code is subject to the original license. */$n" & - "/* Compiled for: $2, $3, $4 */$n" & - "/* Command for C compiler:$n $5 */$n", - "; Generated by Nimrod Compiler v$1$n" & - "; (c) 2014 Andreas Rumpf$n" & - "; Compiled for: $2, $3, $4$n" & - "; Command for LLVM compiler:$n $5$n", [toRope(VersionAsString), - toRope(platform.OS[targetOS].name), - toRope(platform.CPU[targetCPU].name), - toRope(extccomp.CC[extccomp.cCompiler].name), +proc getCopyright(cfilenoext: string): PRope = + if optCompileOnly in gGlobalOptions: + result = ropeff("/* Generated by Nimrod Compiler v$1 */$N" & + "/* (c) 2014 Andreas Rumpf */$N" & + "/* The generated code is subject to the original license. */$N", + "; Generated by Nimrod Compiler v$1$N" & + "; (c) 2012 Andreas Rumpf$N", [toRope(VersionAsString)]) + else: + result = ropeff("/* Generated by Nimrod Compiler v$1 */$N" & + "/* (c) 2014 Andreas Rumpf */$N" & + "/* The generated code is subject to the original license. */$N" & + "/* Compiled for: $2, $3, $4 */$N" & + "/* Command for C compiler:$n $5 */$N", + "; Generated by Nimrod Compiler v$1$N" & + "; (c) 2014 Andreas Rumpf$N" & + "; Compiled for: $2, $3, $4$N" & + "; Command for LLVM compiler:$N $5$N", [toRope(VersionAsString), + toRope(platform.OS[targetOS].name), + toRope(platform.CPU[targetCPU].name), + toRope(extccomp.CC[extccomp.cCompiler].name), toRope(getCompileCFileCmd(cfilenoext))]) -proc getFileHeader(cfilenoext: string): PRope = +proc getFileHeader(cfilenoext: string): PRope = result = getCopyright(cfilenoext) addIntTypes(result) @@ -941,61 +941,71 @@ proc genFilenames(m: BModule): PRope = discard cgsym(m, "dbgRegisterFilename") result = nil for i in 0.. <fileInfos.len: - result.appf("dbgRegisterFilename($1);$n", fileInfos[i].projPath.makeCString) + result.appf("dbgRegisterFilename($1);$N", fileInfos[i].projPath.makeCString) proc genMainProc(m: BModule) = const PreMainBody = - "\tsystemDatInit();$n" & - "\tsystemInit();$n" & + "\tsystemDatInit();$N" & + "\tsystemInit();$N" & "$1" & "$2" & "$3" & "$4" MainProcs = - "\tPreMain();$n" & - "\tNimMain();$n" + "\tNimMain();$N" MainProcsWithResult = - MainProcs & "\treturn nim_program_result;$n" + MainProcs & "\treturn nim_program_result;$N" + + NimMainBody = + "N_CDECL(void, NimMain)(void) {$N" & + "\tPreMain();$N" & + "$1$N" & + "}$N" PosixNimMain = - "int cmdCount;$n" & - "char** cmdLine;$n" & - "char** gEnv;$n" & - "N_CDECL(void, NimMain)(void) {$n$1}$n" + "int cmdCount;$N" & + "char** cmdLine;$N" & + "char** gEnv;$N" & + NimMainBody - PosixCMain = "int main(int argc, char** args, char** env) {$n" & - "\tcmdLine = args;$n" & "\tcmdCount = argc;$n" & "\tgEnv = env;$n" & - MainProcsWithResult & - "}$n" + PosixCMain = + "int main(int argc, char** args, char** env) {$N" & + "\tcmdLine = args;$N" & + "\tcmdCount = argc;$N" & + "\tgEnv = env;$N" & + MainProcsWithResult & + "}$N" - StandaloneCMain = "int main(void) {$n" & - MainProcs & - "\treturn 0;$n" & "}$n" + StandaloneCMain = + "int main(void) {$N" & + MainProcs & + "\treturn 0;$N" & + "}$N" - WinNimMain = "N_CDECL(void, NimMain)(void) {$n$1}$n" + WinNimMain = NimMainBody - WinCMain = "N_STDCALL(int, WinMain)(HINSTANCE hCurInstance, $n" & - " HINSTANCE hPrevInstance, $n" & - " LPSTR lpCmdLine, int nCmdShow) {$n" & - MainProcsWithResult & "}$n" + WinCMain = "N_STDCALL(int, WinMain)(HINSTANCE hCurInstance, $N" & + " HINSTANCE hPrevInstance, $N" & + " LPSTR lpCmdLine, int nCmdShow) {$N" & + MainProcsWithResult & "}$N" - WinNimDllMain = "N_LIB_EXPORT N_CDECL(void, NimMain)(void) {$n$1}$n" + WinNimDllMain = "N_LIB_EXPORT " & NimMainBody WinCDllMain = - "BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, $n" & - " LPVOID lpvReserved) {$n" & - "\tif(fwdreason == DLL_PROCESS_ATTACH) {" & MainProcs & "}$n" & - "\treturn 1;$n}$n" + "BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fwdreason, $N" & + " LPVOID lpvReserved) {$N" & + "\tif(fwdreason == DLL_PROCESS_ATTACH) {$N" & MainProcs & "}$N" & + "\treturn 1;$N}$N" PosixNimDllMain = WinNimDllMain PosixCDllMain = - "void NIM_POSIX_INIT NimMainInit(void) {$n" & - MainProcs & - "}$n" + "void NIM_POSIX_INIT NimMainInit(void) {$N" & + MainProcs & + "}$N" var nimMain, otherMain: TFormatStr if platform.targetOS == osWindows and @@ -1022,9 +1032,9 @@ proc genMainProc(m: BModule) = let initStackBottomCall = if emulatedThreadVars() or platform.targetOS == osStandalone: "".toRope - else: ropecg(m, "\t#initStackBottom();$n") + else: ropecg(m, "\t#initStackBottom();$N") inc(m.labels) - appcg(m, m.s[cfsProcs], "void PreMain() {$n" & PreMainBody & "}$n", [ + appcg(m, m.s[cfsProcs], "void PreMain() {$N" & PreMainBody & "}$N", [ mainDatInit, initStackBottomCall, gBreakpoints, otherModsInit]) appcg(m, m.s[cfsProcs], nimMain, [mainModInit, toRope(m.labels)]) @@ -1049,8 +1059,8 @@ proc registerModuleToMain(m: PSym) = appff(mainModProcs, "N_NOINLINE(void, $1)(void);$N", "declare void $1() noinline$N", [datInit]) if sfSystemModule notin m.flags: - appff(mainDatInit, "\t$1();$n", "call void ()* $1$n", [datInit]) - let initCall = ropeff("\t$1();$n", "call void ()* $1$n", [init]) + appff(mainDatInit, "\t$1();$N", "call void ()* $1$n", [datInit]) + let initCall = ropeff("\t$1();$N", "call void ()* $1$n", [init]) if sfMainModule in m.flags: app(mainModInit, initCall) else: @@ -1058,7 +1068,7 @@ proc registerModuleToMain(m: PSym) = proc genInitCode(m: BModule) = var initname = getInitName(m.module) - var prc = ropeff("N_NOINLINE(void, $1)(void) {$n", + var prc = ropeff("N_NOINLINE(void, $1)(void) {$N", "define void $1() noinline {$n", [initname]) if m.typeNodes > 0: appcg(m, m.s[cfsTypeInit1], "static #TNimNode $1[$2];$n", @@ -1101,7 +1111,7 @@ proc genInitCode(m: BModule) = app(prc, deinitGCFrame(m.initProc)) appf(prc, "}$N$N") - prc.appff("N_NOINLINE(void, $1)(void) {$n", + prc.appff("N_NOINLINE(void, $1)(void) {$N", "define void $1() noinline {$n", [getDatInitName(m.module)]) for i in cfsTypeInit1..cfsDynLibInit: |