From e79e0ee1dd4b5a32cd5781b1d0e41dd9d1fdce1f Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Thu, 12 Jun 2014 11:22:55 +0100 Subject: [PATCH 1/3] Need to synchronize stdout and stdin for the benefit of windows. Copied from Perforce Change: 186516 ServerID: perforce.ravenbrook.com --- mps/example/scheme/scheme-advanced.c | 1 + mps/example/scheme/scheme-boehm.c | 1 + mps/example/scheme/scheme-malloc.c | 1 + mps/example/scheme/scheme.c | 1 + 4 files changed, 4 insertions(+) diff --git a/mps/example/scheme/scheme-advanced.c b/mps/example/scheme/scheme-advanced.c index 476b790f0a4..28a0c2cda52 100644 --- a/mps/example/scheme/scheme-advanced.c +++ b/mps/example/scheme/scheme-advanced.c @@ -4400,6 +4400,7 @@ static int start(int argc, char *argv[]) mps_chat(); printf("%lu, %lu> ", (unsigned long)total, (unsigned long)mps_collections(arena)); + fflush(stdout); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme-boehm.c b/mps/example/scheme/scheme-boehm.c index 8d039433bb4..57dc44d79cd 100644 --- a/mps/example/scheme/scheme-boehm.c +++ b/mps/example/scheme/scheme-boehm.c @@ -3620,6 +3620,7 @@ int main(int argc, char *argv[]) if(setjmp(*error_handler) != 0) fprintf(stderr, "%s\n", error_message); printf("%lu> ", (unsigned long)total); + fflush(stdout); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme-malloc.c b/mps/example/scheme/scheme-malloc.c index 1333ce73aef..395a5638e87 100644 --- a/mps/example/scheme/scheme-malloc.c +++ b/mps/example/scheme/scheme-malloc.c @@ -3617,6 +3617,7 @@ int main(int argc, char *argv[]) if(setjmp(*error_handler) != 0) fprintf(stderr, "%s\n", error_message); printf("%lu> ", (unsigned long)total); + fflush(stdout); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme.c b/mps/example/scheme/scheme.c index 8a8dcf48ed7..26c7a4b7f54 100644 --- a/mps/example/scheme/scheme.c +++ b/mps/example/scheme/scheme.c @@ -4330,6 +4330,7 @@ static int start(int argc, char *argv[]) mps_chat(); printf("%lu, %lu> ", (unsigned long)total, (unsigned long)mps_collections(arena)); + fflush(stdout); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); From e93033f28968aee150f2ddddf26ab82d10792332 Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Thu, 12 Jun 2014 11:28:41 +0100 Subject: [PATCH 2/3] Must fflush stderr too--it's buffered on windows! Copied from Perforce Change: 186517 ServerID: perforce.ravenbrook.com --- mps/example/scheme/scheme-advanced.c | 1 + mps/example/scheme/scheme-boehm.c | 1 + mps/example/scheme/scheme-malloc.c | 1 + mps/example/scheme/scheme.c | 1 + 4 files changed, 4 insertions(+) diff --git a/mps/example/scheme/scheme-advanced.c b/mps/example/scheme/scheme-advanced.c index 28a0c2cda52..418cd64b5f5 100644 --- a/mps/example/scheme/scheme-advanced.c +++ b/mps/example/scheme/scheme-advanced.c @@ -4401,6 +4401,7 @@ static int start(int argc, char *argv[]) printf("%lu, %lu> ", (unsigned long)total, (unsigned long)mps_collections(arena)); fflush(stdout); + fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme-boehm.c b/mps/example/scheme/scheme-boehm.c index 57dc44d79cd..8bbd25f9e7a 100644 --- a/mps/example/scheme/scheme-boehm.c +++ b/mps/example/scheme/scheme-boehm.c @@ -3621,6 +3621,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "%s\n", error_message); printf("%lu> ", (unsigned long)total); fflush(stdout); + fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme-malloc.c b/mps/example/scheme/scheme-malloc.c index 395a5638e87..98128cbf59a 100644 --- a/mps/example/scheme/scheme-malloc.c +++ b/mps/example/scheme/scheme-malloc.c @@ -3618,6 +3618,7 @@ int main(int argc, char *argv[]) fprintf(stderr, "%s\n", error_message); printf("%lu> ", (unsigned long)total); fflush(stdout); + fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme.c b/mps/example/scheme/scheme.c index 26c7a4b7f54..8ff551b7034 100644 --- a/mps/example/scheme/scheme.c +++ b/mps/example/scheme/scheme.c @@ -4331,6 +4331,7 @@ static int start(int argc, char *argv[]) printf("%lu, %lu> ", (unsigned long)total, (unsigned long)mps_collections(arena)); fflush(stdout); + fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); From 6e72fe4da3b42800002a9148835f7b3479d16218 Mon Sep 17 00:00:00 2001 From: Gareth Rees Date: Thu, 12 Jun 2014 11:37:50 +0100 Subject: [PATCH 3/3] Synchronize stdout and stderr (for the benefit of windows). Copied from Perforce Change: 186519 ServerID: perforce.ravenbrook.com --- mps/example/scheme/scheme-advanced.c | 9 ++++++++- mps/example/scheme/scheme-boehm.c | 9 +++++++-- mps/example/scheme/scheme-malloc.c | 9 +++++++-- mps/example/scheme/scheme.c | 9 ++++++++- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/mps/example/scheme/scheme-advanced.c b/mps/example/scheme/scheme-advanced.c index 418cd64b5f5..57ee56c9510 100644 --- a/mps/example/scheme/scheme-advanced.c +++ b/mps/example/scheme/scheme-advanced.c @@ -409,6 +409,7 @@ static void error(const char *format, ...) if (error_handler) { longjmp(*error_handler, 1); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); abort(); @@ -4003,6 +4004,7 @@ static mps_res_t obj_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit) break; default: assert(0); + fflush(stdout); fprintf(stderr, "Unexpected object on the heap\n"); abort(); } @@ -4073,6 +4075,7 @@ static mps_addr_t obj_skip(mps_addr_t base) break; default: assert(0); + fflush(stdout); fprintf(stderr, "Unexpected object on the heap\n"); abort(); } @@ -4366,6 +4369,7 @@ static int start(int argc, char *argv[]) make_operator(optab[i].name, optab[i].entry, obj_empty, obj_empty, env, op_env)); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); @@ -4375,7 +4379,9 @@ static int start(int argc, char *argv[]) if(argc >= 2) { /* Non-interactive file execution */ if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); + fflush(stderr); exit_code = EXIT_FAILURE; } else { load(env, op_env, make_string(strlen(argv[1]), argv[1])); @@ -4394,14 +4400,15 @@ static int start(int argc, char *argv[]) "If you recurse too much the interpreter may crash from using too much C stack."); for(;;) { if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); + fflush(stderr); } mps_chat(); printf("%lu, %lu> ", (unsigned long)total, (unsigned long)mps_collections(arena)); fflush(stdout); - fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme-boehm.c b/mps/example/scheme/scheme-boehm.c index 8bbd25f9e7a..f912adfb38a 100644 --- a/mps/example/scheme/scheme-boehm.c +++ b/mps/example/scheme/scheme-boehm.c @@ -281,6 +281,7 @@ static void error(char *format, ...) if (error_handler) { longjmp(*error_handler, 1); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); abort(); @@ -3599,6 +3600,7 @@ int main(int argc, char *argv[]) make_operator(optab[i].name, optab[i].entry, obj_empty, obj_empty, env, op_env)); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); @@ -3608,6 +3610,7 @@ int main(int argc, char *argv[]) if(argc >= 2) { /* Non-interactive file execution */ if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); return EXIT_FAILURE; } @@ -3617,11 +3620,13 @@ int main(int argc, char *argv[]) /* Interactive read-eval-print loop */ puts("Scheme Test Harness"); for(;;) { - if(setjmp(*error_handler) != 0) + if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); + fflush(stderr); + } printf("%lu> ", (unsigned long)total); fflush(stdout); - fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme-malloc.c b/mps/example/scheme/scheme-malloc.c index 98128cbf59a..3f3d55994a8 100644 --- a/mps/example/scheme/scheme-malloc.c +++ b/mps/example/scheme/scheme-malloc.c @@ -279,6 +279,7 @@ static void error(char *format, ...) if (error_handler) { longjmp(*error_handler, 1); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); abort(); @@ -3596,6 +3597,7 @@ int main(int argc, char *argv[]) make_operator(optab[i].name, optab[i].entry, obj_empty, obj_empty, env, op_env)); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); @@ -3605,6 +3607,7 @@ int main(int argc, char *argv[]) if(argc >= 2) { /* Non-interactive file execution */ if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); return EXIT_FAILURE; } @@ -3614,11 +3617,13 @@ int main(int argc, char *argv[]) /* Interactive read-eval-print loop */ puts("Scheme Test Harness"); for(;;) { - if(setjmp(*error_handler) != 0) + if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); + fflush(stderr); + } printf("%lu> ", (unsigned long)total); fflush(stdout); - fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj); diff --git a/mps/example/scheme/scheme.c b/mps/example/scheme/scheme.c index 8ff551b7034..62ec16f2f63 100644 --- a/mps/example/scheme/scheme.c +++ b/mps/example/scheme/scheme.c @@ -401,6 +401,7 @@ static void error(const char *format, ...) if (error_handler) { longjmp(*error_handler, 1); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); abort(); @@ -3990,6 +3991,7 @@ static mps_res_t obj_scan(mps_ss_t ss, mps_addr_t base, mps_addr_t limit) break; default: assert(0); + fflush(stdout); fprintf(stderr, "Unexpected object on the heap\n"); abort(); } @@ -4066,6 +4068,7 @@ static mps_addr_t obj_skip(mps_addr_t base) break; default: assert(0); + fflush(stdout); fprintf(stderr, "Unexpected object on the heap\n"); abort(); } @@ -4296,6 +4299,7 @@ static int start(int argc, char *argv[]) make_operator(optab[i].name, optab[i].entry, obj_empty, obj_empty, env, op_env)); } else { + fflush(stdout); fprintf(stderr, "Fatal error during initialization: %s\n", error_message); @@ -4305,7 +4309,9 @@ static int start(int argc, char *argv[]) if(argc >= 2) { /* Non-interactive file execution */ if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); + fflush(stderr); exit_code = EXIT_FAILURE; } else { load(env, op_env, make_string(strlen(argv[1]), argv[1])); @@ -4324,14 +4330,15 @@ static int start(int argc, char *argv[]) "If you recurse too much the interpreter may crash from using too much C stack."); for(;;) { if(setjmp(*error_handler) != 0) { + fflush(stdout); fprintf(stderr, "%s\n", error_message); + fflush(stderr); } mps_chat(); printf("%lu, %lu> ", (unsigned long)total, (unsigned long)mps_collections(arena)); fflush(stdout); - fflush(stderr); obj = read(input); if(obj == obj_eof) break; obj = eval(env, op_env, obj);