Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
0
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;
}
Exemple #4
0
int tvm_interpret(tvm_t* vm, char* filename)
{
	if(interpret_program(vm->pProgram, filename, vm->pMemory) != 0) return 1;
	return 0;
}