shithub: scc

ref: 30d5a2c869c5f47cca98fdedb9024d462c6b9191
dir: /cc2/main.c/

View raw version
static char sccsid[] = "@(#) ./cc2/main.c";
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>

#include "../inc/scc.h"
#include "cc2.h"
#include "error.h"

void
error(unsigned nerror, ...)
{
	va_list va;
	va_start(va, nerror);
	vfprintf(stderr, errlist[nerror], va);
	va_end(va);
	putc('\n', stderr);
	exit(1);
}

static int
moreinput(void)
{
	int c;

repeat:
	if (feof(stdin))
		return 0;
	if ((c = getchar()) == '\n' || c == EOF)
		goto repeat;
	ungetc(c, stdin);
	return 1;
}

int
main(int argc, char *argv[])
{
	if (argc > 2)
		die("usage: cc2 [irfile]");

	if (argv[1] && !freopen(argv[1], "r", stdin))
		die("cc2: cannot open %s", argv[1]);

	while (moreinput()) {
		parse();
		apply(optm_ind);
		apply(optm_dep);
		apply(sethi);
		apply(cgen);
		getbblocks();  /* TODO: run apply over asm ins too */
		peephole();
		writeout();
	}
	return 0;
}