shithub: scc

Download patch

ref: d5735ceb7f5deac28bda7a2daf2e02efa15287c3
parent: 8067b9f717456ef392c6d2d1b1c079e5b0bdf090
author: Roberto E. Vargas Caballero <[email protected]>
date: Wed Mar 19 14:15:51 EDT 2014

Remove flow.c

We are refactoring the code, so if we eliminate some code it is easier
to refactor

--- a/flow.c
+++ /dev/null
@@ -1,266 +1,0 @@
-
-#include <assert.h>
-#include <stdint.h>
-#include <stdio.h>
-
-#include "cc.h"
-#include "symbol.h"
-#include "tokens.h"
-#include "syntax.h"
-#include "sizes.h"
-
-static struct node *stmt(void);
-
-
-static unsigned char blocks[NR_BLOCK];
-static unsigned char *blockp = blocks;
-struct symbol *curfun;
-
-static void
-push(register unsigned char b)
-{
-	if (blockp == &blocks[NR_BLOCK])
-		error("Too much nesting levels");
-	*blockp++ = b;
-}
-
-static void
-pop(void)
-{
-	assert(blockp >= blocks);
-	--blockp;
-}
-
-static struct node *
-Goto(void)
-{
-	register struct node *np;
-	register struct symbol *sym;
-
-
-	expect(GOTO);
-	expect(IDEN);
-	sym = lookup(yytext, NS_LABEL);
-	/* TODO: create the jump */
-	expect(';');
-
-	return np;
-}
-
-static struct node *
-While(void)
-{
-	register struct node *cond, *np;
-
-	expect(WHILE);
-	expect('(');
-	cond = expr();
-	expect(')');
-	push(OWHILE);
-	np = node(OWHILE, cond, stmt());
-	pop();
-	return np;
-}
-
-static struct node *
-Do(void)
-{
-	register struct node *cond, *body, *np;
-
-	expect(DO);
-	body = stmt();
-	expect(WHILE);
-	expect('(');
-	cond = expr();
-	expect(')');
-
-	push(ODO);
-	np = node(ODO, body, cond);
-	pop();
-	return np;
-}
-
-static struct node *
-For(void)
-{
-	register struct node *exp1, *exp2, *exp3;
-	struct node *np;
-
-	expect(FOR);
-	expect('(');
-	exp1 = expr();
-	expect(';');
-	exp2 = expr();
-	expect(';');
-	exp3 = expr();
-	expect(')');
-
-	push(OFOR);
-	np = node(OFOR, exp1,
-	          node(O2EXP, exp2,
-	               node(O2EXP, exp3, stmt())));
-	pop();
-	return np;
-}
-
-static struct node *
-If(void)
-{
-	register struct node *cond, *body;
-
-	expect(IF);
-	expect('(');
-	cond = expr();
-	expect(')');
-	body = stmt();
-
-	return node(OIF, cond,
-	            node(O2EXP, body, (accept(ELSE)) ? stmt() : NULL));
-}
-
-static struct node *
-Switch(void)
-{
-	register struct node *cond, *np;
-
-	expect(SWITCH);
-	expect('(');
-	cond = expr();
-	expect(')');
-
-	push(OSWITCH);
-	np = node(OSWITCH, cond, stmt());
-	pop();
-	return np;
-}
-
-static struct node *
-label(void)
-{
-
-	/* TODO: detect repeated labels */
-	/* TODO: install in symbol table */
-	next(), next();  	/* skip IDEN and ':' */
-	/* TODO: Do something */
-}
-
-static struct node *
-Break(void)
-{
-	expect(BREAK);
-	expect(';');
-	if (blockp == blocks)
-		error("break statement not within loop or switch");
-	return node(OBREAK, NULL, NULL);
-}
-
-static struct node *
-Continue(void)
-{
-	register unsigned char *bp;
-
-	expect(CONTINUE);
-	expect(';');
-
-	for (bp = blocks; bp < blockp && *bp == OSWITCH; ++bp)
-		; /* nothing */
-	if (bp == blockp)
-		error("continue statement not within loop");
-
-	return node(OCONT, NULL, NULL);
-}
-
-static struct node *
-Return(void)
-{
-	register struct node *np;
-
-	expect(RETURN);
-	np = expr();
-	expect(';');
-
-	return node(ORETURN, np, NULL);
-}
-
-static struct node *
-Case(void)
-{
-	register unsigned char *bp;
-	register struct node *np, *exp;
-
-	expect(CASE);
-	exp = expr();
-	/* TODO: check if exp is constant */
-	/* TODO: Check if the type is correct */
-	for (bp = blocks; bp < blockp && *bp != OSWITCH; ++bp)
-		; /* nothing */
-	if (bp == blockp)
-		error("case statement not within switch");
-	np = node(OCASE, exp, NULL);
-	expect(':');
-	return np;
-}
-
-static struct node *
-Default(void)
-{
-	register unsigned char *bp;
-
-	expect(DEFAULT);
-	for (bp = blocks; bp < blockp && *bp != OSWITCH; ++bp)
-		; /* nothing */
-	if (bp == blockp)
-		error("default statement not within switch");
-	expect(':');
-	return node(ODEFAULT, NULL, NULL);
-}
-
-static struct node *
-compound(void)
-{
-	expect('{');
-
-repeat:	switch (yytoken) {
-	case TYPE: case SCLASS: case TQUALIFIER:
-		decl();
-		goto repeat;
-	case '}':
-		next();
-		return NULL;
-	default:
-		stmt();
-		goto repeat;
-	}
-}
-
-static struct node *
-stmt(void)
-{
-	register struct node *np;
-
-	switch (yytoken) {
-	case '{':      return context(compound);
-	case SWITCH:   return Switch();
-	case IF:       return If();
-	case FOR:      return For();
-	case DO:       return Do();
-	case WHILE:    return While();
-	case CONTINUE: return Continue();
-	case BREAK:    return Break();
-	case RETURN:   return Return();
-	case GOTO:     return Goto();
-	case CASE:     return Case();
-	case DEFAULT:  return Default();
-	case IDEN:     if (ahead() == ':') return label();
-	}
-	np = expr();
-	expect(';');
-	return np;
-}
-
-struct node *
-function(void)
-{
-	return node(OFTN, compound(), NULL);
-}
-