Home
       main.c - scc - simple c99 compiler
  HTML git clone git://git.simple-cc.org/scc
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
       main.c (998B)
       ---
            1 #include <errno.h>
            2 #include <stdarg.h>
            3 #include <stdio.h>
            4 #include <stdlib.h>
            5 #include <string.h>
            6 
            7 #include <scc/arg.h>
            8 #include <scc/scc.h>
            9 #include "cc2.h"
           10 #include "error.h"
           11 
           12 char *argv0;
           13 
           14 void
           15 error(unsigned nerror, ...)
           16 {
           17         va_list va;
           18         va_start(va, nerror);
           19         fputs("cc2:", stderr);
           20         vfprintf(stderr, errlist[nerror], va);
           21         va_end(va);
           22         putc('\n', stderr);
           23         exit(1);
           24 }
           25 
           26 static int
           27 moreinput(void)
           28 {
           29         int c;
           30 
           31 repeat:
           32         if (feof(stdin))
           33                 return 0;
           34         if ((c = getchar()) == '\n' || c == EOF)
           35                 goto repeat;
           36         ungetc(c, stdin);
           37         return 1;
           38 }
           39 
           40 static void
           41 usage(void)
           42 {
           43         fputs("usage: cc2 [irfile]\n", stderr);
           44         exit(1);
           45 }
           46 
           47 int
           48 main(int argc, char *argv[])
           49 {
           50         ARGBEGIN {
           51         default:
           52                 usage();
           53         } ARGEND
           54 
           55         if (argv[0] && !freopen(argv[0], "r", stdin))
           56                 die("cc2: %s: %s", argv[0], strerror(errno));
           57 
           58         while (moreinput()) {
           59                 parse();
           60                 apply(optm_ind);
           61                 apply(optm_dep);
           62                 apply(sethi);
           63                 apply(cgen);
           64                 getbblocks();  /* TODO: run apply over asm ins too */
           65                 peephole();
           66                 writeout();
           67         }
           68         return 0;
           69 }