/* Copyright (c) 1993 Stephen F. White */
#include <stdio.h>
#include "config.h"
#include "cool.h"
#include "proto.h"
#include "sys_proto.h"
#include "code.h"
Inst *machine;
int progi, machine_size;
int
code(int inst)
{
Inst *new_machine;
int i;
if (!machine || !machine_size) {
code_init();
}
if (progi >= machine_size) {
new_machine = MALLOC(Inst, machine_size *= 2);
for (i = 0; i < progi; i++) {
new_machine[i] = machine[i];
}
FREE(machine);
machine = new_machine;
}
machine[progi++] = inst;
return progi - 1;
}
void
code_copy(Method *m)
{
int i;
if (progi) {
m->code = MALLOC(Inst, progi);
for (i = 0; i < progi; i++) {
m->code[i] = machine[i];
}
} else {
m->code = 0;
}
m->ninst = progi;
if (machine) {
FREE(machine);
}
machine_size = 0;
machine = 0;
progi = 0;
}
void
code_init(void)
{
machine = MALLOC(Inst, machine_size = CODE_INIT_SIZE);
progi = 0;
}