コード例 #1
0
ファイル: p-typeprint.c プロジェクト: jon-turney/binutils-gdb
void
pascal_print_type (struct type *type, const char *varstring,
		   struct ui_file *stream, int show, int level,
		   const struct type_print_options *flags)
{
  enum type_code code;
  int demangled_args;

  code = TYPE_CODE (type);

  if (show > 0)
    type = check_typedef (type);

  if ((code == TYPE_CODE_FUNC
       || code == TYPE_CODE_METHOD))
    {
      pascal_type_print_varspec_prefix (type, stream, show, 0, flags);
    }
  /* first the name */
  fputs_filtered (varstring, stream);

  if ((varstring != NULL && *varstring != '\0')
      && !(code == TYPE_CODE_FUNC
	   || code == TYPE_CODE_METHOD))
    {
      fputs_filtered (" : ", stream);
    }

  if (!(code == TYPE_CODE_FUNC
	|| code == TYPE_CODE_METHOD))
    {
      pascal_type_print_varspec_prefix (type, stream, show, 0, flags);
    }

  pascal_type_print_base (type, stream, show, level, flags);
  /* For demangled function names, we have the arglist as part of the name,
     so don't print an additional pair of ()'s.  */

  demangled_args = varstring ? strchr (varstring, '(') != NULL : 0;
  pascal_type_print_varspec_suffix (type, stream, show, 0, demangled_args,
				    flags);

}
コード例 #2
0
ファイル: p-typeprint.c プロジェクト: jon-turney/binutils-gdb
static void
pascal_type_print_func_varspec_suffix  (struct type *type, struct ui_file *stream,
					int show, int passed_a_ptr,
					int demangled_args,
					const struct type_print_options *flags)
{
  if (TYPE_TARGET_TYPE (type) == NULL
      || TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
    {
      fprintf_filtered (stream, " : ");
      pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type),
					stream, 0, 0, flags);

      if (TYPE_TARGET_TYPE (type) == NULL)
	type_print_unknown_return_type (stream);
      else
	pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0,
				flags);

      pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
					passed_a_ptr, 0, flags);
    }
}
コード例 #3
0
ファイル: p-typeprint.c プロジェクト: HoMeCracKeR/gdb-ng
static void
pascal_type_print_varspec_suffix (struct type *type, struct ui_file *stream,
				  int show, int passed_a_ptr,
				  int demangled_args)
{
  if (type == 0)
    return;

  if (TYPE_NAME (type) && show <= 0)
    return;

  QUIT;

  switch (TYPE_CODE (type))
    {
    case TYPE_CODE_ARRAY:
      if (passed_a_ptr)
	fprintf_filtered (stream, ")");
      break;

    case TYPE_CODE_MEMBER:
      if (passed_a_ptr)
	fprintf_filtered (stream, ")");
      pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 0, 0);
      break;

    case TYPE_CODE_METHOD:
      if (passed_a_ptr)
	fprintf_filtered (stream, ")");
      pascal_type_print_method_args ("",
				     "",
				     stream);
      if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
	{
	  fprintf_filtered (stream, " : ");
	  pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
	  pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
	  pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
					    passed_a_ptr, 0);
	}
      break;

    case TYPE_CODE_PTR:
    case TYPE_CODE_REF:
      pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0, 1, 0);
      break;

    case TYPE_CODE_FUNC:
      if (passed_a_ptr)
	fprintf_filtered (stream, ")");
      if (!demangled_args)
	pascal_print_func_args (type, stream);
      if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_VOID)
	{
	  fprintf_filtered (stream, " : ");
	  pascal_type_print_varspec_prefix (TYPE_TARGET_TYPE (type), stream, 0, 0);
	  pascal_type_print_base (TYPE_TARGET_TYPE (type), stream, show, 0);
	  pascal_type_print_varspec_suffix (TYPE_TARGET_TYPE (type), stream, 0,
					    passed_a_ptr, 0);
	}
      break;

    case TYPE_CODE_UNDEF:
    case TYPE_CODE_STRUCT:
    case TYPE_CODE_UNION:
    case TYPE_CODE_ENUM:
    case TYPE_CODE_INT:
    case TYPE_CODE_FLT:
    case TYPE_CODE_VOID:
    case TYPE_CODE_ERROR:
    case TYPE_CODE_CHAR:
    case TYPE_CODE_BOOL:
    case TYPE_CODE_SET:
    case TYPE_CODE_RANGE:
    case TYPE_CODE_STRING:
    case TYPE_CODE_BITSTRING:
    case TYPE_CODE_COMPLEX:
    case TYPE_CODE_TYPEDEF:
    case TYPE_CODE_TEMPLATE:
      /* These types do not need a suffix.  They are listed so that
         gcc -Wall will report types that may not have been considered.  */
      break;
    default:
      error (_("type not handled in pascal_type_print_varspec_suffix()"));
      break;
    }
}