From 1a1f8f8e63241884196aa2702864293cf152f282 Mon Sep 17 00:00:00 2001 From: Pragmatic Software Date: Fri, 16 Jan 2015 17:30:09 -0800 Subject: [PATCH] Correct handling of no-output --- modules/compiler_vm/languages/c11.pm | 2 +- .../compiler_vm/languages/server/_c_base.pm | 2 + .../server/_c_base.pm_2015-01-15-01:25:37~ | 39 +++++++++++++++++++ .../compiler_vm/languages/server/_default.pm | 1 - .../compiler_vm/languages/server/tendra.pm | 2 + 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100755 modules/compiler_vm/languages/server/_c_base.pm_2015-01-15-01:25:37~ diff --git a/modules/compiler_vm/languages/c11.pm b/modules/compiler_vm/languages/c11.pm index 5a878be2..2711d870 100755 --- a/modules/compiler_vm/languages/c11.pm +++ b/modules/compiler_vm/languages/c11.pm @@ -11,7 +11,7 @@ sub initialize { $self->{sourcefile} = 'prog.c'; $self->{execfile} = 'prog'; - $self->{default_options} = '-Wextra -Wall -Wno-unused -pedantic -Wfloat-equal -Wshadow -std=c11 -lm -Wfatal-errors -fsanitize=bounds -fsanitize=alignment'; + $self->{default_options} = '-Wextra -Wall -Wno-unused -pedantic -Wfloat-equal -Wshadow -std=c11 -lm -Wfatal-errors -fsanitize=bounds -fsanitize=alignment -fno-diagnostics-show-caret'; $self->{cmdline} = 'gcc -ggdb -g3 $sourcefile $options -o $execfile'; $self->{prelude} = <<'END'; diff --git a/modules/compiler_vm/languages/server/_c_base.pm b/modules/compiler_vm/languages/server/_c_base.pm index fe901762..8d7aad49 100755 --- a/modules/compiler_vm/languages/server/_c_base.pm +++ b/modules/compiler_vm/languages/server/_c_base.pm @@ -31,6 +31,8 @@ sub postprocess { $result =~ s/\s+$//; + $self->{no_output} = 1 if not length $result; + $self->{output} .= $result; } diff --git a/modules/compiler_vm/languages/server/_c_base.pm_2015-01-15-01:25:37~ b/modules/compiler_vm/languages/server/_c_base.pm_2015-01-15-01:25:37~ new file mode 100755 index 00000000..554965b8 --- /dev/null +++ b/modules/compiler_vm/languages/server/_c_base.pm_2015-01-15-01:25:37~ @@ -0,0 +1,39 @@ +#!/usr/bin/perl + +use warnings; +use strict; + +package _c_base; +use parent '_default'; + +sub postprocess { + my $self = shift; + + print "c11 postprocessing\n"; + + # no errors compiling, but if output contains something, it must be diagnostic messages + if(length $self->{output}) { + $self->{output} =~ s/^\s+//; + $self->{output} =~ s/\s+$//; + $self->{output} = "[$self->{output}]\n"; + } + + print "Executing gdb\n"; + my $input_quoted = quotemeta $self->{input}; + $input_quoted =~ s/\\"/"'\\"'"/g; + my ($retval, $result) = $self->execute(60, "bash -c \"date -s \@$self->{date}; ulimit -t 1; compiler_watchdog.pl $input_quoted > .output\""); + + $result = ""; + open(FILE, '.output'); + while() { + $result .= $_; + last if length $result >= 1024 * 20; + } + close(FILE); + + $result =~ s/\s+$//; + + $self->{output} .= $result; +} + +1; diff --git a/modules/compiler_vm/languages/server/_default.pm b/modules/compiler_vm/languages/server/_default.pm index 5b511b0f..3a7916f8 100755 --- a/modules/compiler_vm/languages/server/_default.pm +++ b/modules/compiler_vm/languages/server/_default.pm @@ -44,7 +44,6 @@ sub preprocess { } sub postprocess { - print "_default postprocessing\n"; } sub execute { diff --git a/modules/compiler_vm/languages/server/tendra.pm b/modules/compiler_vm/languages/server/tendra.pm index c46bd721..d1bfa530 100755 --- a/modules/compiler_vm/languages/server/tendra.pm +++ b/modules/compiler_vm/languages/server/tendra.pm @@ -30,6 +30,8 @@ sub postprocess { $result =~ s/\s+$//; + $self->{no_output} = 1 if not length $result; + $self->{output} .= $result; }