view share/candide @ 12499:3810b2f1f7f0 draft default tip

<FireFly> ` grep -v FireFly /hackenv/bin/olist >/tmp/foo && cat /tmp/foo >/hackenv/bin/olist
author HackEso <hackeso@esolangs.org>
date Wed, 10 Apr 2024 14:45:21 +0000
parents c989a1669243
children
line wrap: on
line source

#!/bin/bash
# compile c from stdin
# candide, kinda

readinput () {
  while read -r -e || { printf %s "$REPLY"; false; } ; do
    printf '%s\n' "$REPLY"
  done
}

c="$*"
args=""; while [[ "$c" =~ ^(-[^ ]*)\ (.*) ]]; do args="$args ${BASH_REMATCH[1]}"; c="${BASH_REMATCH[2]}"; done
if ! [[ $c ]] || ! out=$(mktemp); then
  echo Error >&2
  exit 1
fi

# if you don't write 'main' it assumes that you're writing a full program (with free includes)
# this allows you to use other functions and stuff
# it will get false positives, but who cares?
if [[ $c != *main* ]]; then c=$(cat <<SOURCE
int main(int argc, char *argv[]) {
$c
  return 0;
}
SOURCE
); fi

# will replace ${args--O0} with the parameters
gcc -o "$out" -x c -I /hackenv/share ${args--O0} /dev/fd/0 <<SOURCE && { "$out" && { rm -f "$out"; true; }; }
#include "headers"    /* precompiled headers */
$c
SOURCE