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