int main( int argc, char **argv ) { char *buffer; size_t length; struct program *basic_program; int error; progname = argv[0]; if( argc < 2 ) { fprintf( stderr, "%s: usage: %s <basic file>\n", progname, progname ); return 1; } error = utils_read_file( &buffer, &length, argv[1] ); if( error ) return error; basic_program = parse_program( buffer, length ); if( !basic_program ) return 1; free( buffer ); error = interpret_program( basic_program ); if( error ) { program_free( basic_program ); return error; } if( program_free( basic_program ) ) { fprintf( stderr, "%s: error freeing program\n", progname ); return 1; } return 0; }
tvm_t* tvm_create(char* filename) { tvm_t* vm = (tvm_t*)malloc(sizeof(tvm_t)); if(!vm) return NULL; vm->pMemory = create_memory(MIN_MEMORY_SIZE); if(!vm->pMemory) { free(vm); return NULL; } vm->pProgram = create_program(); if(!vm->pProgram) { destroy_memory(vm->pMemory); free(vm); return NULL; } create_stack(vm->pMemory, MIN_STACK_SIZE); if(interpret_program(vm->pProgram, filename, vm->pMemory) != 0) { // avoid memory leak when the interpret_program failed! tvm_destroy(vm); return NULL; } //if(!vm || !vm->pMemory || !vm->pProgram) return NULL; return vm; }
tvm_t* tvm_create(char* filename) { tvm_t* vm = (tvm_t*)malloc(sizeof(tvm_t)); vm->pMemory = create_memory(MIN_MEMORY_SIZE); vm->pProgram = create_program(); create_stack(vm->pMemory, MIN_STACK_SIZE); if(interpret_program(vm->pProgram, filename, vm->pMemory) != 0) return NULL; if(!vm || !vm->pMemory || !vm->pProgram) return NULL; return vm; }
int tvm_interpret(tvm_t* vm, char* filename) { if(interpret_program(vm->pProgram, filename, vm->pMemory) != 0) return 1; return 0; }