1 // $Id: unparse.cpp,v 1.45 2004/03/25 13:32:29 ericb Exp $
2 //
3 // This software is subject to the terms of the IBM Jikes Compiler
4 // License Agreement available at the following URL:
5 // http://ibm.com/developerworks/opensource/jikes.
6 // Copyright (C) 1999, 2004 IBM Corporation and others.  All Rights Reserved.
7 // You must accept the terms of that agreement to use this software.
8 //
9 
10 #include "ast.h"
11 #include "stream.h"
12 
13 #ifdef JIKES_DEBUG
14 
15 #ifdef HAVE_JIKES_NAMESPACE
16 namespace Jikes { // Open namespace Jikes block
17 #endif
18 
19 
20 bool Ast::debug_unparse = false;
21 
22 // Special top-level form
Unparse(LexStream * lex_stream,const char * const directory)23 void AstCompilationUnit::Unparse(LexStream* lex_stream,
24                                  const char* const directory)
25 {
26     char* in_file_name = lex_stream -> FileName();
27     // const char* suffix = ".unparse";
28     const char* suffix = "";
29     char* out_file_name = strcat3(directory, in_file_name, suffix);
30     // Create the directory if necessary
31     SystemMkdirhierForFile(out_file_name);
32     ofstream os_base(out_file_name);
33     if (! os_base)
34     {
35         Ostream() << "Cannot open output file " << out_file_name << endl;
36         abort();
37     }
38     Ostream os(&os_base);
39     Unparse(os, lex_stream);
40     delete [] out_file_name;
41 }
42 
Unparse(Ostream & os,LexStream * lex_stream)43 void AstBlock::Unparse(Ostream& os, LexStream* lex_stream)
44 {
45     if (debug_unparse)
46         os << "/*AstBlock:#" << id << "*/"
47            << "/*no_braces:" << no_braces << "*/";
48     if (label_opt)
49         os << lex_stream -> NameString(label_opt) << ": ";
50     if (! no_braces)
51         os << '{' << endl;
52     for (unsigned i = 0; i < NumStatements(); i++)
53         Statement(i) -> Unparse(os, lex_stream);
54     if (! no_braces)
55         os << '}' << endl;
56     if (debug_unparse)
57         os << "/*:AstBlock#" << id << "*/";
58 }
59 
Unparse(Ostream & os,LexStream * lex_stream)60 void AstName::Unparse(Ostream& os, LexStream* lex_stream)
61 {
62     if (debug_unparse)
63         os << "/*AstName:#" << id << "*/";
64     if (base_opt)
65     {
66         base_opt -> Unparse(os, lex_stream);
67         os << '.';
68     }
69     os << lex_stream -> NameString(identifier_token);
70     if (debug_unparse)
71         os << "/*:AstName#" << id << "*/";
72 }
73 
Unparse(Ostream & os,LexStream * lex_stream)74 void AstPrimitiveType::Unparse(Ostream& os, LexStream* lex_stream)
75 {
76     if (debug_unparse)
77         os << "/*AstPrimitiveType:#" << id << "*/";
78     os << lex_stream -> NameString(primitive_kind_token);
79     if (debug_unparse)
80         os << "/*:AstPrimitiveType#" << id << "*/";
81 }
82 
Unparse(Ostream & os,LexStream *)83 void AstBrackets::Unparse(Ostream& os, LexStream*)
84 {
85     if (debug_unparse)
86         os << "/*AstBrackets:#" << id << "*/";
87     for (unsigned i = 0; i < dims; i++)
88         os << "[]";
89     if (debug_unparse)
90         os << "/*:AstBrackets#" << id << "*/";
91 }
92 
Unparse(Ostream & os,LexStream * lex_stream)93 void AstArrayType::Unparse(Ostream& os, LexStream* lex_stream)
94 {
95     if (debug_unparse)
96         os << "/*AstArrayType:#" << id << "*/";
97     type -> Unparse(os, lex_stream);
98     brackets -> Unparse(os, lex_stream);
99     if (debug_unparse)
100         os << "/*:AstArrayType#" << id << "*/";
101 }
102 
Unparse(Ostream & os,LexStream * lex_stream)103 void AstWildcard::Unparse(Ostream& os, LexStream* lex_stream)
104 {
105     if (debug_unparse)
106         os << "/*AstWildcard:#" << id << "*/";
107     os << lex_stream -> NameString(question_token);
108     if (extends_token_opt)
109     {
110         os << ' ' << lex_stream -> NameString(extends_token_opt) << ' ';
111         bounds_opt -> Unparse(os, lex_stream);
112     }
113     else if (super_token_opt)
114     {
115         os << ' ' << lex_stream -> NameString(super_token_opt) << ' ';
116         bounds_opt -> Unparse(os, lex_stream);
117     }
118     if (debug_unparse)
119         os << "/*:AstWildcard#" << id << "*/";
120 }
121 
Unparse(Ostream & os,LexStream * lex_stream)122 void AstTypeArguments::Unparse(Ostream& os, LexStream* lex_stream)
123 {
124     if (debug_unparse)
125         os << "/*AstTypeArguments:#" << id << "*/";
126     os << lex_stream -> NameString(left_angle_token);
127     if (NumTypeArguments())
128         TypeArgument(0) -> Unparse(os, lex_stream);
129     for (unsigned i = 1; i < NumTypeArguments(); i++)
130     {
131         os << ", ";
132         TypeArgument(i) -> Unparse(os, lex_stream);
133     }
134     os << lex_stream -> NameString(right_angle_token);
135     if (debug_unparse)
136         os << "/*:AstTypeArguments#" << id << "*/";
137 }
138 
Unparse(Ostream & os,LexStream * lex_stream)139 void AstTypeName::Unparse(Ostream& os, LexStream* lex_stream)
140 {
141     if (debug_unparse)
142         os << "/*AstTypeName:#" << id << "*/";
143     if (base_opt)
144     {
145         base_opt -> Unparse(os, lex_stream);
146         os << '.';
147     }
148     name -> Unparse(os, lex_stream);
149     if (type_arguments_opt)
150         type_arguments_opt -> Unparse(os, lex_stream);
151     if (debug_unparse)
152         os << "/*:AstTypeName#" << id << "*/";
153 }
154 
Unparse(Ostream & os,LexStream * lex_stream)155 void AstMemberValuePair::Unparse(Ostream& os, LexStream* lex_stream)
156 {
157     if (debug_unparse)
158         os << "/*AstMemberValuePair:#" << id << "*/";
159     if (identifier_token_opt)
160         os << lex_stream -> NameString(identifier_token_opt) << " = ";
161     member_value -> Unparse(os, lex_stream);
162     if (debug_unparse)
163         os << "/*:AstMemberValuePair#" << id << "*/";
164 }
165 
Unparse(Ostream & os,LexStream * lex_stream)166 void AstAnnotation::Unparse(Ostream& os, LexStream* lex_stream)
167 {
168     if (debug_unparse)
169         os << "/*AstAnnotation:#" << id << "*/";
170     os << '@';
171     name -> Unparse(os, lex_stream);
172     if (right_paren_token_opt)
173         os << '(';
174     if (NumMemberValuePairs())
175     {
176         assert(right_paren_token_opt);
177         MemberValuePair(0) -> Unparse(os, lex_stream);
178     }
179     for (unsigned i = 1; i < NumMemberValuePairs(); i++)
180     {
181         os << ", ";
182         MemberValuePair(i) -> Unparse(os, lex_stream);
183     }
184     if (right_paren_token_opt)
185         os << ')';
186     os << endl;
187     if (debug_unparse)
188         os << "/*:AstAnnotation#" << id << "*/";
189 }
190 
Unparse(Ostream & os,LexStream * lex_stream)191 void AstModifierKeyword::Unparse(Ostream& os, LexStream* lex_stream)
192 {
193     if (debug_unparse)
194         os << "/*AstModifierKeyword:#" << id << "*/";
195     os << lex_stream -> NameString(modifier_token);
196     if (debug_unparse)
197        os << "/*:AstModifierKeyword#" << id << "*/";
198 }
199 
Unparse(Ostream & os,LexStream * lex_stream)200 void AstModifiers::Unparse(Ostream& os, LexStream* lex_stream)
201 {
202     if (debug_unparse)
203         os << "/*AstModifiers:#" << id << "*/";
204     for (unsigned i = 0; i < NumModifiers(); i++)
205     {
206         Modifier(i) -> Unparse(os, lex_stream);
207         if (Modifier(i) -> ModifierKeywordCast())
208             os << ' ';
209     }
210     if (debug_unparse)
211        os << "/*:AstModifiers#" << id << "*/";
212 }
213 
Unparse(Ostream & os,LexStream * lex_stream)214 void AstPackageDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
215 {
216     if (debug_unparse)
217         os << "/*AstPackageDeclaration:#" << id << "*/";
218     if (lex_stream -> IsDeprecated(LeftToken()))
219         os << "/**@deprecated*/ ";
220     if (modifiers_opt)
221         modifiers_opt -> Unparse(os, lex_stream);
222     os << lex_stream -> NameString(package_token) << ' ';
223     name -> Unparse(os, lex_stream);
224     os << ';' << endl;
225     if (debug_unparse)
226         os << "/*:AstPackageDeclaration#" << id << "*/";
227 }
228 
Unparse(Ostream & os,LexStream * lex_stream)229 void AstImportDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
230 {
231     if (debug_unparse)
232         os << "/*AstImportDeclaration:#" << id << "*/";
233     os << lex_stream -> NameString(import_token) << ' ';
234     if (static_token_opt)
235         os << lex_stream -> NameString(static_token_opt) << ' ';
236     name -> Unparse(os, lex_stream);
237     if (star_token_opt)
238         os << '.' << lex_stream -> NameString(star_token_opt);
239     os << ';' << endl;
240     if (debug_unparse)
241         os << "/*:AstImportDeclaration#" << id << "*/";
242 }
243 
Unparse(Ostream & os,LexStream * lex_stream)244 void AstCompilationUnit::Unparse(Ostream& os, LexStream* lex_stream)
245 {
246     unsigned i;
247     if (debug_unparse)
248         os << "/*AstCompilationUnit:#" << id << "*/";
249     os << "// " << lex_stream -> FileName() << endl;
250     if (package_declaration_opt)
251         package_declaration_opt -> Unparse(os, lex_stream);
252     for (i = 0; i < NumImportDeclarations(); i++)
253         ImportDeclaration(i) -> Unparse(os, lex_stream);
254     for (i = 0; i < NumTypeDeclarations(); i++)
255         TypeDeclaration(i) -> Unparse(os, lex_stream);
256     if (debug_unparse)
257         os << "/*:AstCompilationUnit#" << id << "*/";
258 }
259 
Unparse(Ostream & os,LexStream * lex_stream)260 void AstEmptyDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
261 {
262     if (debug_unparse)
263        os << "/*AstEmptyDeclaration:#" << id << "*/";
264     os << lex_stream -> NameString(semicolon_token) << endl;
265     if (debug_unparse)
266     os << "/*:AstEmptyDeclaration#" << id << "*/";
267 }
268 
Unparse(Ostream & os,LexStream * lex_stream,bool enum_body)269 void AstClassBody::Unparse(Ostream& os, LexStream* lex_stream, bool enum_body)
270 {
271     if (debug_unparse)
272         os << "/*AstClassBody:#" << id << "*/";
273     if (enum_body)
274         os << ';' << endl;
275     else os << '{' << endl;
276     for (unsigned i = 0; i < NumClassBodyDeclarations(); i++)
277         ClassBodyDeclaration(i) -> Unparse(os, lex_stream);
278     os << '}' << endl;
279     if (debug_unparse)
280         os << "/*:AstClassBody#" << id << "*/";
281 }
282 
Unparse(Ostream & os,LexStream * lex_stream)283 void AstTypeParameter::Unparse(Ostream& os, LexStream* lex_stream)
284 {
285     if (debug_unparse)
286         os << "/*AstTypeParameter:#" << id << "*/";
287     os << lex_stream -> NameString(identifier_token);
288     if (NumBounds())
289     {
290         os << " extends ";
291         Bound(0) -> Unparse(os, lex_stream);
292     }
293     for (unsigned i = 1; i < NumBounds(); i++)
294     {
295         os << " & ";
296         Bound(i) -> Unparse(os, lex_stream);
297     }
298     if (debug_unparse)
299         os << "/*:AstTypeParameter#" << id << "*/";
300 }
301 
Unparse(Ostream & os,LexStream * lex_stream)302 void AstTypeParameters::Unparse(Ostream& os, LexStream* lex_stream)
303 {
304     if (debug_unparse)
305         os << "/*AstTypeParameters:#" << id << "*/";
306     os << '<';
307     TypeParameter(0) -> Unparse(os, lex_stream);
308     for (unsigned i = 1; i < NumTypeParameters(); i++)
309     {
310         os << ", ";
311         TypeParameter(i) -> Unparse(os, lex_stream);
312     }
313     os << '>';
314     if (debug_unparse)
315         os << "/*:AstTypeParameters#" << id << "*/";
316 }
317 
Unparse(Ostream & os,LexStream * lex_stream)318 void AstClassDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
319 {
320     if (debug_unparse)
321         os << "/*AstClassDeclaration:#" << id << "*/";
322     if (lex_stream -> IsDeprecated(LeftToken()))
323         os << "/**@deprecated*/ ";
324     if (modifiers_opt)
325         modifiers_opt -> Unparse(os, lex_stream);
326     os << lex_stream -> NameString(class_token) << ' '
327        << lex_stream -> NameString(class_body -> identifier_token) << ' ';
328     if (type_parameters_opt)
329         type_parameters_opt -> Unparse(os, lex_stream);
330     if (super_opt)
331     {
332         os << "extends ";
333         super_opt -> Unparse(os, lex_stream);
334         os << ' ';
335     }
336     if (NumInterfaces())
337     {
338         os << "implements ";
339         Interface(0) -> Unparse(os, lex_stream);
340         for (unsigned i = 1; i < NumInterfaces(); i++)
341         {
342             os << ", ";
343             Interface(i) -> Unparse(os, lex_stream);
344         }
345         os << ' ';
346     }
347     class_body -> Unparse(os, lex_stream);
348     if (debug_unparse)
349         os << "/*:AstClassDeclaration#" << id << "*/";
350 }
351 
Unparse(Ostream & os,LexStream * lex_stream)352 void AstArrayInitializer::Unparse(Ostream& os, LexStream* lex_stream)
353 {
354     if (debug_unparse)
355         os << "/*AstArrayInitializer:#" << id << "*/";
356     os << endl << "{ ";
357     if (NumVariableInitializers())
358         VariableInitializer(0) -> Unparse(os, lex_stream);
359     for (unsigned i = 1; i < NumVariableInitializers(); i++)
360     {
361         os << ", ";
362         VariableInitializer(i) -> Unparse(os, lex_stream);
363     }
364     os << " }";
365     if (debug_unparse)
366         os << "/*:AstArrayInitializer#" << id << "*/";
367 }
368 
Unparse(Ostream & os,LexStream * lex_stream)369 void AstVariableDeclaratorId::Unparse(Ostream& os, LexStream* lex_stream)
370 {
371     if (debug_unparse)
372         os << "/*AstVariableDeclaratorId:#" << id << "*/";
373     os << lex_stream -> NameString(identifier_token);
374     if (brackets_opt)
375         brackets_opt -> Unparse(os, lex_stream);
376     if (debug_unparse)
377         os << "/*:AstVariableDeclaratorId#" << id << "*/";
378 }
379 
Unparse(Ostream & os,LexStream * lex_stream)380 void AstVariableDeclarator::Unparse(Ostream& os, LexStream* lex_stream)
381 {
382     if (debug_unparse)
383         os << "/*AstVariableDeclarator:#" << id << "*/";
384     variable_declarator_name -> Unparse(os, lex_stream);
385     if (variable_initializer_opt)
386     {
387         os << " = ";
388         variable_initializer_opt -> Unparse(os, lex_stream);
389     }
390     if (debug_unparse)
391         os << "/*:AstVariableDeclarator#" << id << "*/";
392 }
393 
Unparse(Ostream & os,LexStream * lex_stream)394 void AstFieldDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
395 {
396     if (debug_unparse)
397         os << "/*AstFieldDeclaration:#" << id << "*/";
398     if (lex_stream -> IsDeprecated(LeftToken()))
399         os << "/**@deprecated*/ ";
400     if (modifiers_opt)
401         modifiers_opt -> Unparse(os, lex_stream);
402     type -> Unparse(os, lex_stream);
403     os << ' ';
404     VariableDeclarator(0) -> Unparse(os, lex_stream);
405     for (unsigned i = 1; i < NumVariableDeclarators(); i++)
406     {
407         os << ", ";
408         VariableDeclarator(i) -> Unparse(os, lex_stream);
409     }
410     os << ';' << endl;
411     if (debug_unparse)
412         os << "/*:AstFieldDeclaration#" << id << "*/";
413 }
414 
Unparse(Ostream & os,LexStream * lex_stream)415 void AstFormalParameter::Unparse(Ostream& os, LexStream* lex_stream)
416 {
417     if (debug_unparse)
418         os << "/*AstFormalParameter:#" << id << "*/";
419     if (modifiers_opt)
420         modifiers_opt -> Unparse(os, lex_stream);
421     type -> Unparse(os, lex_stream);
422     os << (ellipsis_token_opt ? "... " : " ");
423     formal_declarator -> Unparse(os, lex_stream);
424     if (debug_unparse)
425         os << "/*:AstFormalParameter#" << id << "*/";
426 }
427 
Unparse(Ostream & os,LexStream * lex_stream)428 void AstMethodDeclarator::Unparse(Ostream& os, LexStream* lex_stream)
429 {
430     if (debug_unparse)
431         os << "/*AstMethodDeclarator:#" << id << "*/";
432     os << lex_stream -> NameString(identifier_token) << '(';
433     if (NumFormalParameters())
434         FormalParameter(0) -> Unparse(os, lex_stream);
435     for (unsigned i = 1; i < NumFormalParameters(); i++)
436     {
437         os << ", ";
438         FormalParameter(i) -> Unparse(os, lex_stream);
439     }
440     os << ')';
441     if (brackets_opt)
442         brackets_opt -> Unparse(os, lex_stream);
443     os << ' ';
444     if (debug_unparse)
445         os << "/*:AstMethodDeclarator#" << id << "*/";
446 }
447 
Unparse(Ostream & os,LexStream * lex_stream)448 void AstMethodBody::Unparse(Ostream& os, LexStream* lex_stream)
449 {
450     if (debug_unparse)
451         os << "/*AstMethodBody:#" << id << "*/";
452     os << '{' << endl;
453     if (explicit_constructor_opt)
454         explicit_constructor_opt -> Unparse(os, lex_stream);
455     AstBlock::Unparse(os, lex_stream);
456     os << '}' << endl;
457     if (debug_unparse)
458         os << "/*:AstMethodBody#" << id << "*/";
459 }
460 
Unparse(Ostream & os,LexStream * lex_stream)461 void AstMethodDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
462 {
463     if (debug_unparse)
464         os << "/*AstMethodDeclaration:#" << id << "*/";
465     if (lex_stream -> IsDeprecated(LeftToken()))
466         os << "/**@deprecated*/ ";
467     if (modifiers_opt)
468         modifiers_opt -> Unparse(os, lex_stream);
469     if (type_parameters_opt)
470         type_parameters_opt -> Unparse(os, lex_stream);
471     type -> Unparse(os, lex_stream);
472     os << ' ';
473     method_declarator -> Unparse(os, lex_stream);
474     if (NumThrows())
475     {
476         os << "throws ";
477         Throw(0) -> Unparse(os, lex_stream);
478         for (unsigned i = 1; i < NumThrows(); i++)
479         {
480             os << ", ";
481             Throw(i) -> Unparse(os, lex_stream);
482         }
483     }
484     if (default_value_opt)
485         default_value_opt -> Unparse(os, lex_stream);
486     if (method_body_opt)
487         method_body_opt -> Unparse(os, lex_stream);
488     else os << ';';
489     if (debug_unparse)
490         os << "/*:AstMethodDeclaration#" << id << "*/";
491 }
492 
Unparse(Ostream & os,LexStream * lex_stream)493 void AstInitializerDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
494 {
495     if (debug_unparse)
496         os << "/*AstInitializerDeclaration:#" << id << "*/";
497     if (modifiers_opt)
498         modifiers_opt -> Unparse(os, lex_stream);
499     block -> Unparse(os, lex_stream);
500     if (debug_unparse)
501         os << "/*:AstInitializerDeclaration#" << id << "*/";
502 }
503 
Unparse(Ostream & os,LexStream * lex_stream)504 void AstArguments::Unparse(Ostream& os, LexStream* lex_stream)
505 {
506     if (debug_unparse)
507         os << "/*AstArguments:#" << id << "*/";
508     os << lex_stream -> NameString(left_parenthesis_token);
509     if (NumArguments())
510         Argument(0) -> Unparse(os, lex_stream);
511     for (unsigned i = 1; i < NumArguments(); i++)
512     {
513         os << ", ";
514         Argument(i) -> Unparse(os, lex_stream);
515     }
516     os << lex_stream -> NameString(right_parenthesis_token);
517     if (debug_unparse)
518         os << "/*:AstArguments#" << id << "*/";
519 }
520 
Unparse(Ostream & os,LexStream * lex_stream)521 void AstThisCall::Unparse(Ostream& os, LexStream* lex_stream)
522 {
523     if (debug_unparse)
524         os << "/*AstThisCall:#" << id << "*/";
525     if (type_arguments_opt)
526         type_arguments_opt -> Unparse(os, lex_stream);
527     os << lex_stream -> NameString(this_token);
528     arguments -> Unparse(os, lex_stream);
529     os << lex_stream -> NameString(semicolon_token) << endl;
530     if (debug_unparse)
531         os << "/*:AstThisCall#" << id << "*/";
532 }
533 
Unparse(Ostream & os,LexStream * lex_stream)534 void AstSuperCall::Unparse(Ostream& os, LexStream* lex_stream)
535 {
536     if (debug_unparse)
537         os << "/*AstSuperCall:#" << id << "*/";
538     if (! generated)
539     {
540         if (base_opt && ! base_opt -> generated)
541         {
542             base_opt -> Unparse(os, lex_stream);
543             os << '.';
544         }
545         if (type_arguments_opt)
546             type_arguments_opt -> Unparse(os, lex_stream);
547         os << lex_stream -> NameString(super_token);
548         arguments -> Unparse(os, lex_stream);
549         os << lex_stream -> NameString(semicolon_token) << endl;
550     }
551     if (debug_unparse)
552          os << "/*:AstSuperCall#" << id << "*/";
553 }
554 
Unparse(Ostream & os,LexStream * lex_stream)555 void AstConstructorDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
556 {
557     if (debug_unparse)
558         os << "/*AstConstructorDeclaration:#" << id << "*/";
559     if (lex_stream -> IsDeprecated(LeftToken()))
560         os << "/**@deprecated*/ ";
561     if (modifiers_opt)
562         modifiers_opt -> Unparse(os, lex_stream);
563     if (type_parameters_opt)
564         type_parameters_opt -> Unparse(os, lex_stream);
565     constructor_declarator -> Unparse(os, lex_stream);
566     if (NumThrows())
567     {
568         os << " throws ";
569         Throw(0) -> Unparse(os, lex_stream);
570         for (unsigned i = 1; i < NumThrows(); i++)
571         {
572             os << ", ";
573             Throw(i) -> Unparse(os, lex_stream);
574         }
575     }
576     constructor_body -> Unparse(os, lex_stream);
577     if (debug_unparse)
578         os << "/*:AstConstructorDeclaration#" << id << "*/";
579 }
580 
Unparse(Ostream & os,LexStream * lex_stream)581 void AstEnumDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
582 {
583     unsigned i;
584     if (debug_unparse)
585         os << "/*AstEnumDeclaration:#" << id << "*/";
586     if (lex_stream -> IsDeprecated(LeftToken()))
587         os << "/**@deprecated*/ ";
588     if (modifiers_opt)
589         modifiers_opt -> Unparse(os, lex_stream);
590     os << lex_stream -> NameString(enum_token) << ' '
591        << lex_stream -> NameString(class_body -> identifier_token) << ' ';
592     if (NumInterfaces())
593     {
594         os << "extends ";
595         Interface(0) -> Unparse(os, lex_stream);
596         for (i = 1; i < NumInterfaces(); i++)
597         {
598             os << ", ";
599             Interface(i) -> Unparse(os, lex_stream);
600         }
601     }
602     os << '{' << endl;
603     for (i = 0; i < NumEnumConstants(); i++)
604     {
605         EnumConstant(i) -> Unparse(os, lex_stream);
606         os << ',' << endl;
607     }
608     class_body -> Unparse(os, lex_stream, true);
609     if (debug_unparse)
610         os << "/*:AstEnumDeclaration#" << id << "*/";
611 }
612 
Unparse(Ostream & os,LexStream * lex_stream)613 void AstEnumConstant::Unparse(Ostream& os, LexStream* lex_stream)
614 {
615     if (debug_unparse)
616         os << "/*AstEnumConstant:#" << id << "*/";
617     if (lex_stream -> IsDeprecated(LeftToken()))
618         os << "/**@deprecated*/ ";
619     if (modifiers_opt)
620         modifiers_opt -> Unparse(os, lex_stream);
621     os << lex_stream -> NameString(identifier_token);
622     if (arguments_opt)
623         arguments_opt -> Unparse(os, lex_stream);
624     if (class_body_opt)
625     {
626         os << ' ';
627         class_body_opt -> Unparse(os, lex_stream);
628     }
629     if (debug_unparse)
630         os << "/*:AstEnumConstant#" << id << "*/";
631 }
632 
Unparse(Ostream & os,LexStream * lex_stream)633 void AstInterfaceDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
634 {
635     if (debug_unparse)
636         os << "/*AstInterfaceDeclaration:#" << id << "*/";
637     if (lex_stream -> IsDeprecated(LeftToken()))
638         os << "/**@deprecated*/ ";
639     if (modifiers_opt)
640         modifiers_opt -> Unparse(os, lex_stream);
641     os << lex_stream -> NameString(interface_token) << ' '
642        << lex_stream -> NameString(class_body -> identifier_token) << ' ';
643     if (type_parameters_opt)
644         type_parameters_opt -> Unparse(os, lex_stream);
645     if (NumInterfaces())
646     {
647         os << "extends ";
648         Interface(0) -> Unparse(os, lex_stream);
649         for (unsigned i = 1; i < NumInterfaces(); i++)
650         {
651             os << ", ";
652             Interface(i) -> Unparse(os, lex_stream);
653         }
654     }
655     class_body -> Unparse(os, lex_stream);
656     if (debug_unparse)
657         os << "/*:AstInterfaceDeclaration#" << id << "*/";
658 }
659 
Unparse(Ostream & os,LexStream * lex_stream)660 void AstAnnotationDeclaration::Unparse(Ostream& os, LexStream* lex_stream)
661 {
662     if (debug_unparse)
663         os << "/*AstAnnotationDeclaration:#" << id << "*/";
664     if (lex_stream -> IsDeprecated(LeftToken()))
665         os << "/**@deprecated*/ ";
666     if (modifiers_opt)
667         modifiers_opt -> Unparse(os, lex_stream);
668     os << lex_stream -> NameString(interface_token - 1)
669        << lex_stream -> NameString(interface_token) << ' '
670        << lex_stream -> NameString(class_body -> identifier_token) << ' ';
671     class_body -> Unparse(os, lex_stream);
672     if (debug_unparse)
673         os << "/*:AstAnnotationDeclaration#" << id << "*/";
674 }
675 
Unparse(Ostream & os,LexStream * lex_stream)676 void AstLocalVariableStatement::Unparse(Ostream& os, LexStream* lex_stream)
677 {
678     if (debug_unparse)
679         os << "/*AstLocalVariableStatement:#" << id << "*/";
680     if (modifiers_opt)
681         modifiers_opt -> Unparse(os, lex_stream);
682     type -> Unparse(os, lex_stream);
683     os << ' ';
684     VariableDeclarator(0) -> Unparse(os, lex_stream);
685     for (unsigned i = 1; i < NumVariableDeclarators(); i++)
686     {
687         os << ',';
688         VariableDeclarator(i) -> Unparse(os, lex_stream);
689     }
690     if (semicolon_token_opt)
691         os << ';' << endl;
692     if (debug_unparse)
693         os << "/*:AstLocalVariableStatement#" << id << "*/";
694 }
695 
Unparse(Ostream & os,LexStream * lex_stream)696 void AstLocalClassStatement::Unparse(Ostream& os, LexStream* lex_stream)
697 {
698     if (debug_unparse)
699         os << "/*AstLocalClassStatement:#" << id << "*/";
700     declaration -> Unparse(os, lex_stream);
701     if (debug_unparse)
702         os << "/*:AstLocalClassStatement#" << id << "*/";
703 }
704 
Unparse(Ostream & os,LexStream * lex_stream)705 void AstIfStatement::Unparse(Ostream& os, LexStream* lex_stream)
706 {
707     if (debug_unparse)
708         os << "/*AstIfStatement:#" << id << "*/";
709     os << lex_stream -> NameString(if_token) << '(';
710     expression -> Unparse(os, lex_stream);
711     os << ')' << endl;
712     true_statement -> Unparse(os, lex_stream);
713     if (false_statement_opt)
714     {
715         os << "else" << endl;
716         false_statement_opt -> Unparse(os, lex_stream);
717     }
718     os << endl;
719     if (debug_unparse)
720         os << "/*:AstIfStatement#" << id << "*/";
721 }
722 
Unparse(Ostream & os,LexStream * lex_stream)723 void AstEmptyStatement::Unparse(Ostream& os, LexStream* lex_stream)
724 {
725     if (debug_unparse)
726         os << "/*AstEmptyStatement:#" << id << "*/";
727     os << lex_stream -> NameString(semicolon_token) << endl;
728     if (debug_unparse)
729         os << "/*:AstEmptyStatement#" << id << "*/";
730 }
731 
Unparse(Ostream & os,LexStream * lex_stream)732 void AstExpressionStatement::Unparse(Ostream& os, LexStream* lex_stream)
733 {
734     if (debug_unparse)
735         os << "/*AstExpressionStatement:#" << id << "*/";
736     expression -> Unparse(os, lex_stream);
737     if (semicolon_token_opt)
738         os << ';' << endl;
739     if (debug_unparse)
740         os << "/*:AstExpressionStatement#" << id << "*/";
741 }
742 
Unparse(Ostream & os,LexStream * lex_stream)743 void AstSwitchLabel::Unparse(Ostream& os, LexStream* lex_stream)
744 {
745     if (debug_unparse)
746         os << "/*AstSwitchLabel:#" << id << "*/";
747     os << lex_stream -> NameString(case_token) << ' ';
748     if (expression_opt)
749         expression_opt -> Unparse(os, lex_stream);
750     os << ':' << endl;
751     if (debug_unparse)
752         os << "/*:AstSwitchLabel#" << id << "*/";
753 }
754 
Unparse(Ostream & os,LexStream * lex_stream)755 void AstSwitchBlockStatement::Unparse(Ostream& os, LexStream* lex_stream)
756 {
757     if (debug_unparse)
758         os << "/*AstSwitchBlockStatement:#" << id << "*/";
759     for (unsigned i = 0; i < NumSwitchLabels(); i++)
760         SwitchLabel(i) -> Unparse(os, lex_stream);
761     AstBlock::Unparse(os, lex_stream);
762     if (debug_unparse)
763         os << "/*:AstSwitchBlockStatement#" << id << "*/";
764 }
765 
Unparse(Ostream & os,LexStream * lex_stream)766 void AstSwitchStatement::Unparse(Ostream& os, LexStream* lex_stream)
767 {
768     if (debug_unparse)
769         os << "/*AstSwitchStatement:#" << id << "*/";
770     // What about the label_opt??
771     os << lex_stream -> NameString(switch_token) << '(';
772     expression -> Unparse(os, lex_stream);
773     os << ')';
774     switch_block -> Unparse(os, lex_stream);
775     if (debug_unparse)
776         os << "/*:AstSwitchStatement#" << id << "*/";
777 }
778 
Unparse(Ostream & os,LexStream * lex_stream)779 void AstWhileStatement::Unparse(Ostream& os, LexStream* lex_stream)
780 {
781     if (debug_unparse)
782         os << "/*AstWhileStatement:#" << id << "*/";
783     os << lex_stream -> NameString(while_token) << " (";
784     expression -> Unparse(os, lex_stream);
785     os << ')' << endl;
786     statement -> Unparse(os, lex_stream);
787     if (debug_unparse)
788         os << "/*:AstWhileStatement#" << id << "*/";
789 }
790 
Unparse(Ostream & os,LexStream * lex_stream)791 void AstDoStatement::Unparse(Ostream& os, LexStream* lex_stream)
792 {
793     if (debug_unparse)
794         os << "/*AstDoStatement:#" << id << "*/";
795     os << lex_stream -> NameString(do_token) << endl;
796     statement -> Unparse(os, lex_stream);
797     os << lex_stream -> NameString(while_token) << " (";
798     expression -> Unparse(os, lex_stream);
799     os << ')' << lex_stream -> NameString(semicolon_token) << endl;
800     if (debug_unparse)
801         os << "/*:AstDoStatement#" << id << "*/";
802 }
803 
Unparse(Ostream & os,LexStream * lex_stream)804 void AstForStatement::Unparse(Ostream& os, LexStream* lex_stream)
805 {
806     unsigned i;
807     if (debug_unparse)
808         os << "/*AstForStatement:#" << id << "*/";
809     os << lex_stream -> NameString(for_token) << " (";
810     if (NumForInitStatements())
811         ForInitStatement(0) -> Unparse(os, lex_stream);
812     else os << ' ';
813     for (i = 1; i < NumForInitStatements(); i++)
814     {
815         os << ", ";
816         ForInitStatement(i) -> Unparse(os, lex_stream);
817     }
818     os << "; ";
819     if (end_expression_opt)
820         end_expression_opt -> Unparse(os, lex_stream);
821     os << "; ";
822     if (NumForUpdateStatements())
823         ForUpdateStatement(0) -> Unparse(os, lex_stream);
824     for (i = 1; i < NumForUpdateStatements(); i++)
825     {
826         os << ", ";
827         ForUpdateStatement(i) -> Unparse(os, lex_stream);
828     }
829     os << ')' << endl;
830     statement -> Unparse(os, lex_stream);
831     if (debug_unparse)
832         os << "/*:AstForStatement#" << id << "*/";
833 }
834 
Unparse(Ostream & os,LexStream * lex_stream)835 void AstForeachStatement::Unparse(Ostream& os, LexStream* lex_stream)
836 {
837     if (debug_unparse)
838         os << "/*AstForeachStatement:#" << id << "*/";
839     os << lex_stream -> NameString(for_token) << " (";
840     formal_parameter -> Unparse(os, lex_stream);
841     os << " : ";
842     expression -> Unparse(os, lex_stream);
843     os << ')' << endl;
844     statement -> Unparse(os, lex_stream);
845     if (debug_unparse)
846         os << "/*:AstForeachStatement#" << id << "*/";
847 }
848 
Unparse(Ostream & os,LexStream * lex_stream)849 void AstBreakStatement::Unparse(Ostream& os, LexStream* lex_stream)
850 {
851     if (debug_unparse)
852         os << "/*AstBreakStatement:#" << id << "*/";
853     os << lex_stream -> NameString(break_token);
854     if (identifier_token_opt)
855     {
856         os << ' ' << lex_stream -> NameString(identifier_token_opt);
857     }
858     os << ';' << endl;
859     if (debug_unparse)
860         os << "/*:AstBreakStatement#" << id << "*/";
861 }
862 
Unparse(Ostream & os,LexStream * lex_stream)863 void AstContinueStatement::Unparse(Ostream& os, LexStream* lex_stream)
864 {
865     if (debug_unparse)
866         os << "/*AstContinueStatement:#" << id << "*/";
867     os << lex_stream -> NameString(continue_token);
868     if (identifier_token_opt)
869     {
870         os << ' ' << lex_stream -> NameString(identifier_token_opt);
871     }
872     os << ';' << endl;
873     if (debug_unparse)
874         os << "/*:AstContinueStatement#" << id << "*/";
875 }
876 
Unparse(Ostream & os,LexStream * lex_stream)877 void AstReturnStatement::Unparse(Ostream& os, LexStream* lex_stream)
878 {
879     if (debug_unparse)
880         os << "/*AstReturnStatement:#" << id << "*/";
881     if (! generated)
882     {
883         os << lex_stream -> NameString(return_token);
884         if (expression_opt)
885         {
886             os << ' ';
887             expression_opt -> Unparse(os, lex_stream);
888         }
889         os << ';' << endl;
890     }
891     if (debug_unparse)
892         os << "/*:AstReturnStatement#" << id << "*/";
893 }
894 
Unparse(Ostream & os,LexStream * lex_stream)895 void AstThrowStatement::Unparse(Ostream& os, LexStream* lex_stream)
896 {
897     if (debug_unparse)
898         os << "/*AstThrowStatement:#" << id << "*/";
899     os << lex_stream -> NameString(throw_token) << ' ';
900     expression -> Unparse(os, lex_stream);
901     os << ';' << endl;
902     if (debug_unparse)
903         os << "/*:AstThrowStatement#" << id << "*/";
904 }
905 
Unparse(Ostream & os,LexStream * lex_stream)906 void AstSynchronizedStatement::Unparse(Ostream& os, LexStream* lex_stream)
907 {
908     if (debug_unparse)
909         os << "/*AstSynchronizedStatement:#" << id << "*/";
910     os << lex_stream -> NameString(synchronized_token) << " (";
911     expression -> Unparse(os, lex_stream);
912     os << ')' << endl;
913     block -> Unparse(os, lex_stream);
914     if (debug_unparse)
915         os << "/*:AstSynchronizedStatement#" << id << "*/";
916 }
917 
Unparse(Ostream & os,LexStream * lex_stream)918 void AstAssertStatement::Unparse(Ostream& os, LexStream* lex_stream)
919 {
920     if (debug_unparse)
921         os << "/*AstAssertStatement:#" << id << "*/";
922     os << lex_stream -> NameString(assert_token) << ' ';
923     condition -> Unparse(os, lex_stream);
924     if (message_opt)
925     {
926         os << " : ";
927         message_opt -> Unparse(os, lex_stream);
928     }
929     os << ';' << endl;
930     if (debug_unparse)
931         os << "/*:AstAssertStatement#" << id << "*/";
932 }
933 
Unparse(Ostream & os,LexStream * lex_stream)934 void AstCatchClause::Unparse(Ostream& os, LexStream* lex_stream)
935 {
936     if (debug_unparse)
937         os << "/*AstCatchClause:#" << id << "*/";
938     os << lex_stream -> NameString(catch_token) << " (";
939     formal_parameter -> Unparse(os, lex_stream);
940     os << ')' << endl;
941     block -> Unparse(os, lex_stream);
942     if (debug_unparse)
943         os << "/*:AstCatchClause#" << id << "*/";
944 }
945 
Unparse(Ostream & os,LexStream * lex_stream)946 void AstFinallyClause::Unparse(Ostream& os, LexStream* lex_stream)
947 {
948     if (debug_unparse)
949         os << "/*AstFinallyClause:#" << id << "*/";
950     os << lex_stream -> NameString(finally_token) << endl;
951     block -> Unparse(os, lex_stream);
952     if (debug_unparse)
953         os << "/*:AstFinallyClause#" << id << "*/";
954 }
955 
Unparse(Ostream & os,LexStream * lex_stream)956 void AstTryStatement::Unparse(Ostream& os, LexStream* lex_stream)
957 {
958     if (debug_unparse)
959         os << "/*AstTryStatement:#" << id << "*/";
960     os << lex_stream -> NameString(try_token) << endl;
961     block -> Unparse(os, lex_stream);
962     for (unsigned i = 0; i < NumCatchClauses(); i++)
963         CatchClause(i) -> Unparse(os, lex_stream);
964     if (finally_clause_opt)
965         finally_clause_opt -> Unparse(os, lex_stream);
966     if (debug_unparse)
967         os << "/*:AstTryStatement#" << id << "*/";
968 }
969 
Unparse(Ostream & os,LexStream * lex_stream)970 void AstIntegerLiteral::Unparse(Ostream& os, LexStream* lex_stream)
971 {
972     if (debug_unparse)
973         os << "/*AstIntegerLiteral:#" << id << "*/";
974     os << lex_stream -> NameString(integer_literal_token);
975     if (debug_unparse)
976         os << "/*:AstIntegerLiteral#" << id << "*/";
977 }
978 
Unparse(Ostream & os,LexStream * lex_stream)979 void AstLongLiteral::Unparse(Ostream& os, LexStream* lex_stream)
980 {
981     if (debug_unparse)
982         os << "/*AstLongLiteral:#" << id << "*/";
983     os << lex_stream -> NameString(long_literal_token);
984     if (debug_unparse)
985         os << "/*:AstLongLiteral#" << id << "*/";
986 }
987 
Unparse(Ostream & os,LexStream * lex_stream)988 void AstFloatLiteral::Unparse(Ostream& os, LexStream* lex_stream)
989 {
990     if (debug_unparse)
991         os << "/*AstFloatLiteral:#" << id << "*/";
992     os << lex_stream -> NameString(float_literal_token);
993     if (debug_unparse)
994         os << "/*:AstFloatLiteral#" << id << "*/";
995 }
996 
Unparse(Ostream & os,LexStream * lex_stream)997 void AstDoubleLiteral::Unparse(Ostream& os, LexStream* lex_stream)
998 {
999     if (debug_unparse)
1000         os << "/*AstDoubleLiteral:#" << id << "*/";
1001     os << lex_stream -> NameString(double_literal_token);
1002     if (debug_unparse)
1003         os << "/*:AstDoubleLiteral#" << id << "*/";
1004 }
1005 
Unparse(Ostream & os,LexStream * lex_stream)1006 void AstTrueLiteral::Unparse(Ostream& os, LexStream* lex_stream)
1007 {
1008     if (debug_unparse)
1009         os << "/*AstTrueLiteral:#" << id << "*/";
1010     os << lex_stream -> NameString(true_literal_token);
1011     if (debug_unparse)
1012         os << "/*:AstTrueLiteral#" << id << "*/";
1013 }
1014 
Unparse(Ostream & os,LexStream * lex_stream)1015 void AstFalseLiteral::Unparse(Ostream& os, LexStream* lex_stream)
1016 {
1017     if (debug_unparse)
1018         os << "/*AstFalseLiteral:#" << id << "*/";
1019     os << lex_stream -> NameString(false_literal_token);
1020     if (debug_unparse)
1021         os << "/*:AstFalseLiteral#" << id << "*/";
1022 }
1023 
Unparse(Ostream & os,LexStream * lex_stream)1024 void AstStringLiteral::Unparse(Ostream& os, LexStream* lex_stream)
1025 {
1026     if (debug_unparse)
1027         os << "/*AstStringLiteral:#" << id << "*/";
1028     bool old_expand = os.ExpandWchar();
1029     os.SetExpandWchar(true);
1030     os << lex_stream -> NameString(string_literal_token);
1031     os.SetExpandWchar(old_expand);
1032     if (debug_unparse)
1033         os << "/*:AstStringLiteral#" << id << "*/";
1034 }
1035 
Unparse(Ostream & os,LexStream * lex_stream)1036 void AstCharacterLiteral::Unparse(Ostream& os, LexStream* lex_stream)
1037 {
1038     if (debug_unparse)
1039         os << "/*AstCharacterLiteral:#" << id << "*/";
1040     bool old_expand = os.ExpandWchar();
1041     os.SetExpandWchar(true);
1042     os << lex_stream -> NameString(character_literal_token);
1043     os.SetExpandWchar(old_expand);
1044     if (debug_unparse)
1045         os << "/*:AstCharacterLiteral#" << id << "*/";
1046 }
1047 
Unparse(Ostream & os,LexStream * lex_stream)1048 void AstNullLiteral::Unparse(Ostream& os, LexStream* lex_stream)
1049 {
1050     if (debug_unparse)
1051         os << "/*AstNullLiteral:#" << id << "*/";
1052     os << lex_stream -> NameString(null_token);
1053     if (debug_unparse)
1054         os << "/*:AstNullLiteral#" << id << "*/";
1055 }
1056 
Unparse(Ostream & os,LexStream * lex_stream)1057 void AstClassLiteral::Unparse(Ostream& os, LexStream* lex_stream)
1058 {
1059     if (debug_unparse)
1060         os << "/*AstClassLiteral:#" << id << "*/";
1061     type -> Unparse(os, lex_stream);
1062     os << '.' << lex_stream -> NameString(class_token);
1063     if (debug_unparse)
1064         os << "/*:AstClassLiteral#" << id << "*/";
1065 }
1066 
Unparse(Ostream & os,LexStream * lex_stream)1067 void AstThisExpression::Unparse(Ostream& os, LexStream* lex_stream)
1068 {
1069     if (debug_unparse)
1070         os << "/*AstThisExpression:#" << id << "*/";
1071     if (base_opt)
1072     {
1073         base_opt -> Unparse(os, lex_stream);
1074         os << '.';
1075     }
1076     os << lex_stream -> NameString(this_token);
1077     if (debug_unparse)
1078         os << "/*:AstThisExpression#" << id << "*/";
1079 }
1080 
Unparse(Ostream & os,LexStream * lex_stream)1081 void AstSuperExpression::Unparse(Ostream& os, LexStream* lex_stream)
1082 {
1083     if (debug_unparse)
1084         os << "/*AstSuperExpression:#" << id << "*/";
1085     if (base_opt)
1086     {
1087         base_opt -> Unparse(os, lex_stream);
1088         os << '.';
1089     }
1090     os << lex_stream -> NameString(super_token);
1091     if (debug_unparse)
1092         os << "/*:AstSuperExpression#" << id << "*/";
1093 }
1094 
Unparse(Ostream & os,LexStream * lex_stream)1095 void AstParenthesizedExpression::Unparse(Ostream& os, LexStream* lex_stream)
1096 {
1097     if (debug_unparse)
1098         os << "/*AstParenthesizedExpression:#" << id << "*/";
1099     os << lex_stream -> NameString(left_parenthesis_token);
1100     expression -> Unparse(os, lex_stream);
1101     os << lex_stream -> NameString(right_parenthesis_token);
1102     if (debug_unparse)
1103         os << "/*:AstParenthesizedExpression#" << id << "*/";
1104 }
1105 
Unparse(Ostream & os,LexStream * lex_stream)1106 void AstClassCreationExpression::Unparse(Ostream& os, LexStream* lex_stream)
1107 {
1108     if (debug_unparse)
1109         os << "/*AstClassCreationExpression:#" << id << "*/";
1110     if (base_opt && ! base_opt -> generated)
1111     {
1112         base_opt -> Unparse(os, lex_stream);
1113         os << '.';
1114     }
1115     os << lex_stream -> NameString(new_token) << ' ';
1116     if (type_arguments_opt)
1117         type_arguments_opt -> Unparse(os, lex_stream);
1118     class_type -> Unparse(os, lex_stream);
1119     arguments -> Unparse(os, lex_stream);
1120     if (class_body_opt)
1121         class_body_opt -> Unparse(os, lex_stream);
1122     if (debug_unparse)
1123         os << "/*:AstClassCreationExpression#" << id << "*/";
1124 }
1125 
Unparse(Ostream & os,LexStream * lex_stream)1126 void AstDimExpr::Unparse(Ostream& os, LexStream* lex_stream)
1127 {
1128     if (debug_unparse)
1129         os << "/*AstDimExpr:#" << id << "*/";
1130     os << '[';
1131     expression -> Unparse(os, lex_stream);
1132     os << ']';
1133     if (debug_unparse)
1134         os << "/*:AstDimExpr#" << id << "*/";
1135 }
1136 
Unparse(Ostream & os,LexStream * lex_stream)1137 void AstArrayCreationExpression::Unparse(Ostream& os, LexStream* lex_stream)
1138 {
1139     if (debug_unparse)
1140         os << "/*AstArrayCreationExpression:#" << id << "*/";
1141     os << lex_stream -> NameString(new_token) << ' ';
1142     array_type -> Unparse(os, lex_stream);
1143     for (unsigned i = 0; i < NumDimExprs(); i++)
1144         DimExpr(i) -> Unparse(os, lex_stream);
1145     if (brackets_opt)
1146         brackets_opt -> Unparse(os, lex_stream);
1147     if (array_initializer_opt)
1148         array_initializer_opt -> Unparse(os, lex_stream);
1149     if (debug_unparse)
1150         os << "/*:AstArrayCreationExpression#" << id << "*/";
1151 }
1152 
Unparse(Ostream & os,LexStream * lex_stream)1153 void AstFieldAccess::Unparse(Ostream& os, LexStream* lex_stream)
1154 {
1155     if (debug_unparse)
1156         os << "/*AstFieldAccess:#" << id << "*/";
1157     base -> Unparse(os, lex_stream);
1158     os << '.' << lex_stream -> NameString(identifier_token);
1159     if (debug_unparse)
1160         os << "/*:AstFieldAccess#" << id << "*/";
1161 }
1162 
Unparse(Ostream & os,LexStream * lex_stream)1163 void AstMethodInvocation::Unparse(Ostream& os, LexStream* lex_stream)
1164 {
1165     if (debug_unparse)
1166         os << "/*AstMethodInvocation:#" << id << "*/";
1167     if (base_opt && ! base_opt -> generated)
1168     {
1169         base_opt -> Unparse(os, lex_stream);
1170         os << '.';
1171     }
1172     if (type_arguments_opt)
1173         type_arguments_opt -> Unparse(os, lex_stream);
1174     os << lex_stream -> NameString(identifier_token);
1175     arguments -> Unparse(os, lex_stream);
1176     if (debug_unparse)
1177         os << "/*:AstMethodInvocation#" << id << "*/";
1178 }
1179 
Unparse(Ostream & os,LexStream * lex_stream)1180 void AstArrayAccess::Unparse(Ostream& os, LexStream* lex_stream)
1181 {
1182     if (debug_unparse)
1183         os << "/*AstArrayAccess:#" << id << "*/";
1184     base -> Unparse(os, lex_stream);
1185     os << '[';
1186     expression -> Unparse(os, lex_stream);
1187     os << ']';
1188     if (debug_unparse)
1189         os << "/*:AstArrayAccess#" << id << "*/";
1190 }
1191 
Unparse(Ostream & os,LexStream * lex_stream)1192 void AstPostUnaryExpression::Unparse(Ostream& os, LexStream* lex_stream)
1193 {
1194     if (debug_unparse)
1195         os << "/*AstPostUnaryExpression:#" << id << "*/";
1196     expression -> Unparse(os, lex_stream);
1197     os << lex_stream -> NameString(post_operator_token);
1198     if (debug_unparse)
1199         os << "/*:AstPostUnaryExpression#" << id << "*/";
1200 }
1201 
Unparse(Ostream & os,LexStream * lex_stream)1202 void AstPreUnaryExpression::Unparse(Ostream& os, LexStream* lex_stream)
1203 {
1204     if (debug_unparse)
1205         os << "/*AstPreUnaryExpression:#" << id << "*/";
1206     os << lex_stream -> NameString(pre_operator_token);
1207     expression -> Unparse(os, lex_stream);
1208     if (debug_unparse)
1209         os << "/*:AstPreUnaryExpression#" << id << "*/";
1210 }
1211 
Unparse(Ostream & os,LexStream * lex_stream)1212 void AstCastExpression::Unparse(Ostream& os, LexStream* lex_stream)
1213 {
1214     if (debug_unparse)
1215         os << "/*AstCastExpression:#" << id << "*/";
1216     if (! generated)
1217     {
1218         os << '(';
1219         type -> Unparse(os, lex_stream);
1220         os << ')';
1221     }
1222     expression -> Unparse(os, lex_stream);
1223     if (debug_unparse)
1224         os << "/*:AstCastExpression#" << id << "*/";
1225 }
1226 
Unparse(Ostream & os,LexStream * lex_stream)1227 void AstBinaryExpression::Unparse(Ostream& os, LexStream* lex_stream)
1228 {
1229     if (debug_unparse)
1230         os << "/*AstBinaryExpression:#" << id << "*/";
1231     left_expression -> Unparse(os, lex_stream);
1232     os << ' ' << lex_stream -> NameString(binary_operator_token) << ' ';
1233     right_expression -> Unparse(os, lex_stream);
1234     if (debug_unparse)
1235         os << "/*:AstBinaryExpression#" << id << "*/";
1236 }
1237 
Unparse(Ostream & os,LexStream * lex_stream)1238 void AstInstanceofExpression::Unparse(Ostream& os, LexStream* lex_stream)
1239 {
1240     if (debug_unparse)
1241         os << "/*AstInstanceofExpression:#" << id << "*/";
1242     expression -> Unparse(os, lex_stream);
1243     os << ' ' << lex_stream -> NameString(instanceof_token) << ' ';
1244     type -> Unparse(os, lex_stream);
1245     if (debug_unparse)
1246         os << "/*:AstInstanceofExpression#" << id << "*/";
1247 }
1248 
Unparse(Ostream & os,LexStream * lex_stream)1249 void AstConditionalExpression::Unparse(Ostream& os, LexStream* lex_stream)
1250 {
1251     if (debug_unparse)
1252         os << "/*AstConditionalExpression:#" << id << "*/";
1253     test_expression -> Unparse(os, lex_stream);
1254     os << " ? ";
1255     true_expression -> Unparse(os, lex_stream);
1256     os << " : ";
1257     false_expression -> Unparse(os, lex_stream);
1258     if (debug_unparse)
1259         os << "/*:AstConditionalExpression#" << id << "*/";
1260 }
1261 
Unparse(Ostream & os,LexStream * lex_stream)1262 void AstAssignmentExpression::Unparse(Ostream& os, LexStream* lex_stream)
1263 {
1264     if (debug_unparse)
1265         os << "/*AstAssignmentExpression:#" << id << "*/";
1266     left_hand_side -> Unparse(os, lex_stream);
1267     os << ' ' << lex_stream -> NameString(assignment_operator_token) << ' ';
1268     expression -> Unparse(os, lex_stream);
1269     if (debug_unparse)
1270         os << "/*:AstAssignmentExpression#" << id << "*/";
1271 }
1272 
1273 #ifdef HAVE_JIKES_NAMESPACE
1274 } // Close namespace Jikes block
1275 #endif
1276 
1277 #endif // JIKES_DEBUG
1278