예제 #1
0
void hklr_function_free(HklrFunction* function)
{
  hkl_list_traverse(function->stmt_list, free_statements, NULL);
  hkl_list_free(function->stmt_list);

  hkl_list_traverse(function->args_list, free_names, NULL);
  hkl_list_free(function->args_list);

  hkl_tree_traverse(function->closure_list, dec_closures, NULL);
  hkl_tree_free(function->closure_list);

  hkl_free_object(function);
}
예제 #2
0
int main(int argc, const char* argv[])
{

  HklTree* testtree = hkl_tree_new();
  HklString* testname = hkl_string_new();

  // Registered tests

  // This line gives the function "hashtest" defined in test/hash.c
  // external linkage. If you don't know what that means, don't worry bout it.
  // :P :3
  extern HklTestFunction hashtest;
  hkl_string_set_utf8(testname, "hash");
  hkl_tree_insert(testtree, testname, &hashtest);

  extern HklTestFunction gctest;
  hkl_string_set_utf8(testname, "gc");
  hkl_tree_insert(testtree, testname, &gctest);

  extern HklTestFunction traversaltest;
  hkl_string_set_utf8(testname, "traversal");
  hkl_tree_insert(testtree, testname, &traversaltest);

  if (argv[1] == NULL)
  {
    fprintf(stderr, "No test given. Exiting.\n");
    return 1;
  }

  hkl_string_set_utf8(testname, argv[1]);
  HklPair* pair = hkl_tree_search(testtree, testname);
  if (pair == NULL)
  {
    fprintf(stderr, "Test \"%s\" does not exist!\n", argv[1]);
    return 1;
  }
  
  HklTestFunction test = pair->value;

  if (test)
    test(&argv[2]);

  hkl_string_free(testname);
  hkl_tree_free(testtree);
  
  return 0;
}
예제 #3
0
파일: hkl_hash.c 프로젝트: cknadler/hkl
void hkl_hash_clear(HklHash* hash) {

  assert(hash != NULL);

  size_t i;

  HklHashElement* element = NULL;

  for (i = 0; i < hash->size; ++i)
  {
    element = &hash->buckets[i];

    if (element->is_tree)
      hkl_tree_free((HklTree*) element->data);

    else if (element->data)
      hkl_pair_free((HklPair*) element->data);

    element->is_tree = false;
    element->data = NULL;
  }

  hash->length = 0;
}