/pypy/translator/c/src/main.h
C Header | 86 lines | 58 code | 22 blank | 6 comment | 7 complexity | e7e6ffd0c90dc7043cc7a35f90da07b7 MD5 | raw file
- #ifndef STANDALONE_ENTRY_POINT
- # define STANDALONE_ENTRY_POINT PYPY_STANDALONE
- #endif
- char *RPython_StartupCode(void); /* forward */
- /* prototypes */
- int main(int argc, char *argv[]);
- /* implementations */
- #ifndef PYPY_NOT_MAIN_FILE
- #ifndef PYPY_MAIN_FUNCTION
- #define PYPY_MAIN_FUNCTION main
- #endif
- #ifdef __GNUC__
- /* Hack to prevent this function from being inlined. Helps asmgcc
- because the main() function has often a different prologue/epilogue. */
- int pypy_main_function(int argc, char *argv[]) __attribute__((__noinline__));
- #endif
- int pypy_main_function(int argc, char *argv[])
- {
- char *errmsg;
- int i, exitcode;
- RPyListOfString *list;
- pypy_asm_stack_bottom();
- #ifdef PYPY_X86_CHECK_SSE2_DEFINED
- pypy_x86_check_sse2();
- #endif
- instrument_setup();
- #ifndef MS_WINDOWS
- /* this message does no longer apply to win64 :-) */
- if (sizeof(void*) != SIZEOF_LONG) {
- errmsg = "only support platforms where sizeof(void*) == sizeof(long),"
- " for now";
- goto error;
- }
- #endif
- errmsg = RPython_StartupCode();
- if (errmsg) goto error;
- list = _RPyListOfString_New(argc);
- if (RPyExceptionOccurred()) goto memory_out;
- for (i=0; i<argc; i++) {
- RPyString *s = RPyString_FromString(argv[i]);
- if (RPyExceptionOccurred()) goto memory_out;
- _RPyListOfString_SetItem(list, i, s);
- }
- exitcode = STANDALONE_ENTRY_POINT(list);
- #ifdef RPY_ASSERT
- pypy_debug_alloc_results();
- #endif
- if (RPyExceptionOccurred()) {
- /* print the RPython traceback */
- pypy_debug_catch_fatal_exception();
- }
- return exitcode;
- memory_out:
- errmsg = "out of memory";
- error:
- fprintf(stderr, "Fatal error during initialization: %s\n", errmsg);
- abort();
- return 1;
- }
- int PYPY_MAIN_FUNCTION(int argc, char *argv[])
- {
- return pypy_main_function(argc, argv);
- }
- #endif /* PYPY_NOT_MAIN_FILE */