Esempio n. 1
0
static void set_method_external_nominal(reach_type_t* t, const char* name)
{
  reach_method_name_t* n = reach_method_name(t, name);
  if(n != NULL)
  {
    size_t i = HASHMAP_BEGIN;
    reach_method_t* m;
    while((m = reach_methods_next(&n->r_methods, &i)) != NULL)
    {
      LLVMSetFunctionCallConv(m->func, LLVMCCallConv);
      LLVMSetLinkage(m->func, LLVMExternalLinkage);
    }
  }
}
Esempio n. 2
0
void genprim_donotoptimise_methods(compile_t* c, reach_type_t* t)
{
  size_t i = HASHMAP_BEGIN;
  reach_method_name_t* mn;

  const char* str_apply = stringtab("apply");
  while((mn = reach_method_names_next(&t->methods, &i)) != NULL)
  {
    if(mn->name == str_apply)
    {
      size_t j = HASHMAP_BEGIN;
      reach_method_t* m;
      while((m = reach_methods_next(&mn->r_methods, &j)) != NULL)
        donotoptimise_apply(c, t, m);
      break;
    }
  }
  donotoptimise_observe(c, t);
}
Esempio n. 3
0
static void set_method_external_interface(reach_type_t* t, const char* name)
{
  set_method_external_nominal(t, name);

  size_t i = HASHMAP_BEGIN;
  reach_type_t* sub;
  while((sub = reach_type_cache_next(&t->subtypes, &i)) != NULL)
  {
    reach_method_name_t* n = reach_method_name(sub, name);
    if(n == NULL)
      continue;
    size_t j = HASHMAP_BEGIN;
    reach_method_t* m;
    while((m = reach_methods_next(&n->r_methods, &j)) != NULL)
    {
      LLVMSetFunctionCallConv(m->func, LLVMCCallConv);
      LLVMSetLinkage(m->func, LLVMExternalLinkage);
    }
  }
}