Example #1
0
/**
 * \brief Generate a name of a type for use in a symbol.
 */
void symbol_type_name(SymbolLocationWriter& lw, const TreePtr<Term>& term) {
  if (TreePtr<TypeInstance> inst = term_unwrap_dyn_cast<TypeInstance>(term)) {
    if (inst->parameters.empty()) {
      lw.write(inst->generic->location().logical, false, 'A', 'B');
    } else {
      lw.write(inst->generic->location().logical, false, 'C', 'D');
      symbol_encode_number(lw.output(), inst->parameters.size());
      for (PSI_STD::vector<TreePtr<Term> >::const_iterator ii = inst->parameters.begin(), ie = inst->parameters.end(); ii != ie; ++ii)
        symbol_type_name(lw, *ii);
    }
  } else if (TreePtr<NumberType> type = term_unwrap_dyn_cast<NumberType>(term)) {
    PSI_ASSERT(type->vector_size == 0);
    const char *type_keys = "GHIJKLMNOPQ";
    lw.output() << type_keys[type->scalar_type];
  } else if (TreePtr<IntegerConstant> value = term_unwrap_dyn_cast<IntegerConstant>(term)) {
    const char *type_keys = "ghijklmnopq";
    lw.output() << type_keys[value->number_type];
    if (NumberType::is_signed(value->number_type))
      symbol_encode_signed_number(lw.output(), value->value);
    else
      symbol_encode_number(lw.output(), value->value);
  } else {
    lw.write(inst->location().logical, false, 'E', 'F');
  }
}
Example #2
0
std::string symbol_implementation_name(const TreePtr<Interface>& interface, const PSI_STD::vector<TreePtr<Term> >& parameters) {
  std::ostringstream ss;
  ss << "_Y1";
  SymbolLocationWriter lw(ss);
  lw.write(interface->location().logical, true, '\0', '\0');
  for (PSI_STD::vector<TreePtr<Term> >::const_iterator ii = parameters.begin(), ie = parameters.end(); ii != ie; ++ii)
    symbol_type_name(lw, *ii);
  return ss.str();
}
Example #3
0
static void r_member(SCTX_ unsigned mode, struct token *pos, struct symbol *sym, struct symbol *mem)
{
	struct ident *ni, *si, *mi;
	
	return;
	
	print_usage(sctx_ pos, sym, mode);

	ni = MK_IDENT("?");
	si = sym->ident ?: ni;
	/* mem == NULL means entire struct accessed */
	mi = mem ? (mem->ident ?: ni) : MK_IDENT("*");

	printf("%s%.*s.%-*.*s %s 0x%x 0x%p %s\n", sctxp reporter->indent ? "\t" : "",
		si->len, si->name,
		32-1 - si->len, mi->len, mi->name,
	       show_typename(sctx_ mem ? mem->ctype.base_type : sym), 
	       (unsigned int )sym->ctype.modifiers, sym, symbol_type_name(sym->type));
}
Example #4
0
static void r_symbol(SCTX_ unsigned mode, struct token *pos, struct symbol *sym)
{
	char b[512];
	
	if ((!sym->ctype.base_type || sym->ctype.base_type->type != SYM_FN) && !isglobal(sctx_ sym))
	  return;
	
	print_usage(sctx_ pos, sym, mode);

	if (!sym->ident)
		sym->ident = MK_IDENT("__asm__");
	
	memcpy(b, sym->ident->name, sym->ident->len);
	b[sym->ident->len] = 0;
	if (isfunc(sctx_ sym))
		strcat(b, "()");
	
	printf("%s%-32.*s %s 0x%x 0x%p %s\n", sctxp reporter->indent ? "\t" : "",
	       (int)strlen(b), b,
	       show_typename(sctx_ sym->ctype.base_type),
	       (unsigned int )sym->ctype.modifiers, sym, symbol_type_name(sym->type));
}