projects
/
deliverable
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
testsuite patch: Skip py-unwind.exp on x86_64 -m32
[deliverable/binutils-gdb.git]
/
gdb
/
p-lang.c
diff --git
a/gdb/p-lang.c
b/gdb/p-lang.c
index 64d2e9f9be6ab66b742b7ae692ba8e9b20f971bc..86e787b49108a324a4ed1a6117f928ffe785812c 100644
(file)
--- a/
gdb/p-lang.c
+++ b/
gdb/p-lang.c
@@
-1,7
+1,6
@@
/* Pascal language support routines for GDB, the GNU debugger.
/* Pascal language support routines for GDB, the GNU debugger.
- Copyright (C) 2000, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
- Free Software Foundation, Inc.
+ Copyright (C) 2000-2016 Free Software Foundation, Inc.
This file is part of GDB.
This file is part of GDB.
@@
-21,22
+20,22
@@
/* This file is derived from c-lang.c */
#include "defs.h"
/* This file is derived from c-lang.c */
#include "defs.h"
-#include "gdb_string.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
#include "parser-defs.h"
#include "language.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
#include "parser-defs.h"
#include "language.h"
+#include "varobj.h"
#include "p-lang.h"
#include "valprint.h"
#include "value.h"
#include <ctype.h>
#include "p-lang.h"
#include "valprint.h"
#include "value.h"
#include <ctype.h>
-
+
extern void _initialize_pascal_language (void);
/* All GPC versions until now (2007-09-27) also define a symbol called
extern void _initialize_pascal_language (void);
/* All GPC versions until now (2007-09-27) also define a symbol called
- '_p_initialize'. Check for the presence of this symbol first. */
+ '_p_initialize'.
Check for the presence of this symbol first. */
static const char GPC_P_INITIALIZE[] = "_p_initialize";
/* The name of the symbol that GPC uses as the name of the main
static const char GPC_P_INITIALIZE[] = "_p_initialize";
/* The name of the symbol that GPC uses as the name of the main
@@
-54,28
+53,28
@@
static const char GPC_MAIN_PROGRAM_NAME_2[] = "pascal_main_program";
so that it finds the even if the program was compiled
without debugging information.
According to information supplied by Waldeck Hebisch,
so that it finds the even if the program was compiled
without debugging information.
According to information supplied by Waldeck Hebisch,
- this should work for all versions posterior to June 2000. */
+ this should work for all versions posterior to June 2000.
*/
const char *
pascal_main_name (void)
{
const char *
pascal_main_name (void)
{
- struct
minimal_symbol *
msym;
+ struct
bound_minimal_symbol
msym;
msym = lookup_minimal_symbol (GPC_P_INITIALIZE, NULL, NULL);
/* If '_p_initialize' was not found, the main program is likely not
written in Pascal. */
msym = lookup_minimal_symbol (GPC_P_INITIALIZE, NULL, NULL);
/* If '_p_initialize' was not found, the main program is likely not
written in Pascal. */
- if (msym == NULL)
+ if (msym
.minsym
== NULL)
return NULL;
msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_1, NULL, NULL);
return NULL;
msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_1, NULL, NULL);
- if (msym != NULL)
+ if (msym
.minsym
!= NULL)
{
return GPC_MAIN_PROGRAM_NAME_1;
}
msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_2, NULL, NULL);
{
return GPC_MAIN_PROGRAM_NAME_1;
}
msym = lookup_minimal_symbol (GPC_MAIN_PROGRAM_NAME_2, NULL, NULL);
- if (msym != NULL)
+ if (msym
.minsym
!= NULL)
{
return GPC_MAIN_PROGRAM_NAME_2;
}
{
return GPC_MAIN_PROGRAM_NAME_2;
}
@@
-99,15
+98,17
@@
int
is_pascal_string_type (struct type *type,int *length_pos,
int *length_size, int *string_pos,
struct type **char_type,
is_pascal_string_type (struct type *type,int *length_pos,
int *length_size, int *string_pos,
struct type **char_type,
- char **arrayname)
+ c
onst c
har **arrayname)
{
if (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT)
{
/* Old Borland type pascal strings from Free Pascal Compiler. */
/* Two fields: length and st. */
{
if (type != NULL && TYPE_CODE (type) == TYPE_CODE_STRUCT)
{
/* Old Borland type pascal strings from Free Pascal Compiler. */
/* Two fields: length and st. */
- if (TYPE_NFIELDS (type) == 2
- && strcmp (TYPE_FIELDS (type)[0].name, "length") == 0
- && strcmp (TYPE_FIELDS (type)[1].name, "st") == 0)
+ if (TYPE_NFIELDS (type) == 2
+ && TYPE_FIELD_NAME (type, 0)
+ && strcmp (TYPE_FIELD_NAME (type, 0), "length") == 0
+ && TYPE_FIELD_NAME (type, 1)
+ && strcmp (TYPE_FIELD_NAME (type, 1), "st") == 0)
{
if (length_pos)
*length_pos = TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT;
{
if (length_pos)
*length_pos = TYPE_FIELD_BITPOS (type, 0) / TARGET_CHAR_BIT;
@@
-118,14
+119,16
@@
is_pascal_string_type (struct type *type,int *length_pos,
if (char_type)
*char_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 1));
if (arrayname)
if (char_type)
*char_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 1));
if (arrayname)
- *arrayname = TYPE_FIELD
S (type)[1].name
;
+ *arrayname = TYPE_FIELD
_NAME (type, 1)
;
return 2;
};
/* GNU pascal strings. */
/* Three fields: Capacity, length and schema$ or _p_schema. */
if (TYPE_NFIELDS (type) == 3
return 2;
};
/* GNU pascal strings. */
/* Three fields: Capacity, length and schema$ or _p_schema. */
if (TYPE_NFIELDS (type) == 3
- && strcmp (TYPE_FIELDS (type)[0].name, "Capacity") == 0
- && strcmp (TYPE_FIELDS (type)[1].name, "length") == 0)
+ && TYPE_FIELD_NAME (type, 0)
+ && strcmp (TYPE_FIELD_NAME (type, 0), "Capacity") == 0
+ && TYPE_FIELD_NAME (type, 1)
+ && strcmp (TYPE_FIELD_NAME (type, 1), "length") == 0)
{
if (length_pos)
*length_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT;
{
if (length_pos)
*length_pos = TYPE_FIELD_BITPOS (type, 1) / TARGET_CHAR_BIT;
@@
-133,7
+136,7
@@
is_pascal_string_type (struct type *type,int *length_pos,
*length_size = TYPE_LENGTH (TYPE_FIELD_TYPE (type, 1));
if (string_pos)
*string_pos = TYPE_FIELD_BITPOS (type, 2) / TARGET_CHAR_BIT;
*length_size = TYPE_LENGTH (TYPE_FIELD_TYPE (type, 1));
if (string_pos)
*string_pos = TYPE_FIELD_BITPOS (type, 2) / TARGET_CHAR_BIT;
- /* FIXME: how can I detect wide chars in GPC ?? */
+ /* FIXME: how can I detect wide chars in GPC ??
*/
if (char_type)
{
*char_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 2));
if (char_type)
{
*char_type = TYPE_TARGET_TYPE (TYPE_FIELD_TYPE (type, 2));
@@
-142,7
+145,7
@@
is_pascal_string_type (struct type *type,int *length_pos,
*char_type = TYPE_TARGET_TYPE (*char_type);
}
if (arrayname)
*char_type = TYPE_TARGET_TYPE (*char_type);
}
if (arrayname)
- *arrayname = TYPE_FIELD
S (type)[2].name
;
+ *arrayname = TYPE_FIELD
_NAME (type, 2)
;
return 3;
};
}
return 3;
};
}
@@
-153,7
+156,7
@@
static void pascal_one_char (int, struct ui_file *, int *);
/* Print the character C on STREAM as part of the contents of a literal
string.
/* 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 */
+ In_quotes is reset to 0 if a char is written with #4 notation
.
*/
static void
pascal_one_char (int c, struct ui_file *stream, int *in_quotes)
static void
pascal_one_char (int c, struct ui_file *stream, int *in_quotes)
@@
-184,7
+187,7
@@
static void pascal_emit_char (int c, struct type *type,
/* Print the character C on STREAM as part of the contents of a literal
string whose delimiter is QUOTER. Note that that format for printing
/* Print the character C on STREAM as part of the contents of a literal
string whose delimiter is QUOTER. Note that that format for printing
- characters and strings is language specific. */
+ characters and strings is language specific.
*/
static void
pascal_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
static void
pascal_emit_char (int c, struct type *type, struct ui_file *stream, int quoter)
@@
-264,7
+267,7
@@
pascal_printstr (struct ui_file *stream, struct type *type,
rep1 = i + 1;
reps = 1;
rep1 = i + 1;
reps = 1;
- while (rep1 < length
+ while (rep1 < length
&& extract_unsigned_integer (string + rep1 * width, width,
byte_order) == current_char)
{
&& extract_unsigned_integer (string + rep1 * width, width,
byte_order) == current_char)
{
@@
-276,10
+279,7
@@
pascal_printstr (struct ui_file *stream, struct type *type,
{
if (in_quotes)
{
{
if (in_quotes)
{
- if (options->inspect_it)
- fputs_filtered ("\\', ", stream);
- else
- fputs_filtered ("', ", stream);
+ fputs_filtered ("', ", stream);
in_quotes = 0;
}
pascal_printchar (current_char, type, stream);
in_quotes = 0;
}
pascal_printchar (current_char, type, stream);
@@
-292,10
+292,7
@@
pascal_printstr (struct ui_file *stream, struct type *type,
{
if ((!in_quotes) && (PRINT_LITERAL_FORM (current_char)))
{
{
if ((!in_quotes) && (PRINT_LITERAL_FORM (current_char)))
{
- if (options->inspect_it)
- fputs_filtered ("\\'", stream);
- else
- fputs_filtered ("'", stream);
+ fputs_filtered ("'", stream);
in_quotes = 1;
}
pascal_one_char (current_char, stream, &in_quotes);
in_quotes = 1;
}
pascal_one_char (current_char, stream, &in_quotes);
@@
-305,12
+302,7
@@
pascal_printstr (struct ui_file *stream, struct type *type,
/* Terminate the quotes if necessary. */
if (in_quotes)
/* Terminate the quotes if necessary. */
if (in_quotes)
- {
- if (options->inspect_it)
- fputs_filtered ("\\'", stream);
- else
- fputs_filtered ("'", stream);
- }
+ fputs_filtered ("'", stream);
if (force_ellipses || i < length)
fputs_filtered ("...", stream);
if (force_ellipses || i < length)
fputs_filtered ("...", stream);
@@
-347,7
+339,7
@@
const struct op_print pascal_op_print_tab[] =
{"^", UNOP_IND, PREC_SUFFIX, 1},
{"@", UNOP_ADDR, PREC_PREFIX, 0},
{"sizeof", UNOP_SIZEOF, PREC_PREFIX, 0},
{"^", UNOP_IND, PREC_SUFFIX, 1},
{"@", UNOP_ADDR, PREC_PREFIX, 0},
{"sizeof", UNOP_SIZEOF, PREC_PREFIX, 0},
- {NULL,
0, 0
, 0}
+ {NULL,
OP_NULL, PREC_PREFIX
, 0}
};
\f
enum pascal_primitive_types {
};
\f
enum pascal_primitive_types {
@@
-420,18
+412,24
@@
pascal_language_arch_info (struct gdbarch *gdbarch,
lai->bool_type_default = builtin->builtin_bool;
}
lai->bool_type_default = builtin->builtin_bool;
}
+static const char *p_extensions[] =
+{
+ ".pas", ".p", ".pp", NULL
+};
+
const struct language_defn pascal_language_defn =
{
"pascal", /* Language name */
const struct language_defn pascal_language_defn =
{
"pascal", /* Language name */
+ "Pascal",
language_pascal,
range_check_on,
language_pascal,
range_check_on,
- type_check_on,
case_sensitive_on,
array_row_major,
macro_expansion_no,
case_sensitive_on,
array_row_major,
macro_expansion_no,
+ p_extensions,
&exp_descriptor_standard,
pascal_parse,
&exp_descriptor_standard,
pascal_parse,
- pascal_error,
+ pascal_
yy
error,
null_post_parser,
pascal_printchar, /* Print a character constant */
pascal_printstr, /* Function to print string constant */
null_post_parser,
pascal_printchar, /* Print a character constant */
pascal_printstr, /* Function to print string constant */
@@
-440,11
+438,13
@@
const struct language_defn pascal_language_defn =
pascal_print_typedef, /* Print a typedef using appropriate syntax */
pascal_val_print, /* Print a value using appropriate syntax */
pascal_value_print, /* Print a top-level value */
pascal_print_typedef, /* Print a typedef using appropriate syntax */
pascal_val_print, /* Print a value using appropriate syntax */
pascal_value_print, /* Print a top-level value */
+ default_read_var_value, /* la_read_var_value */
NULL, /* Language specific skip_trampoline */
"this", /* name_of_this */
basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
basic_lookup_transparent_type,/* lookup_transparent_type */
NULL, /* Language specific symbol demangler */
NULL, /* Language specific skip_trampoline */
"this", /* name_of_this */
basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
basic_lookup_transparent_type,/* lookup_transparent_type */
NULL, /* Language specific symbol demangler */
+ NULL,
NULL, /* Language specific class_name_from_physname */
pascal_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
NULL, /* Language specific class_name_from_physname */
pascal_op_print_tab, /* expression operators for printing */
1, /* c-style arrays */
@@
-455,6
+455,11
@@
const struct language_defn pascal_language_defn =
default_print_array_index,
default_pass_by_reference,
default_get_string,
default_print_array_index,
default_pass_by_reference,
default_get_string,
+ NULL, /* la_get_symbol_name_cmp */
+ iterate_over_symbols,
+ &default_varobj_ops,
+ NULL,
+ NULL,
LANG_MAGIC
};
LANG_MAGIC
};
This page took
0.027148 seconds
and
4
git commands to generate.