/* Pascal language support definitions for GDB, the GNU debugger.

   Copyright (C) 2000-2024 Free Software Foundation, Inc.

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

#ifndef GDB_P_LANG_H
#define GDB_P_LANG_H

/* This file is derived from c-lang.h */

struct value;
struct parser_state;

/* Determines if type TYPE is a pascal string type.  Returns a positive
   value if the type is a known pascal string type.  This function is used
   by p-valprint.c code to allow better string display.  If it is a pascal
   string type, then it also sets info needed to get the length and the
   data of the string length_pos, length_size and string_pos are given in
   bytes.  char_size gives the element size in bytes.  FIXME: if the
   position or the size of these fields are not multiple of TARGET_CHAR_BIT
   then the results are wrong but this does not happen for Free Pascal nor
   for GPC.  */

extern int pascal_is_string_type (struct type *type,int *length_pos,
				  int *length_size, int *string_pos,
				  struct type **char_type,
				  const char **arrayname);

/* Defined in p-lang.c */

extern const char *pascal_main_name (void);

/* These are in p-lang.c: */

extern int is_pascal_string_type (struct type *, int *, int *, int *,
				  struct type **, const char **);

extern int pascal_object_is_vtbl_ptr_type (struct type *);

extern int pascal_object_is_vtbl_member (struct type *);

/* Class representing the Pascal language.  */

class pascal_language : public language_defn
{
public:
  pascal_language ()
    : language_defn (language_pascal)
  { /* Nothing.  */ }

  /* See language.h.  */

  const char *name () const override
  { return "pascal"; }

  /* See language.h.  */

  const char *natural_name () const override
  { return "Pascal"; }

  /* See language.h.  */

  const std::vector<const char *> &filename_extensions () const override
  {
    static const std::vector<const char *> extensions
      = { ".pas", ".p", ".pp" };
    return extensions;
  }

  /* See language.h.  */

  void language_arch_info (struct gdbarch *gdbarch,
			   struct language_arch_info *lai) const override;

  /* See language.h.  */

  void print_type (struct type *type, const char *varstring,
		   struct ui_file *stream, int show, int level,
		   const struct type_print_options *flags) const override;

  /* See language.h.  */

  void value_print (struct value *val, struct ui_file *stream,
		    const struct value_print_options *options) const override;

  /* See language.h.  */

  void value_print_inner
	(struct value *val, struct ui_file *stream, int recurse,
	 const struct value_print_options *options) const override;

  /* See language.h.  */

  int parser (struct parser_state *ps) const override;

  /* See language.h.  */

  void emitchar (int ch, struct type *chtype,
		 struct ui_file *stream, int quoter) const override
  {
    int in_quotes = 0;

    print_one_char (ch, stream, &in_quotes);
    if (in_quotes)
      gdb_puts ("'", stream);
  }

  /* See language.h.  */

  void printchar (int ch, struct type *chtype,
		  struct ui_file *stream) const override;

  /* See language.h.  */

  void printstr (struct ui_file *stream, struct type *elttype,
		 const gdb_byte *string, unsigned int length,
		 const char *encoding, int force_ellipses,
		 const struct value_print_options *options) const override;

  /* See language.h.  */

  void print_typedef (struct type *type, struct symbol *new_symbol,
		      struct ui_file *stream) const override;

  /* See language.h.  */

  bool is_string_type_p (struct type *type) const override
  {
    return pascal_is_string_type(type, nullptr, nullptr, nullptr,
				 nullptr, nullptr) > 0;
  }

  /* See language.h.  */

  const char *name_of_this () const override
  { return "this"; }

  /* See language.h.  */

  bool range_checking_on_by_default () const override
  { return true; }

private:

  /* Print the character C on STREAM as part of the contents of a literal
     string.  IN_QUOTES is reset to 0 if a char is written with #4 notation.  */

  void print_one_char (int c, struct ui_file *stream, int *in_quotes) const;

  /* Print the name of the type (or the ultimate pointer target,
     function value or array element), or the description of a
     structure or union.

     SHOW positive means print details about the type (e.g. enum values),
     and print structure elements passing SHOW - 1 for show.  SHOW negative
     means just print the type name or struct tag if there is one.  If
     there is no name, print something sensible but concise like "struct
     {...}".
     SHOW zero means just print the type name or struct tag if there is one.
     If there is no name, print something sensible but not as concise like
     "struct {int x; int y;}".

     LEVEL is the number of spaces to indent by.
     We increase it for some recursive calls.  */

  void type_print_base (struct type *type, struct ui_file *stream, int show,
			int level,
			const struct type_print_options *flags) const;


  /* Print any array sizes, function arguments or close parentheses
     needed after the variable name (to describe its type).
     Args work like pascal_type_print_varspec_prefix.  */

  void type_print_varspec_suffix (struct type *type, struct ui_file *stream,
				  int show, int passed_a_ptr,
				  int demangled_args,
				  const struct type_print_options *flags) const;

  /* Helper for pascal_language::type_print_varspec_suffix to print the
     suffix of a function or method.  */

  void 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) const;

  /* Print any asterisks or open-parentheses needed before the
     variable name (to describe its type).

     On outermost call, pass 0 for PASSED_A_PTR.
     On outermost call, SHOW > 0 means should ignore
     any typename for TYPE and show its details.
     SHOW is always zero on recursive calls.  */

  void type_print_varspec_prefix
	(struct type *type, struct ui_file *stream, int show,
	 int passed_a_ptr, const struct type_print_options *flags) const;

  /* Print the function args from TYPE (a TYPE_CODE_FUNC) to STREAM taking
     FLAGS into account where appropriate.  */

  void  print_func_args (struct type *type, struct ui_file *stream,
			 const struct type_print_options *flags) const;

  /* Print the Pascal method arguments for PHYSNAME and METHODNAME to the
     file STREAM.  */

  void type_print_method_args (const char *physname, const char *methodname,
			       struct ui_file *stream) const;

  /* If TYPE is a derived type, then print out derivation information.
     Print only the actual base classes of this type, not the base classes
     of the base classes.  I.e. for the derivation hierarchy:

     class A { int a; };
     class B : public A {int b; };
     class C : public B {int c; };

     Print the type of class C as:

     class C : public B {
     int c;
     }

     Not as the following (like gdb used to), which is not legal C++ syntax
     for derived types and may be confused with the multiple inheritance
     form:

     class C : public B : public A {
     int c;
     }

     In general, gdb should try to print the types as closely as possible
     to the form that they appear in the source code.  */

  void type_print_derivation_info (struct ui_file *stream,
				   struct type *type) const;
};

#endif /* GDB_P_LANG_H */
