mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-19 05:42:42 +08:00
Fix value_print, which used to be ostensibly langauge-indepentdent,
but would print pointers and arrays in C syntax. Instead, call a language-specific function. See ChangeLog for details.
This commit is contained in:
@ -1,3 +1,32 @@
|
|||||||
|
Sat Jun 4 18:17:03 1994 Per Bothner (bothner@kalessin.cygnus.com)
|
||||||
|
|
||||||
|
Fix value_print, which used to be ostensibly langauge-indepentdent,
|
||||||
|
but would print pointers and arrays in C syntax. Instead, call
|
||||||
|
a language-specific function.
|
||||||
|
* language.h (struct language_defn): New functional field
|
||||||
|
la_value_print. (LA_VALUE_PRINT): New macro.
|
||||||
|
* language.c (unk_lang_value_print ): New stub/dummy function.
|
||||||
|
(unknown_language_defn, auto_language_defn, local_language_defn):
|
||||||
|
Use it.
|
||||||
|
* c-valprint.c (c_value_print): New function, with code moved from:
|
||||||
|
* valprint.c (value_print): ... here. Now just invoke
|
||||||
|
LA_VALUE_PRINT to do language-specific stuff.
|
||||||
|
* valprint.c (value_print_array_elements): Make non-static.
|
||||||
|
* c-lang.c (c_language_defn, cplus_language_defn): Add
|
||||||
|
c_value_print in the la_value_print field,
|
||||||
|
* m2-lang.c (m2_language_defn): Likewise.
|
||||||
|
* ch-lang.c (chill_language_defn): But here use chill_value_print.
|
||||||
|
* ch-valprint.c (chill_val_print): Print null pointer as NULL.
|
||||||
|
* ch-valprint.c (chill_value_print): New function, based on
|
||||||
|
c_value_print, but use Chill "look and feel."
|
||||||
|
* c-lang.h (c_value_print): New prototype.
|
||||||
|
* ch-lang.h (chill_value_print): New prototype.
|
||||||
|
* value.h (value_print_array_elements): New prototype.
|
||||||
|
|
||||||
|
* ch-valprint.c (chill_val_print, case TYPE_CODE_BITSTRING
|
||||||
|
and case TYPE_CODE_SET): Check that the element type isn't a stub.
|
||||||
|
|
||||||
|
|
||||||
Fri Jun 3 09:15:00 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
|
Fri Jun 3 09:15:00 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
|
||||||
|
|
||||||
* main.c: Move entire file except for #ifndef MAIN_OVERRIDE code
|
* main.c: Move entire file except for #ifndef MAIN_OVERRIDE code
|
||||||
|
@ -404,6 +404,7 @@ const struct language_defn c_language_defn = {
|
|||||||
c_create_fundamental_type, /* Create fundamental type in this language */
|
c_create_fundamental_type, /* Create fundamental type in this language */
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
c_print_type, /* Print a type using appropriate syntax */
|
||||||
c_val_print, /* Print a value using appropriate syntax */
|
c_val_print, /* Print a value using appropriate syntax */
|
||||||
|
c_value_print, /* Print a top-level value */
|
||||||
&builtin_type_double, /* longest floating point type */ /*FIXME*/
|
&builtin_type_double, /* longest floating point type */ /*FIXME*/
|
||||||
{"", "", "", ""}, /* Binary format info */
|
{"", "", "", ""}, /* Binary format info */
|
||||||
{"0%lo", "0", "o", ""}, /* Octal format info */
|
{"0%lo", "0", "o", ""}, /* Octal format info */
|
||||||
@ -426,6 +427,7 @@ const struct language_defn cplus_language_defn = {
|
|||||||
c_create_fundamental_type, /* Create fundamental type in this language */
|
c_create_fundamental_type, /* Create fundamental type in this language */
|
||||||
c_print_type, /* Print a type using appropriate syntax */
|
c_print_type, /* Print a type using appropriate syntax */
|
||||||
c_val_print, /* Print a value using appropriate syntax */
|
c_val_print, /* Print a value using appropriate syntax */
|
||||||
|
c_value_print, /* Print a top-level value */
|
||||||
&builtin_type_double, /* longest floating point type */ /*FIXME*/
|
&builtin_type_double, /* longest floating point type */ /*FIXME*/
|
||||||
{"", "", "", ""}, /* Binary format info */
|
{"", "", "", ""}, /* Binary format info */
|
||||||
{"0%lo", "0", "o", ""}, /* Octal format info */
|
{"0%lo", "0", "o", ""}, /* Octal format info */
|
||||||
|
@ -17,6 +17,10 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
|
#ifdef __STDC__ /* Forward decls for prototypes */
|
||||||
|
struct value;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
c_parse PARAMS ((void)); /* Defined in c-exp.y */
|
c_parse PARAMS ((void)); /* Defined in c-exp.y */
|
||||||
|
|
||||||
@ -29,3 +33,6 @@ c_print_type PARAMS ((struct type *, char *, GDB_FILE *, int, int));
|
|||||||
extern int
|
extern int
|
||||||
c_val_print PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *, int, int,
|
c_val_print PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *, int, int,
|
||||||
int, enum val_prettyprint));
|
int, enum val_prettyprint));
|
||||||
|
|
||||||
|
extern int
|
||||||
|
c_value_print PARAMS ((struct value *, GDB_FILE *, int, enum val_prettyprint));
|
||||||
|
@ -434,3 +434,64 @@ c_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
|
|||||||
gdb_flush (stream);
|
gdb_flush (stream);
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
c_value_print (val, stream, format, pretty)
|
||||||
|
value_ptr val;
|
||||||
|
GDB_FILE *stream;
|
||||||
|
int format;
|
||||||
|
enum val_prettyprint pretty;
|
||||||
|
{
|
||||||
|
/* A "repeated" value really contains several values in a row.
|
||||||
|
They are made by the @ operator.
|
||||||
|
Print such values as if they were arrays. */
|
||||||
|
|
||||||
|
if (VALUE_REPEATED (val))
|
||||||
|
{
|
||||||
|
register unsigned int n = VALUE_REPETITIONS (val);
|
||||||
|
register unsigned int typelen = TYPE_LENGTH (VALUE_TYPE (val));
|
||||||
|
fprintf_filtered (stream, "{");
|
||||||
|
/* Print arrays of characters using string syntax. */
|
||||||
|
if (typelen == 1 && TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT
|
||||||
|
&& format == 0)
|
||||||
|
LA_PRINT_STRING (stream, VALUE_CONTENTS (val), n, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value_print_array_elements (val, stream, format, pretty);
|
||||||
|
}
|
||||||
|
fprintf_filtered (stream, "}");
|
||||||
|
return (n * typelen);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct type *type = VALUE_TYPE (val);
|
||||||
|
|
||||||
|
/* If it is a pointer, indicate what it points to.
|
||||||
|
|
||||||
|
Print type also if it is a reference.
|
||||||
|
|
||||||
|
C++: if it is a member pointer, we will take care
|
||||||
|
of that when we print it. */
|
||||||
|
if (TYPE_CODE (type) == TYPE_CODE_PTR ||
|
||||||
|
TYPE_CODE (type) == TYPE_CODE_REF)
|
||||||
|
{
|
||||||
|
/* Hack: remove (char *) for char strings. Their
|
||||||
|
type is indicated by the quoted string anyway. */
|
||||||
|
if (TYPE_CODE (type) == TYPE_CODE_PTR &&
|
||||||
|
TYPE_LENGTH (TYPE_TARGET_TYPE (type)) == sizeof(char) &&
|
||||||
|
TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_INT &&
|
||||||
|
!TYPE_UNSIGNED (TYPE_TARGET_TYPE (type)))
|
||||||
|
{
|
||||||
|
/* Print nothing */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf_filtered (stream, "(");
|
||||||
|
type_print (type, "", stream, -1);
|
||||||
|
fprintf_filtered (stream, ") ");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (val_print (type, VALUE_CONTENTS (val),
|
||||||
|
VALUE_ADDRESS (val), stream, format, 1, 0, pretty));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -315,6 +315,7 @@ const struct language_defn chill_language_defn = {
|
|||||||
chill_create_fundamental_type,/* Create fundamental type in this language */
|
chill_create_fundamental_type,/* Create fundamental type in this language */
|
||||||
chill_print_type, /* Print a type using appropriate syntax */
|
chill_print_type, /* Print a type using appropriate syntax */
|
||||||
chill_val_print, /* Print a value using appropriate syntax */
|
chill_val_print, /* Print a value using appropriate syntax */
|
||||||
|
chill_value_print, /* Print a top-levl value */
|
||||||
&builtin_type_chill_real, /* longest floating point type */
|
&builtin_type_chill_real, /* longest floating point type */
|
||||||
{"", "B'", "", ""}, /* Binary format info */
|
{"", "B'", "", ""}, /* Binary format info */
|
||||||
{"O'%lo", "O'", "o", ""}, /* Octal format info */
|
{"O'%lo", "O'", "o", ""}, /* Octal format info */
|
||||||
|
@ -17,6 +17,10 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||||
|
|
||||||
|
#ifdef __STDC__ /* Forward decls for prototypes */
|
||||||
|
struct value;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
chill_parse PARAMS ((void)); /* Defined in ch-exp.y */
|
chill_parse PARAMS ((void)); /* Defined in ch-exp.y */
|
||||||
|
|
||||||
@ -30,6 +34,10 @@ extern int
|
|||||||
chill_val_print PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *, int, int,
|
chill_val_print PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *, int, int,
|
||||||
int, enum val_prettyprint));
|
int, enum val_prettyprint));
|
||||||
|
|
||||||
|
extern int
|
||||||
|
chill_value_print PARAMS ((struct value *, GDB_FILE *,
|
||||||
|
int, enum val_prettyprint));
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
chill_is_varying_struct PARAMS ((struct type *type));
|
chill_is_varying_struct PARAMS ((struct type *type));
|
||||||
|
|
||||||
|
@ -243,6 +243,13 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
|
|||||||
addr = unpack_pointer (type, valaddr);
|
addr = unpack_pointer (type, valaddr);
|
||||||
elttype = TYPE_TARGET_TYPE (type);
|
elttype = TYPE_TARGET_TYPE (type);
|
||||||
|
|
||||||
|
/* We assume a NULL pointer is all zeros ... */
|
||||||
|
if (addr == 0)
|
||||||
|
{
|
||||||
|
fputs_filtered ("NULL", stream);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
|
if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
|
||||||
{
|
{
|
||||||
/* Try to print what function it points to. */
|
/* Try to print what function it points to. */
|
||||||
@ -287,8 +294,16 @@ chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
|
|||||||
|
|
||||||
case TYPE_CODE_BITSTRING:
|
case TYPE_CODE_BITSTRING:
|
||||||
case TYPE_CODE_SET:
|
case TYPE_CODE_SET:
|
||||||
|
elttype = TYPE_FIELD_TYPE (type, 0);
|
||||||
|
check_stub_type (elttype);
|
||||||
|
if (TYPE_FLAGS (elttype) & TYPE_FLAG_STUB)
|
||||||
{
|
{
|
||||||
struct type *range = TYPE_FIELD_TYPE (type, 0);
|
fprintf_filtered (stream, "<incomplete type>");
|
||||||
|
gdb_flush (stream);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
struct type *range = elttype;
|
||||||
int low_bound = TYPE_LOW_BOUND (range);
|
int low_bound = TYPE_LOW_BOUND (range);
|
||||||
int high_bound = TYPE_HIGH_BOUND (range);
|
int high_bound = TYPE_HIGH_BOUND (range);
|
||||||
int i;
|
int i;
|
||||||
@ -494,3 +509,73 @@ chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
|
|||||||
}
|
}
|
||||||
fprintf_filtered (stream, "]");
|
fprintf_filtered (stream, "]");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
chill_value_print (val, stream, format, pretty)
|
||||||
|
value_ptr val;
|
||||||
|
GDB_FILE *stream;
|
||||||
|
int format;
|
||||||
|
enum val_prettyprint pretty;
|
||||||
|
{
|
||||||
|
/* A "repeated" value really contains several values in a row.
|
||||||
|
They are made by the @ operator.
|
||||||
|
Print such values as if they were arrays. */
|
||||||
|
|
||||||
|
if (VALUE_REPEATED (val))
|
||||||
|
{
|
||||||
|
register unsigned int n = VALUE_REPETITIONS (val);
|
||||||
|
register unsigned int typelen = TYPE_LENGTH (VALUE_TYPE (val));
|
||||||
|
fprintf_filtered (stream, "[");
|
||||||
|
/* Print arrays of characters using string syntax. */
|
||||||
|
if (typelen == 1 && TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT
|
||||||
|
&& format == 0)
|
||||||
|
LA_PRINT_STRING (stream, VALUE_CONTENTS (val), n, 0);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
value_print_array_elements (val, stream, format, pretty);
|
||||||
|
}
|
||||||
|
fprintf_filtered (stream, "]");
|
||||||
|
return (n * typelen);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
struct type *type = VALUE_TYPE (val);
|
||||||
|
|
||||||
|
/* If it is a pointer, indicate what it points to.
|
||||||
|
|
||||||
|
Print type also if it is a reference.
|
||||||
|
|
||||||
|
C++: if it is a member pointer, we will take care
|
||||||
|
of that when we print it. */
|
||||||
|
if (TYPE_CODE (type) == TYPE_CODE_PTR ||
|
||||||
|
TYPE_CODE (type) == TYPE_CODE_REF)
|
||||||
|
{
|
||||||
|
char *valaddr = VALUE_CONTENTS (val);
|
||||||
|
CORE_ADDR addr = unpack_pointer (type, valaddr);
|
||||||
|
if (TYPE_CODE (type) != TYPE_CODE_PTR || addr != 0)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
char *name = TYPE_NAME (type);
|
||||||
|
if (name)
|
||||||
|
fputs_filtered (name, stream);
|
||||||
|
else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID)
|
||||||
|
fputs_filtered ("PTR", stream);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf_filtered (stream, "(");
|
||||||
|
type_print (type, "", stream, -1);
|
||||||
|
fprintf_filtered (stream, ")");
|
||||||
|
}
|
||||||
|
fprintf_filtered (stream, "(");
|
||||||
|
i = val_print (type, valaddr, VALUE_ADDRESS (val),
|
||||||
|
stream, format, 1, 0, pretty);
|
||||||
|
fprintf_filtered (stream, ")");
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (val_print (type, VALUE_CONTENTS (val),
|
||||||
|
VALUE_ADDRESS (val), stream, format, 1, 0, pretty));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1165,6 +1165,16 @@ unk_lang_val_print (type, valaddr, address, stream, format, deref_ref,
|
|||||||
error ("internal error - unimplemented function unk_lang_val_print called.");
|
error ("internal error - unimplemented function unk_lang_val_print called.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
unk_lang_value_print (val, stream, format, pretty)
|
||||||
|
value_ptr val;
|
||||||
|
GDB_FILE *stream;
|
||||||
|
int format;
|
||||||
|
enum val_prettyprint pretty;
|
||||||
|
{
|
||||||
|
error ("internal error - unimplemented function unk_lang_value_print called.");
|
||||||
|
}
|
||||||
|
|
||||||
static struct type ** const (unknown_builtin_types[]) = { 0 };
|
static struct type ** const (unknown_builtin_types[]) = { 0 };
|
||||||
static const struct op_print unk_op_print_tab[] = {
|
static const struct op_print unk_op_print_tab[] = {
|
||||||
{NULL, OP_NULL, PREC_NULL, 0}
|
{NULL, OP_NULL, PREC_NULL, 0}
|
||||||
@ -1183,6 +1193,7 @@ const struct language_defn unknown_language_defn = {
|
|||||||
unk_lang_create_fundamental_type,
|
unk_lang_create_fundamental_type,
|
||||||
unk_lang_print_type, /* Print a type using appropriate syntax */
|
unk_lang_print_type, /* Print a type using appropriate syntax */
|
||||||
unk_lang_val_print, /* Print a value using appropriate syntax */
|
unk_lang_val_print, /* Print a value using appropriate syntax */
|
||||||
|
unk_lang_value_print, /* Print a top-level value */
|
||||||
&builtin_type_error, /* longest floating point type */
|
&builtin_type_error, /* longest floating point type */
|
||||||
{"", "", "", ""}, /* Binary format info */
|
{"", "", "", ""}, /* Binary format info */
|
||||||
{"0%lo", "0", "o", ""}, /* Octal format info */
|
{"0%lo", "0", "o", ""}, /* Octal format info */
|
||||||
@ -1206,6 +1217,7 @@ const struct language_defn auto_language_defn = {
|
|||||||
unk_lang_create_fundamental_type,
|
unk_lang_create_fundamental_type,
|
||||||
unk_lang_print_type, /* Print a type using appropriate syntax */
|
unk_lang_print_type, /* Print a type using appropriate syntax */
|
||||||
unk_lang_val_print, /* Print a value using appropriate syntax */
|
unk_lang_val_print, /* Print a value using appropriate syntax */
|
||||||
|
unk_lang_value_print, /* Print a top-level value */
|
||||||
&builtin_type_error, /* longest floating point type */
|
&builtin_type_error, /* longest floating point type */
|
||||||
{"", "", "", ""}, /* Binary format info */
|
{"", "", "", ""}, /* Binary format info */
|
||||||
{"0%lo", "0", "o", ""}, /* Octal format info */
|
{"0%lo", "0", "o", ""}, /* Octal format info */
|
||||||
@ -1228,6 +1240,7 @@ const struct language_defn local_language_defn = {
|
|||||||
unk_lang_create_fundamental_type,
|
unk_lang_create_fundamental_type,
|
||||||
unk_lang_print_type, /* Print a type using appropriate syntax */
|
unk_lang_print_type, /* Print a type using appropriate syntax */
|
||||||
unk_lang_val_print, /* Print a value using appropriate syntax */
|
unk_lang_val_print, /* Print a value using appropriate syntax */
|
||||||
|
unk_lang_value_print, /* Print a top-level value */
|
||||||
&builtin_type_error, /* longest floating point type */
|
&builtin_type_error, /* longest floating point type */
|
||||||
{"", "", "", ""}, /* Binary format info */
|
{"", "", "", ""}, /* Binary format info */
|
||||||
{"0%lo", "0", "o", ""}, /* Octal format info */
|
{"0%lo", "0", "o", ""}, /* Octal format info */
|
||||||
|
@ -144,6 +144,11 @@ struct language_defn
|
|||||||
int (*la_val_print) PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *,
|
int (*la_val_print) PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *,
|
||||||
int, int, int, enum val_prettyprint));
|
int, int, int, enum val_prettyprint));
|
||||||
|
|
||||||
|
/* Print a top-level value using syntax appropriate for this language. */
|
||||||
|
|
||||||
|
int (*la_value_print) PARAMS ((struct value *, GDB_FILE *,
|
||||||
|
int, enum val_prettyprint));
|
||||||
|
|
||||||
/* Longest floating point type */
|
/* Longest floating point type */
|
||||||
|
|
||||||
struct type **la_longest_float;
|
struct type **la_longest_float;
|
||||||
@ -247,6 +252,8 @@ set_language PARAMS ((enum language));
|
|||||||
#define LA_VAL_PRINT(type,valaddr,addr,stream,fmt,deref,recurse,pretty) \
|
#define LA_VAL_PRINT(type,valaddr,addr,stream,fmt,deref,recurse,pretty) \
|
||||||
(current_language->la_val_print(type,valaddr,addr,stream,fmt,deref, \
|
(current_language->la_val_print(type,valaddr,addr,stream,fmt,deref, \
|
||||||
recurse,pretty))
|
recurse,pretty))
|
||||||
|
#define LA_VALUE_PRINT(val,stream,fmt,pretty) \
|
||||||
|
(current_language->la_value_print(val,stream,fmt,pretty))
|
||||||
|
|
||||||
/* Return a format string for printf that will print a number in one of
|
/* Return a format string for printf that will print a number in one of
|
||||||
the local (language-specific) formats. Result is static and is
|
the local (language-specific) formats. Result is static and is
|
||||||
|
@ -24,6 +24,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|||||||
#include "parser-defs.h"
|
#include "parser-defs.h"
|
||||||
#include "language.h"
|
#include "language.h"
|
||||||
#include "m2-lang.h"
|
#include "m2-lang.h"
|
||||||
|
#include "c-lang.h"
|
||||||
|
|
||||||
/* Print the character C on STREAM as part of the contents of a literal
|
/* 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
|
string whose delimiter is QUOTER. Note that that format for printing
|
||||||
@ -405,6 +406,7 @@ const struct language_defn m2_language_defn = {
|
|||||||
m2_create_fundamental_type, /* Create fundamental type in this language */
|
m2_create_fundamental_type, /* Create fundamental type in this language */
|
||||||
m2_print_type, /* Print a type using appropriate syntax */
|
m2_print_type, /* Print a type using appropriate syntax */
|
||||||
m2_val_print, /* Print a value using appropriate syntax */
|
m2_val_print, /* Print a value using appropriate syntax */
|
||||||
|
c_value_print, /* Print a top-level value */
|
||||||
&builtin_type_m2_real, /* longest floating point type */
|
&builtin_type_m2_real, /* longest floating point type */
|
||||||
{"", "", "", ""}, /* Binary format info */
|
{"", "", "", ""}, /* Binary format info */
|
||||||
{"%loB", "", "o", "B"}, /* Octal format info */
|
{"%loB", "", "o", "B"}, /* Octal format info */
|
||||||
|
Reference in New Issue
Block a user