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
static void ctx_free_programs(struct context *ctx)
{
	struct program *p = NULL;
	list_t         ps = ctx->programs;

	while ((p = list_pop(&ps)) && p) {
		program_free(p);
	}
}
Exemple #3
0
static int
interpret_program( struct program *program )
{
  if( program_find_functions( program ) ) {
    fprintf( stderr, "%s: error finding functions\n", progname );
    return 1;
  }

  while( !program->error ) {
    if( program_execute_statement( program ) ) {
      program_free( program );
      return 1;
    }
  }

  printf( "%s\n", program_strerror( program->error ) );

  return 0;
}
Exemple #4
0
void ast_free(ast_t* ast)
{
  if(ast == NULL)
    return;

  ast_t* child = ast->child;
  ast_t* next;

  while(child != NULL)
  {
    next = child->sibling;
    ast_free(child);
    child = next;
  }

  ast_free(ast->type);

  switch(token_get_id(ast->t))
  {
    case TK_PROGRAM:
      program_free((program_t*)ast->data);
      break;

    case TK_PACKAGE:
      package_free((package_t*)ast->data);
      break;

    case TK_MODULE:
      source_close((source_t*)ast->data);
      break;

    default:
      break;
  }

  token_free(ast->t);
  symtab_free(ast->symtab);
  POOL_FREE(ast_t, ast);
}