shithub: scc

Download patch

ref: 8e13bbe043062699106c14de0977215607b3e514
parent: 3434e20db04edbf858d3e128531b186c8aabcee0
author: Roberto E. Vargas Caballero <[email protected]>
date: Thu Apr 17 11:58:50 EDT 2014

Change name of the executable

This program is going to be the front-end of other program, a
backend, so it is not logical use the name cc, or kcc for
this program.

--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
 *.o
 makefile
-kcc
+cc1
 TODO
--- a/Makefile
+++ b/Makefile
@@ -2,16 +2,17 @@
 OBJS = types.o decl.o lex.o error.o symbol.o main.o expr.o \
 	wrapper.o code.o stmt.o
 
-all: kcc
 
-$(OBJS) : cc.h
+all: cc1
 
-kcc: $(OBJS)
+$(OBJS) : cc1.h
+
+cc1: $(OBJS)
 	$(CC) $(LDFLAGS) $(CFLAGS) $(LIBS) $(OBJS) -o $@
 
 clean:
 	rm -f $(OBJS)
-	rm -f kcc
+	rm -f cc1
 
 distclean: clean
 	rm -f *~
--- a/cc.h
+++ /dev/null
@@ -1,229 +1,0 @@
-#ifndef CC_H
-#define CC_H
-
-#ifndef __bool_true_and_false_defined
-#include <stdbool.h>
-#endif
-
-
-struct user_opt {
-	unsigned char implicit;
-	unsigned char mixdcls;
-	unsigned char npromote;
-	unsigned char useless;
-	unsigned char charsign;
-};
-
-extern  struct user_opt options;
-
-extern void error(const char *fmt, ...);
-extern void die(const char *fmt, ...);
-extern void warn(signed char flag, const char *fmt, ...);
-extern void *xmalloc(size_t size);
-extern void *xcalloc(size_t nmemb, size_t size);
-extern char *xstrdup(const char *s);
-extern void *xrealloc(void *buff, register size_t size);
-
-/* definitions of types */
-
-#define CTX_OUTER 0
-#define CTX_FUNC  1
-
-enum {
-	NS_IDEN = 0,
-	NS_LABEL,
-	NS_TAG,
-	NR_NAMESPACES,
-	NS_FREE
-};
-
-struct funpars;
-struct symbol;
-
-struct ctype {
-	uint8_t op;           /* type builder operator */
-	char letter;          /* letter of the type */
-	bool defined : 1; /* type defined (is not a forward reference) */
-	bool sign : 1;    /* sign type */
-	struct symbol *sym;   /* symbol of the tag identifier */
-	struct ctype *type;   /* base type */
-	struct ctype *next;   /* next element in the hash */
-	union {
-		signed char size;
-		short nelem;          /* number of elements in arrays */
-		struct funpar *pars;  /* function parameters */
-		struct field *fields; /* aggregate fields */
-	} u;
-};
-
-typedef struct ctype Type;
-
-struct field {
-	struct symbol *sym;
-	struct field *next;
-};
-
-struct funpar {
-	Type *type;
-	struct funpar *next;
-};
-
-/* definition of symbols */
-
-
-
-struct symbol {
-	char *name;
-	Type *type;
-	short id;
-	uint8_t ctx;
-	uint8_t token;
-	uint8_t ns;
-	struct {
-		bool isglobal : 1;
-		bool isstatic : 1;
-		bool isauto : 1;
-		bool isregister : 1;
-	} s;
-	union {
-		int i;
-		struct symbol *sym;
-		uint8_t ns, token;
-	} u;
-	struct symbol *next;
-	struct symbol *hash;
-};
-
-typedef struct symbol Symbol;
-
-extern void freesyms(uint8_t ns);
-
-extern Type *qualifier(Type *tp, uint8_t qlf),
-	*ctype(int8_t type, int8_t sign, int8_t size),
-	*mktype(Type *tp,
-	        uint8_t op, Symbol *tag, uint16_t nelem);
-
-extern Symbol
-	*lookup(char *s, unsigned char ns),
-	*install(char *s, unsigned char ns);
-
-extern void context(void (*fun)(void));
-
-extern Type *typename(void);
-
-extern Type *voidtype, *pvoidtype, *booltype,
-	*uchartype,   *chartype,
-	*uinttype,    *inttype,
-	*ushortype,   *shortype,
-	*longtype,    *ulongtype,
-	*ullongtype,  *llongtype,
-	*floattype,   *doubletype,  *ldoubletype;
-
-#define ISQUAL(t)    (isqual((t)->op))
-#define UNQUAL(t)    (ISQUAL(t) ? (t)->type : (t))
-#define BTYPE(t)     (UNQUAL(t)->op)
-#define isqual(op)   ((op) & TQUALIFIER)
-#define isconst(op) (((op) & (TQUALIFIER|CONST)) == \
-                                     (TQUALIFIER|CONST))
-
-
-enum {
-	FTN = 1, ENUM, TYPENAME, VOID, FLOAT, INT, BOOL,
-	STRUCT, UNION, PTR, ARY, CHAR, DOUBLE, SHORT,
-	LONG, COMPLEX, UNSIGNED, SIGNED
-};
-
-#define CONST         (1<<0)
-#define VOLATILE      (1<<1)
-#define RESTRICT      (1<<2)
-
-#define TYPEDEF       1
-#define EXTERN        2
-#define STATIC        3
-#define AUTO          4
-#define REGISTER      5
-
-#define accept(t) ((yytoken == (t)) ? next() : 0)
-#define ahead()   yyntoken
-
-enum tokens {
-	TQUALIFIER = 128, TYPE, IDEN, SCLASS,
-	CONSTANT, SIZEOF,
-	INDIR, INC, DEC, SHL, SHR,
-	LE, GE, EQ, NE, AND, OR,
-	MUL_EQ, DIV_EQ, MOD_EQ, ADD_EQ, SUB_EQ, AND_EQ,
-	XOR_EQ, OR_EQ, SHL_EQ, SHR_EQ,
-	ELLIPSIS,
-	CASE, DEFAULT, IF, ELSE, SWITCH, WHILE, DO, FOR, GOTO,
-	CONTINUE, BREAK, RETURN, EOFTOK, NOTOK
-};
-
-union yystype {
-	Symbol *sym;
-	uint8_t token;
-};
-
-extern union yystype yylval;
-extern char yytext[];
-extern uint8_t yytoken, yyntoken;
-
-extern uint8_t next(void);
-extern void expect(uint8_t tok);
-
-
-typedef struct node {
-	void (*code)(struct node *);
-	Type *type;
-	struct {
-		bool lvalue : 1;
-	} b;
-	union unode {
-		Symbol *sym;
-		Type *type;
-		char op;
-	} u;
-	struct node *childs[];
-} Node;
-
-typedef void (*Inst)(Node *); /* TODO: remove this typedef */
-
-enum {
-	OCAST = 1, OPTR, OADD, OARY, OSIZE, OMUL, OSUB,
-	OINC, ODEC, OPINC, OPDEC, ODIV, OMOD, OSHL, OSHR,
-	OBAND, OBXOR, OBOR, OASSIGN, OA_MUL, OA_DIV,
-	OA_MOD, OA_ADD, OA_SUB, OA_SHL, OA_SHR,
-	OA_AND, OA_XOR, OA_OR, OADDR,ONEG, OCPL, OEXC,
-	OCOMMA,
-	/*
-	  * Complementary relational operators only differ in less
-	 * significant bit
-	 */
-	OEQ = 0x40, ONE, OLT, OGE, OLE, OGT, OAND, OOR
-};
-
-extern void
-	emitdcl(Symbol *), emitsframe(Symbol *), emiteframe(Symbol *),
-	emitsym(Node *), emitunary(Node *),
-	emitbin(Node *), emitexp(Node *), emitconst(Node *np),
-	emitprint(Node *);
-
-extern Node
-	*node(Inst code, Type *tp, union unode u, uint8_t nchilds),
-	*unarycode(char op, Type *tp, Node *child),
-	*bincode(char op, Type *tp, Node *np1, Node *np2),
-	*castcode(Node *child, Type *tp),
-	*sizeofcode(Type *tp), 
-	*ternarycode(Node *cond, Node *ifyes, Node *ifno),
-	*constcode(Symbol *sym);
-
-#define SYM(s) ((union unode) {.sym = s})
-#define OP(s) ((union unode) {.op = s})
-#define TYP(s) ((union unode) {.type = s})
-#define ISNODESYM(n) ((n)->code == emitsym)
-#define ISNODEBIN(n) ((n)->code == emitbin)
-#define ISNODELOG(n) (ISNODEBIN(n) && (n)->u.op & 0x40)
-
-extern Node *expr(void);
-extern void extdecl(void), decl(void), compound(void);
-
-#endif
--- /dev/null
+++ b/cc1.h
@@ -1,0 +1,229 @@
+#ifndef CC_H
+#define CC_H
+
+#ifndef __bool_true_and_false_defined
+#include <stdbool.h>
+#endif
+
+
+struct user_opt {
+	unsigned char implicit;
+	unsigned char mixdcls;
+	unsigned char npromote;
+	unsigned char useless;
+	unsigned char charsign;
+};
+
+extern  struct user_opt options;
+
+extern void error(const char *fmt, ...);
+extern void die(const char *fmt, ...);
+extern void warn(signed char flag, const char *fmt, ...);
+extern void *xmalloc(size_t size);
+extern void *xcalloc(size_t nmemb, size_t size);
+extern char *xstrdup(const char *s);
+extern void *xrealloc(void *buff, register size_t size);
+
+/* definitions of types */
+
+#define CTX_OUTER 0
+#define CTX_FUNC  1
+
+enum {
+	NS_IDEN = 0,
+	NS_LABEL,
+	NS_TAG,
+	NR_NAMESPACES,
+	NS_FREE
+};
+
+struct funpars;
+struct symbol;
+
+struct ctype {
+	uint8_t op;           /* type builder operator */
+	char letter;          /* letter of the type */
+	bool defined : 1; /* type defined (is not a forward reference) */
+	bool sign : 1;    /* sign type */
+	struct symbol *sym;   /* symbol of the tag identifier */
+	struct ctype *type;   /* base type */
+	struct ctype *next;   /* next element in the hash */
+	union {
+		signed char size;
+		short nelem;          /* number of elements in arrays */
+		struct funpar *pars;  /* function parameters */
+		struct field *fields; /* aggregate fields */
+	} u;
+};
+
+typedef struct ctype Type;
+
+struct field {
+	struct symbol *sym;
+	struct field *next;
+};
+
+struct funpar {
+	Type *type;
+	struct funpar *next;
+};
+
+/* definition of symbols */
+
+
+
+struct symbol {
+	char *name;
+	Type *type;
+	short id;
+	uint8_t ctx;
+	uint8_t token;
+	uint8_t ns;
+	struct {
+		bool isglobal : 1;
+		bool isstatic : 1;
+		bool isauto : 1;
+		bool isregister : 1;
+	} s;
+	union {
+		int i;
+		struct symbol *sym;
+		uint8_t ns, token;
+	} u;
+	struct symbol *next;
+	struct symbol *hash;
+};
+
+typedef struct symbol Symbol;
+
+extern void freesyms(uint8_t ns);
+
+extern Type *qualifier(Type *tp, uint8_t qlf),
+	*ctype(int8_t type, int8_t sign, int8_t size),
+	*mktype(Type *tp,
+	        uint8_t op, Symbol *tag, uint16_t nelem);
+
+extern Symbol
+	*lookup(char *s, unsigned char ns),
+	*install(char *s, unsigned char ns);
+
+extern void context(void (*fun)(void));
+
+extern Type *typename(void);
+
+extern Type *voidtype, *pvoidtype, *booltype,
+	*uchartype,   *chartype,
+	*uinttype,    *inttype,
+	*ushortype,   *shortype,
+	*longtype,    *ulongtype,
+	*ullongtype,  *llongtype,
+	*floattype,   *doubletype,  *ldoubletype;
+
+#define ISQUAL(t)    (isqual((t)->op))
+#define UNQUAL(t)    (ISQUAL(t) ? (t)->type : (t))
+#define BTYPE(t)     (UNQUAL(t)->op)
+#define isqual(op)   ((op) & TQUALIFIER)
+#define isconst(op) (((op) & (TQUALIFIER|CONST)) == \
+                                     (TQUALIFIER|CONST))
+
+
+enum {
+	FTN = 1, ENUM, TYPENAME, VOID, FLOAT, INT, BOOL,
+	STRUCT, UNION, PTR, ARY, CHAR, DOUBLE, SHORT,
+	LONG, COMPLEX, UNSIGNED, SIGNED
+};
+
+#define CONST         (1<<0)
+#define VOLATILE      (1<<1)
+#define RESTRICT      (1<<2)
+
+#define TYPEDEF       1
+#define EXTERN        2
+#define STATIC        3
+#define AUTO          4
+#define REGISTER      5
+
+#define accept(t) ((yytoken == (t)) ? next() : 0)
+#define ahead()   yyntoken
+
+enum tokens {
+	TQUALIFIER = 128, TYPE, IDEN, SCLASS,
+	CONSTANT, SIZEOF,
+	INDIR, INC, DEC, SHL, SHR,
+	LE, GE, EQ, NE, AND, OR,
+	MUL_EQ, DIV_EQ, MOD_EQ, ADD_EQ, SUB_EQ, AND_EQ,
+	XOR_EQ, OR_EQ, SHL_EQ, SHR_EQ,
+	ELLIPSIS,
+	CASE, DEFAULT, IF, ELSE, SWITCH, WHILE, DO, FOR, GOTO,
+	CONTINUE, BREAK, RETURN, EOFTOK, NOTOK
+};
+
+union yystype {
+	Symbol *sym;
+	uint8_t token;
+};
+
+extern union yystype yylval;
+extern char yytext[];
+extern uint8_t yytoken, yyntoken;
+
+extern uint8_t next(void);
+extern void expect(uint8_t tok);
+
+
+typedef struct node {
+	void (*code)(struct node *);
+	Type *type;
+	struct {
+		bool lvalue : 1;
+	} b;
+	union unode {
+		Symbol *sym;
+		Type *type;
+		char op;
+	} u;
+	struct node *childs[];
+} Node;
+
+typedef void (*Inst)(Node *); /* TODO: remove this typedef */
+
+enum {
+	OCAST = 1, OPTR, OADD, OARY, OSIZE, OMUL, OSUB,
+	OINC, ODEC, OPINC, OPDEC, ODIV, OMOD, OSHL, OSHR,
+	OBAND, OBXOR, OBOR, OASSIGN, OA_MUL, OA_DIV,
+	OA_MOD, OA_ADD, OA_SUB, OA_SHL, OA_SHR,
+	OA_AND, OA_XOR, OA_OR, OADDR,ONEG, OCPL, OEXC,
+	OCOMMA,
+	/*
+	  * Complementary relational operators only differ in less
+	 * significant bit
+	 */
+	OEQ = 0x40, ONE, OLT, OGE, OLE, OGT, OAND, OOR
+};
+
+extern void
+	emitdcl(Symbol *), emitsframe(Symbol *), emiteframe(Symbol *),
+	emitsym(Node *), emitunary(Node *),
+	emitbin(Node *), emitexp(Node *), emitconst(Node *np),
+	emitprint(Node *);
+
+extern Node
+	*node(Inst code, Type *tp, union unode u, uint8_t nchilds),
+	*unarycode(char op, Type *tp, Node *child),
+	*bincode(char op, Type *tp, Node *np1, Node *np2),
+	*castcode(Node *child, Type *tp),
+	*sizeofcode(Type *tp), 
+	*ternarycode(Node *cond, Node *ifyes, Node *ifno),
+	*constcode(Symbol *sym);
+
+#define SYM(s) ((union unode) {.sym = s})
+#define OP(s) ((union unode) {.op = s})
+#define TYP(s) ((union unode) {.type = s})
+#define ISNODESYM(n) ((n)->code == emitsym)
+#define ISNODEBIN(n) ((n)->code == emitbin)
+#define ISNODELOG(n) (ISNODEBIN(n) && (n)->u.op & 0x40)
+
+extern Node *expr(void);
+extern void extdecl(void), decl(void), compound(void);
+
+#endif
--- a/code.c
+++ b/code.c
@@ -2,7 +2,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
-#include "cc.h"
+#include "cc1.h"
 
 char *opcodes[] = {
 	[OADD] = "+",
--- a/decl.c
+++ b/decl.c
@@ -4,7 +4,7 @@
 #include <string.h>
 
 #include "sizes.h"
-#include "cc.h"
+#include "cc1.h"
 
 #define ID_EXPECTED     1
 #define ID_ACCEPTED     2
--- a/error.c
+++ b/error.c
@@ -4,7 +4,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
-#include "cc.h"
+#include "cc1.h"
 
 extern unsigned linenum;
 extern unsigned columnum;
--- a/expr.c
+++ b/expr.c
@@ -1,7 +1,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
-#include "cc.h"
+#include "cc1.h"
 
 #define SWAP(x1, x2, t) (t = x1, x1 = x2, x2 = t)
 #define GETBTYPE(n, tp, t) ((t) = (tp = UNQUAL(n->type))->op)
--- a/lex.c
+++ b/lex.c
@@ -5,7 +5,7 @@
 #include <string.h>
 #include <ctype.h>
 
-#include "cc.h"
+#include "cc1.h"
 #include "sizes.h"
 
 static FILE *yyin;
--- a/main.c
+++ b/main.c
@@ -3,7 +3,7 @@
 #include <stdint.h>
 #include <stdio.h>
 
-#include "cc.h"
+#include "cc1.h"
 
 extern void init_keywords(void),
 	open_file(const char *file),  init_expr(void);
--- a/stmt.c
+++ b/stmt.c
@@ -2,7 +2,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "cc.h"
+#include "cc1.h"
 
 Symbol *curfun;
 
--- a/symbol.c
+++ b/symbol.c
@@ -4,7 +4,7 @@
 #include <stdlib.h>
 #include <string.h>
 
-#include "cc.h"
+#include "cc1.h"
 
 #define NR_SYM_HASH 32
 
--- a/types.c
+++ b/types.c
@@ -4,7 +4,7 @@
 #include <string.h>
 
 #include "sizes.h"
-#include "cc.h"
+#include "cc1.h"
 
 #define NR_TYPE_HASH 16
 
--- a/wrapper.c
+++ b/wrapper.c
@@ -4,7 +4,7 @@
 
 #include <stdint.h>
 
-#include "cc.h"
+#include "cc1.h"
 
 
 static void