Closer to OW-compliance + removed some leaks
This commit is contained in:
parent
9c89bfbdaf
commit
4d182e1685
2
src/cg.c
2
src/cg.c
@ -6,7 +6,7 @@
|
|||||||
#include<assert.h>
|
#include<assert.h>
|
||||||
|
|
||||||
#define REGS 4
|
#define REGS 4
|
||||||
static const char *regs[REGS][3] = {{"al", "ax", "eax"}, {"bl", "bx", "ebx"}, {"cl", "cx", "ecx"}, {"dl", "dx", "edx"}, {"sil", "si", "esi"}, {"dil", "di", "edi"}};
|
static const char *regs[REGS][3] = {{"al", "ax", "eax"}, {"bl", "bx", "ebx"}, {"cl", "cx", "ecx"}, {"dl", "dx", "edx"}};
|
||||||
|
|
||||||
static const char *BINOP_SIMPLE_INSTRS[] = {[BINOP_ADD] = "add", [BINOP_SUB] = "sub", [BINOP_BITWISE_AND] = "and", [BINOP_BITWISE_OR] = "or", [BINOP_BITWISE_XOR] = "xor"};
|
static const char *BINOP_SIMPLE_INSTRS[] = {[BINOP_ADD] = "add", [BINOP_SUB] = "sub", [BINOP_BITWISE_AND] = "and", [BINOP_BITWISE_OR] = "or", [BINOP_BITWISE_XOR] = "xor"};
|
||||||
|
|
||||||
|
@ -318,3 +318,10 @@ Token *nct_lex(FILE *f) {
|
|||||||
|
|
||||||
return NULL; /* Doesn't reach here. */
|
return NULL; /* Doesn't reach here. */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void nct_lex_free(Token *tokens) {
|
||||||
|
for(Token *t = tokens; t->type != TOKEN_EOF; t++) {
|
||||||
|
if(t->content) free(t->content);
|
||||||
|
}
|
||||||
|
free(tokens);
|
||||||
|
}
|
||||||
|
@ -50,5 +50,6 @@ typedef struct {
|
|||||||
|
|
||||||
Token nct_tokenize(FILE*);
|
Token nct_tokenize(FILE*);
|
||||||
Token *nct_lex(FILE*);
|
Token *nct_lex(FILE*);
|
||||||
|
void nct_lex_free(Token *);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
19
src/parse.c
19
src/parse.c
@ -16,7 +16,7 @@ typedef struct {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
Token *tokens;
|
Token *tokens;
|
||||||
ssize_t i;
|
intmax_t i;
|
||||||
|
|
||||||
VarTable *scope;
|
VarTable *scope;
|
||||||
|
|
||||||
@ -115,15 +115,11 @@ static ASTExprPrimitive *parse_prim(Parser *P) {
|
|||||||
static void newusedef(Parser *P, VarTableEntry *v, AST *expr) {
|
static void newusedef(Parser *P, VarTableEntry *v, AST *expr) {
|
||||||
for(size_t i = 0; i < v->data.var.reachingDefs->defCount; i++) {
|
for(size_t i = 0; i < v->data.var.reachingDefs->defCount; i++) {
|
||||||
P->udsToAdd = realloc(P->udsToAdd, sizeof(*P->udsToAdd) * (++P->udsToAddCount));
|
P->udsToAdd = realloc(P->udsToAdd, sizeof(*P->udsToAdd) * (++P->udsToAddCount));
|
||||||
P->udsToAdd[P->udsToAddCount - 1] = (UseDefToAdd) {
|
P->udsToAdd[P->udsToAddCount - 1].ud.def = v->data.var.reachingDefs->defs[i];
|
||||||
.ud = {
|
P->udsToAdd[P->udsToAddCount - 1].ud.use = expr;
|
||||||
.def = v->data.var.reachingDefs->defs[i],
|
P->udsToAdd[P->udsToAddCount - 1].ud.stmt = NULL; // set by pushstmt
|
||||||
.use = expr,
|
P->udsToAdd[P->udsToAddCount - 1].ud.next = NULL;
|
||||||
.stmt = NULL, // set by pushstmt
|
P->udsToAdd[P->udsToAddCount - 1].to = v;
|
||||||
.next = NULL,
|
|
||||||
},
|
|
||||||
.to = v
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -773,9 +769,6 @@ void nct_parse_statement(Parser *P) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ASTChunk *nct_parse_chunk(Parser *P, int isTopLevel, int varPrioritize) {
|
ASTChunk *nct_parse_chunk(Parser *P, int isTopLevel, int varPrioritize) {
|
||||||
if(P->scope) {
|
|
||||||
}
|
|
||||||
|
|
||||||
AST *ret = malloc(sizeof(ASTChunk));
|
AST *ret = malloc(sizeof(ASTChunk));
|
||||||
ret->nodeKind = AST_CHUNK;
|
ret->nodeKind = AST_CHUNK;
|
||||||
ret->chunk.statementFirst = ret->chunk.statementLast = NULL;
|
ret->chunk.statementFirst = ret->chunk.statementLast = NULL;
|
||||||
|
Loading…
Reference in New Issue
Block a user