* [ecj] Patch: FYI: update jcf-dump for 1.5
@ 2006-06-28 0:45 Tom Tromey
2006-07-02 10:51 ` Andrew John Hughes
0 siblings, 1 reply; 6+ messages in thread
From: Tom Tromey @ 2006-06-28 0:45 UTC (permalink / raw)
To: Java Patch List; +Cc: Gcc Patch List
I'm checking this in on the gcj-eclipse branch.
This updates jcf-dump for the new 1.5 features:
* Handle Signature attribute. (I renamed "signature" to "descriptor"
elsewhere for clarify and better conformance to the new JVM spec.)
The signature handling is pretty lame -- we just print it as a
string, rather than trying to decode it.
* Handle EnclosingMethod
* Handle LocalVariableTypeTable
* Handle all annotation-related attributes
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* jcf-reader.c (get_attribute): Handle EnclosingMethod,
Signature, LocalVariableTypeTable, annotation attributes.
* jcf-dump.c (HANDLE_ENCLOSINGMETHOD_ATTRIBUTE): New macro.
(HANDLE_SIGNATURE_ATTRIBUTE): Likewise.
(HANDLE_START_FIELD): Mention 'descriptor', not 'signature'.
(HANDLE_METHOD): Likewise.
(HANDLE_LOCALVARIABLETYPETABLE_ATTRIBUTE): New macro.
(print_annotation): New function.
(print_element_value): Likewise.
(indent): Likewise.
(HANDLE_RUNTIMEVISIBLEANNOTATIONS_ATTRIBUTE): New macro.
(HANDLE_RUNTIMEINVISIBLEANNOTATIONS_ATTRIBUTE): Likewise.
(print_parameter_annotations): New function.
(HANDLE_RUNTIMEVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE): New macro.
(HANDLE_RUNTIMEINVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE):
Likewise.
(HANDLE_ANNOTATIONDEFAULT_ATTRIBUTE): Likewise.
(print_annotations): New function.
Index: jcf-dump.c
===================================================================
--- jcf-dump.c (revision 114870)
+++ jcf-dump.c (working copy)
@@ -96,6 +96,7 @@
static void print_access_flags (FILE *, uint16, char);
static void print_constant_terse (FILE*, JCF*, int, int);
+static void print_constant_terse_with_index (FILE *, JCF *, int, int);
static void print_constant (FILE *, JCF *, int, int);
static void print_constant_ref (FILE *, JCF *, int);
static void disassemble_method (JCF*, const unsigned char *, int);
@@ -109,6 +110,11 @@
static void print_constant_pool (struct JCF *);
static void print_exception_table (struct JCF *, const unsigned char *entries,
int);
+static void indent (FILE *, int);
+static void print_element_value (FILE *, JCF *, int);
+static void print_annotation (FILE *, JCF *, int);
+static void print_annotations (FILE *, JCF *, int);
+static void print_parameter_annotations (FILE *, JCF *, int);
#define PRINT_SIGNATURE_RESULT_ONLY 1
#define PRINT_SIGNATURE_ARGS_ONLY 2
@@ -184,7 +190,7 @@
{ fprintf (out, "Field name:"); \
print_constant_terse (out, jcf, NAME, CONSTANT_Utf8); \
print_access_flags (out, ACCESS_FLAGS, 'f'); \
- fprintf (out, " Signature: "); \
+ fprintf (out, " Descriptor: "); \
if (flag_print_constant_pool) \
fprintf (out, "%d=", SIGNATURE); \
print_signature (out, jcf, SIGNATURE, 0); \
@@ -227,7 +233,7 @@
fprintf (out, "\nMethod name:"); \
print_constant_terse (out, jcf, NAME, CONSTANT_Utf8); \
print_access_flags (out, ACCESS_FLAGS, 'm'); \
- fprintf (out, " Signature: "); \
+ fprintf (out, " Descriptor: "); \
if (flag_print_constant_pool) \
fprintf (out, "%d=", SIGNATURE); \
print_signature (out, jcf, SIGNATURE, 0); \
@@ -295,6 +301,26 @@
print_signature (out, jcf, signature_index, 0); \
fprintf (out, " (pc: %d length: %d)\n", start_pc, length); }}
+#define HANDLE_LOCALVARIABLETYPETABLE_ATTRIBUTE(COUNT) \
+{ int n = (COUNT); int i; \
+ COMMON_HANDLE_ATTRIBUTE(JCF, attribute_name, attribute_length); \
+ fprintf (out, ", count: %d\n", n); \
+ for (i = 0; i < n; i++) { \
+ int start_pc = JCF_readu2 (jcf); \
+ int length = JCF_readu2 (jcf); \
+ int name_index = JCF_readu2 (jcf); \
+ int signature_index = JCF_readu2 (jcf); \
+ int slot = JCF_readu2 (jcf); \
+ fprintf (out, " slot#%d: name: ", slot); \
+ if (flag_print_constant_pool) \
+ fprintf (out, "%d=", name_index); \
+ print_name (out, jcf, name_index); \
+ fprintf (out, ", type: "); \
+ if (flag_print_constant_pool) \
+ fprintf (out, "%d=", signature_index); \
+ print_signature (out, jcf, signature_index, 0); \
+ fprintf (out, " (pc: %d length: %d)\n", start_pc, length); }}
+
#define HANDLE_LINENUMBERTABLE_ATTRIBUTE(COUNT) \
{ int n = (COUNT); int i; \
COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
@@ -357,6 +383,58 @@
for (i = 0; i < n; i++) { c = JCF_readu(jcf); fputc(c, out); } \
if (c != '\r' && c != '\n') fputc('\n', out); }
+#define HANDLE_ENCLOSINGMETHOD_ATTRIBUTE() \
+{ COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+ uint16 class_index = JCF_readu2 (jcf); \
+ uint16 method_index = JCF_readu2 (jcf); \
+ fprintf (out, "\n Class: "); \
+ print_constant_terse_with_index (out, jcf, class_index, CONSTANT_Class); \
+ fprintf (out, "\n Method: "); \
+ print_constant_terse_with_index (out, jcf, method_index, \
+ CONSTANT_NameAndType); \
+ fputc ('\n', out); \
+}
+
+#define HANDLE_SIGNATURE_ATTRIBUTE() \
+{ \
+ COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+ uint16 signature = JCF_readu2 (jcf); \
+ fprintf (out, "\n Value: "); \
+ print_constant_terse_with_index (out, jcf, signature, CONSTANT_Utf8); \
+ fputc ('\n', out); \
+}
+
+#define HANDLE_RUNTIMEVISIBLEANNOTATIONS_ATTRIBUTE() \
+{ \
+ COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+ print_annotations (out, jcf, 1); \
+}
+
+#define HANDLE_RUNTIMEINVISIBLEANNOTATIONS_ATTRIBUTE() \
+{ \
+ COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+ print_annotations (out, jcf, 1); \
+}
+
+#define HANDLE_RUNTIMEVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE() \
+{ \
+ COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+ print_parameter_annotations (out, jcf, 1); \
+}
+
+#define HANDLE_RUNTIMEINVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE() \
+{ \
+ COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+ print_parameter_annotations (out, jcf, 1); \
+}
+
+#define HANDLE_ANNOTATIONDEFAULT_ATTRIBUTE() \
+{ \
+ COMMON_HANDLE_ATTRIBUTE(jcf, attribute_name, attribute_length); \
+ print_element_value (out, jcf, 1); \
+}
+
+
#define PROCESS_OTHER_ATTRIBUTE(JCF, INDEX, LENGTH) \
{ COMMON_HANDLE_ATTRIBUTE(JCF, INDEX, LENGTH); \
fputc ('\n', out); JCF_SKIP (JCF, LENGTH); }
@@ -367,7 +445,157 @@
#include "javaop.h"
+\f
+
static void
+indent (FILE *stream, int level)
+{
+ int i;
+ for (i = 0; i < level; ++i)
+ fprintf (stream, " ");
+}
+
+static void
+print_element_value (FILE *stream, JCF *jcf, int level)
+{
+ uint8 tag = JCF_readu (jcf);
+ indent (stream, level);
+ switch (tag)
+ {
+ case 'B':
+ case 'C':
+ case 'S':
+ case 'Z':
+ case 'I':
+ {
+ uint16 cindex = JCF_readu2 (jcf);
+ print_constant_terse_with_index (stream, jcf, cindex,
+ CONSTANT_Integer);
+ }
+ break;
+ case 'D':
+ {
+ uint16 cindex = JCF_readu2 (jcf);
+ print_constant_terse_with_index (stream, jcf, cindex,
+ CONSTANT_Double);
+ }
+ break;
+ case 'F':
+ {
+ uint16 cindex = JCF_readu2 (jcf);
+ print_constant_terse_with_index (stream, jcf, cindex,
+ CONSTANT_Float);
+ }
+ break;
+ case 'J':
+ {
+ uint16 cindex = JCF_readu2 (jcf);
+ print_constant_terse_with_index (stream, jcf, cindex,
+ CONSTANT_Long);
+ }
+ break;
+ case 's':
+ {
+ uint16 cindex = JCF_readu2 (jcf);
+ print_constant_terse_with_index (stream, jcf, cindex,
+ CONSTANT_String);
+ }
+ break;
+
+ case 'e':
+ {
+ uint16 type_name_index = JCF_readu2 (jcf);
+ uint16 const_name_index = JCF_readu2 (jcf);
+ fprintf (stream, "enum class: ");
+ print_constant_terse_with_index (stream, jcf, type_name_index,
+ CONSTANT_Utf8);
+ fprintf (stream, "\n");
+ indent (stream, level);
+ fprintf (stream, "Field: ");
+ print_constant_terse_with_index (stream, jcf, const_name_index,
+ CONSTANT_Utf8);
+ }
+ break;
+ case 'c':
+ {
+ uint16 class_info_index = JCF_readu2 (jcf);
+ print_constant_terse_with_index (stream, jcf, class_info_index,
+ CONSTANT_Utf8);
+ }
+ break;
+ case '@':
+ {
+ fprintf (stream, "Annotation:\n");
+ print_annotation (stream, jcf, level + 1);
+ }
+ break;
+ case '[':
+ {
+ uint16 n_array_elts = JCF_readu2 (jcf);
+ fprintf (stream, "array[%d]: [\n", (int) n_array_elts);
+ while (n_array_elts--)
+ print_element_value (stream, jcf, level + 1);
+ indent (stream, level);
+ fprintf (stream, "]");
+ }
+ break;
+ default:
+ fprintf (stream, "Unexpected tag value: %d", (int) tag);
+ break;
+ }
+ fputc ('\n', stream);
+}
+
+static void
+print_annotation (FILE *stream, JCF *jcf, int level)
+{
+ uint16 type_index = JCF_readu2 (jcf);
+ uint16 npairs = JCF_readu2 (jcf);
+ fprintf (stream, "\n");
+ indent (stream, level);
+ fprintf (stream, "Annotation name: ");
+ print_constant_terse_with_index (stream, jcf, type_index,
+ CONSTANT_Utf8);
+ if (npairs)
+ {
+ fprintf (stream, "\n");
+ while (npairs--)
+ {
+ uint16 name_index = JCF_readu2 (jcf);
+ indent (stream, level + 1);
+ fprintf (stream, "Name: ");
+ print_constant_terse_with_index (stream, jcf, name_index,
+ CONSTANT_Utf8);
+ fprintf (stream, "\n");
+ print_element_value (stream, jcf, level + 2);
+ }
+ }
+}
+
+static void
+print_annotations (FILE *stream, JCF *jcf, int level)
+{
+ uint16 num = JCF_readu2 (jcf);
+ while (num--)
+ print_annotation (stream, jcf, level);
+}
+
+static void
+print_parameter_annotations (FILE *stream, JCF *jcf, int level)
+{
+ uint8 nparams = JCF_readu (jcf);
+ uint8 i;
+ for (i = 0; i < nparams; ++i)
+ {
+ indent (stream, level);
+ fprintf (stream, "Parameter annotations (%d):\n", (int) i);
+ print_annotations (stream, jcf, level + 1);
+ }
+}
+
+\f
+
+static void
print_constant_ref (FILE *stream, JCF *jcf, int index)
{
if (index <= 0 || index >= JPOOL_SIZE(jcf))
Index: jcf-reader.c
===================================================================
--- jcf-reader.c (revision 114870)
+++ jcf-reader.c (working copy)
@@ -1,7 +1,7 @@
/* This file read a Java(TM) .class file.
It is not stand-alone: It depends on tons of macros, and the
intent is you #include this file after you've defined the macros.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005
+ Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
Free Software Foundation, Inc.
This file is part of GCC.
@@ -199,6 +199,14 @@
}
else
#endif
+#ifdef HANDLE_LOCALVARIABLETYPETABLE_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("LocalVariableTypeTable"))
+ {
+ uint16 count = JCF_readu2 (jcf);
+ HANDLE_LOCALVARIABLETYPETABLE_ATTRIBUTE (count);
+ }
+ else
+#endif
#ifdef HANDLE_INNERCLASSES_ATTRIBUTE
if (MATCH_ATTRIBUTE ("InnerClasses"))
{
@@ -235,7 +243,56 @@
}
else
#endif
+#ifdef HANDLE_ENCLOSINGMETHOD_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("EnclosingMethod"))
{
+ HANDLE_ENCLOSINGMETHOD_ATTRIBUTE ();
+ }
+ else
+#endif
+#ifdef HANDLE_SIGNATURE_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("Signature"))
+ {
+ HANDLE_SIGNATURE_ATTRIBUTE ();
+ }
+ else
+#endif
+#ifdef HANDLE_RUNTIMEVISIBLEANNOTATIONS_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("RuntimeVisibleAnnotations"))
+ {
+ HANDLE_RUNTIMEVISIBLEANNOTATIONS_ATTRIBUTE ();
+ }
+ else
+#endif
+#ifdef HANDLE_RUNTIMEINVISIBLEANNOTATIONS_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("RuntimeInvisibleAnnotations"))
+ {
+ HANDLE_RUNTIMEINVISIBLEANNOTATIONS_ATTRIBUTE ();
+ }
+ else
+#endif
+#ifdef HANDLE_RUNTIMEVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("RuntimeVisibleParameterAnnotations"))
+ {
+ HANDLE_RUNTIMEVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE ();
+ }
+ else
+#endif
+#ifdef HANDLE_RUNTIMEINVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("RuntimeInvisibleParameterAnnotations"))
+ {
+ HANDLE_RUNTIMEINVISIBLEPARAMETERANNOTATIONS_ATTRIBUTE ();
+ }
+ else
+#endif
+#ifdef HANDLE_ANNOTATIONDEFAULT_ATTRIBUTE
+ if (MATCH_ATTRIBUTE ("AnnotationDefault"))
+ {
+ HANDLE_ANNOTATIONDEFAULT_ATTRIBUTE ();
+ }
+ else
+#endif
+ {
#ifdef PROCESS_OTHER_ATTRIBUTE
PROCESS_OTHER_ATTRIBUTE(jcf, attribute_name, attribute_length);
#else
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [ecj] Patch: FYI: update jcf-dump for 1.5
2006-06-28 0:45 [ecj] Patch: FYI: update jcf-dump for 1.5 Tom Tromey
@ 2006-07-02 10:51 ` Andrew John Hughes
2006-07-05 15:54 ` Tom Tromey
0 siblings, 1 reply; 6+ messages in thread
From: Andrew John Hughes @ 2006-07-02 10:51 UTC (permalink / raw)
To: tromey; +Cc: Java Patch List
[-- Attachment #1: Type: text/plain, Size: 947 bytes --]
On Tue, 2006-06-27 at 18:41 -0600, Tom Tromey wrote:
> I'm checking this in on the gcj-eclipse branch.
>
> This updates jcf-dump for the new 1.5 features:
>
> * Handle Signature attribute. (I renamed "signature" to "descriptor"
> elsewhere for clarify and better conformance to the new JVM spec.)
> The signature handling is pretty lame -- we just print it as a
> string, rather than trying to decode it.
> * Handle EnclosingMethod
> * Handle LocalVariableTypeTable
> * Handle all annotation-related attributes
>
> Tom
With this change to jcf-dump, I get compile warnings about mixing code
with definitions in C90. Due to -Werror being defined, the build stops.
I can compile if I manually remove the -Werror for this file and
re-compile.
Thanks,
--
Andrew :-)
Escape the Java Trap with GNU Classpath!
http://www.gnu.org/philosophy/java-trap.html
public class gcj extends Freedom implements Java { ... }
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [ecj] Patch: FYI: update jcf-dump for 1.5
2006-07-02 10:51 ` Andrew John Hughes
@ 2006-07-05 15:54 ` Tom Tromey
0 siblings, 0 replies; 6+ messages in thread
From: Tom Tromey @ 2006-07-05 15:54 UTC (permalink / raw)
To: Andrew John Hughes; +Cc: Java Patch List
>>>>> "Andrew" == Andrew John Hughes <gnu_andrew@member.fsf.org> writes:
Andrew> With this change to jcf-dump, I get compile warnings about
Andrew> mixing code with definitions in C90. Due to -Werror being
Andrew> defined, the build stops.
Oops, my mistake. Could you send me the error message? I'll fix it.
Tom
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [ecj] Patch: FYI: update jcf-dump for 1.5
2006-06-06 4:44 ` Michael Koch
@ 2006-06-06 16:44 ` Tom Tromey
0 siblings, 0 replies; 6+ messages in thread
From: Tom Tromey @ 2006-06-06 16:44 UTC (permalink / raw)
To: Michael Koch; +Cc: Java Patch List, Gcc Patch List
>>>>> "Michael" == Michael Koch <konqueror@gmx.de> writes:
Tom> This updates jcf-dump to properly dump the new 1.5 access bits.
Michael> Is there a reason this was only commited to the gcj-eclipse branch? I
Michael> think there is no reason not to commit this to trunk too. This would
Michael> help some people (at least me).
Good point. I'm committing it to svn head.
Tom
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [ecj] Patch: FYI: update jcf-dump for 1.5
2006-06-05 18:11 Tom Tromey
@ 2006-06-06 4:44 ` Michael Koch
2006-06-06 16:44 ` Tom Tromey
0 siblings, 1 reply; 6+ messages in thread
From: Michael Koch @ 2006-06-06 4:44 UTC (permalink / raw)
To: Tom Tromey; +Cc: Java Patch List, Gcc Patch List
On Mon, Jun 05, 2006 at 12:07:58PM -0600, Tom Tromey wrote:
> I'm checking this in on the gcj-eclipse branch.
>
> This updates jcf-dump to properly dump the new 1.5 access bits.
>
> We still don't dump the new attributes, e.g., annotations. I expect
> we'll do annotations as another set of patches somewhat later.
>
> Tom
>
> Index: ChangeLog
> from Tom Tromey <tromey@redhat.com>
>
> * jcf-dump.c (print_access_flags): Handle varargs, bridge,
> synthetic, enum, annotation.
> * jcf.h (ACC_BRIDGE): New macro.
> (ACC_VARARGS): Likewise.
> (ACC_SYNTHETIC): Likewise.
> (ACC_ENUM): Likewise.
> (ACC_ANNOTATION): Likewise.
Is there a reason this was only commited to the gcj-eclipse branch? I
think there is no reason not to commit this to trunk too. This would
help some people (at least me).
Michael
--
Escape the Java Trap with GNU Classpath!
http://www.gnu.org/philosophy/java-trap.html
Join the community at http://planet.classpath.org/
^ permalink raw reply [flat|nested] 6+ messages in thread
* [ecj] Patch: FYI: update jcf-dump for 1.5
@ 2006-06-05 18:11 Tom Tromey
2006-06-06 4:44 ` Michael Koch
0 siblings, 1 reply; 6+ messages in thread
From: Tom Tromey @ 2006-06-05 18:11 UTC (permalink / raw)
To: Java Patch List; +Cc: Gcc Patch List
I'm checking this in on the gcj-eclipse branch.
This updates jcf-dump to properly dump the new 1.5 access bits.
We still don't dump the new attributes, e.g., annotations. I expect
we'll do annotations as another set of patches somewhat later.
Tom
Index: ChangeLog
from Tom Tromey <tromey@redhat.com>
* jcf-dump.c (print_access_flags): Handle varargs, bridge,
synthetic, enum, annotation.
* jcf.h (ACC_BRIDGE): New macro.
(ACC_VARARGS): Likewise.
(ACC_SYNTHETIC): Likewise.
(ACC_ENUM): Likewise.
(ACC_ANNOTATION): Likewise.
Index: jcf.h
===================================================================
--- jcf.h (revision 114390)
+++ jcf.h (working copy)
@@ -224,12 +224,17 @@
#define ACC_FINAL 0x0010
#define ACC_SYNCHRONIZED 0x0020
#define ACC_SUPER 0x0020
+#define ACC_BRIDGE 0x0040
#define ACC_VOLATILE 0x0040
#define ACC_TRANSIENT 0x0080
+#define ACC_VARARGS 0x0080
#define ACC_NATIVE 0x0100
#define ACC_INTERFACE 0x0200
#define ACC_ABSTRACT 0x0400
#define ACC_STRICT 0x0800
+#define ACC_SYNTHETIC 0x01000
+#define ACC_ANNOTATION 0x02000
+#define ACC_ENUM 0x04000
/* "Invisible" refers to Miranda methods inserted into an abstract
class. It is also used in the runtime. */
#define ACC_INVISIBLE 0x8000
Index: jcf-dump.c
===================================================================
--- jcf-dump.c (revision 114390)
+++ jcf-dump.c (working copy)
@@ -395,8 +395,10 @@
if (flags & ACC_ABSTRACT) fprintf (stream, " abstract");
if (flags & ACC_STATIC) fprintf (stream, " static");
if (flags & ACC_FINAL) fprintf (stream, " final");
- if (flags & ACC_TRANSIENT) fprintf (stream, " transient");
- if (flags & ACC_VOLATILE) fprintf (stream, " volatile");
+ if (flags & ACC_TRANSIENT)
+ fprintf (stream, context == 'm' ? " varargs" : " transient");
+ if (flags & ACC_VOLATILE)
+ fprintf (stream, context == 'm' ? " bridge" : " volatile");
if (flags & ACC_NATIVE) fprintf (stream, " native");
if (flags & ACC_SYNCHRONIZED)
{
@@ -405,8 +407,11 @@
else
fprintf (stream, " synchronized");
}
- if (flags & ACC_INTERFACE) fprintf (stream, " interface");
+ if (flags & ACC_INTERFACE)
+ fprintf (stream, (flags & ACC_ANNOTATION) ? " @interface" : " interface");
+ if (flags & ACC_ENUM) fprintf (stream, " enum");
if (flags & ACC_STRICT) fprintf (stream, " strictfp");
+ if (flags & ACC_SYNTHETIC) fprintf (stream, " synthetic");
}
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2006-07-05 15:54 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2006-06-28 0:45 [ecj] Patch: FYI: update jcf-dump for 1.5 Tom Tromey
2006-07-02 10:51 ` Andrew John Hughes
2006-07-05 15:54 ` Tom Tromey
-- strict thread matches above, loose matches on Subject: below --
2006-06-05 18:11 Tom Tromey
2006-06-06 4:44 ` Michael Koch
2006-06-06 16:44 ` Tom Tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).