summaryrefslogtreecommitdiffstats
path: root/compile.c
diff options
context:
space:
mode:
authorStephen Dolan <mu@netsoc.tcd.ie>2012-12-18 16:52:47 +0000
committerStephen Dolan <mu@netsoc.tcd.ie>2012-12-18 16:53:51 +0000
commit04daafbde36ab696069a9df17ff85629574491c4 (patch)
tree66bff8def53de1a0f27038d880bd1306dc2ced39 /compile.c
parent75421cbfe32ae6428fe08b6ba83f1f7ac0322c33 (diff)
Add wrappers for malloc/realloc/free. See #43.
Diffstat (limited to 'compile.c')
-rw-r--r--compile.c20
1 files changed, 11 insertions, 9 deletions
diff --git a/compile.c b/compile.c
index 3a094721..139b64bc 100644
--- a/compile.c
+++ b/compile.c
@@ -1,3 +1,4 @@
+#define _GNU_SOURCE // for strdup
#include <assert.h>
#include <string.h>
#include <stdlib.h>
@@ -5,6 +6,7 @@
#include "compile.h"
#include "bytecode.h"
#include "locfile.h"
+#include "jv_alloc.h"
/*
The intermediate representation for jq filters is as a sequence of
@@ -57,7 +59,7 @@ struct inst {
};
static inst* inst_new(opcode op) {
- inst* i = malloc(sizeof(inst));
+ inst* i = jv_mem_alloc(sizeof(inst));
i->next = i->prev = 0;
i->op = op;
i->bytecode_pos = -1;
@@ -70,13 +72,13 @@ static inst* inst_new(opcode op) {
}
static void inst_free(struct inst* i) {
- free(i->symbol);
+ jv_mem_free(i->symbol);
block_free(i->subfn);
block_free(i->arglist);
if (opcode_describe(i->op)->flags & OP_HAS_CONSTANT) {
jv_free(i->imm.constant);
}
- free(i);
+ jv_mem_free(i);
}
static block inst_block(inst* i) {
@@ -546,10 +548,10 @@ static int compile(struct locfile* locations, struct bytecode* bc, block b) {
}
}
if (bc->nsubfunctions) {
- bc->subfunctions = malloc(sizeof(struct bytecode*) * bc->nsubfunctions);
+ bc->subfunctions = jv_mem_alloc(sizeof(struct bytecode*) * bc->nsubfunctions);
for (inst* curr = b.first; curr; curr = curr->next) {
if (curr->op == CLOSURE_CREATE) {
- struct bytecode* subfn = malloc(sizeof(struct bytecode));
+ struct bytecode* subfn = jv_mem_alloc(sizeof(struct bytecode));
bc->subfunctions[curr->imm.intval] = subfn;
subfn->globals = bc->globals;
subfn->parent = bc;
@@ -568,7 +570,7 @@ static int compile(struct locfile* locations, struct bytecode* bc, block b) {
bc->subfunctions = 0;
}
bc->codelen = pos;
- uint16_t* code = malloc(sizeof(uint16_t) * bc->codelen);
+ uint16_t* code = jv_mem_alloc(sizeof(uint16_t) * bc->codelen);
bc->code = code;
pos = 0;
jv constant_pool = jv_array();
@@ -620,13 +622,13 @@ static int compile(struct locfile* locations, struct bytecode* bc, block b) {
}
int block_compile(block b, struct locfile* locations, struct bytecode** out) {
- struct bytecode* bc = malloc(sizeof(struct bytecode));
+ struct bytecode* bc = jv_mem_alloc(sizeof(struct bytecode));
bc->parent = 0;
bc->nclosures = 0;
- bc->globals = malloc(sizeof(struct symbol_table));
+ bc->globals = jv_mem_alloc(sizeof(struct symbol_table));
int ncfunc = count_cfunctions(b);
bc->globals->ncfunctions = 0;
- bc->globals->cfunctions = malloc(sizeof(struct cfunction) * ncfunc);
+ bc->globals->cfunctions = jv_mem_alloc(sizeof(struct cfunction) * ncfunc);
int nerrors = compile(locations, bc, b);
assert(bc->globals->ncfunctions == ncfunc);
if (nerrors > 0) {