/[eiffelstudio]/branches/eth/eve/Src/framework/parser/roundtrip/visitor/ast_roundtrip_iterator.e
ViewVC logotype

Contents of /branches/eth/eve/Src/framework/parser/roundtrip/visitor/ast_roundtrip_iterator.e

Parent Directory Parent Directory | Revision Log Revision Log


Revision 92811 - (show annotations)
Fri Jul 26 04:35:53 2013 UTC (6 years, 2 months ago) by jasonw
File size: 39716 byte(s)
<<Merged from trunk#92810.>>
1 ´╗┐note
2 description: "[
3 Roundtrip visitor to simply iterate an AST tree and do nothing
4 Usage:
5 There are two things that you have to do:
6 1. invoke `set_parsed_class' to set on which class this visitor should work
7 2. invoke `set_match_list' bacause a LEAF_AS_LIST is needed for roundtrip visiting
8 And two things you may need to do:
9 1. invoke `set_will_process_leading_leaves' to let the visitor process leading breaks and optional semicolons
10 2. invoke `set_will_process_trailing_leaves' to let the visitor process trailing breaks
11 or you can call `setup' to do all the things at one time.
12 Note: 1. Always `call process_ast_node' to process an AST node, do not use process_xxx directly.
13 2. `process_leading_leaves' and `process_trailing_leaves' are designed to deal with
14 non-attached terminals (For more information, see `LEAF_AS_LIST') to make sure they can be
15 processed correctly. Before we process every attached terminal, we check if there is any
16 non-attached terminal that has not been processed, if so, we process those terminals first. And after we
17 have process the last attached-terminal, we check any non-attached terminals have been left, if so,
18 we process thoes as well.
19 ]"
20 legal: "See notice at end of class."
21 status: "See notice at end of class."
22 date: "$Date$"
23 revision: "$Revision$"
24
25 class
26 AST_ROUNDTRIP_ITERATOR
27
28 inherit
29 AST_VISITOR
30 redefine
31 is_valid
32 end
33
34 feature -- Status report
35
36 is_valid: BOOLEAN
37 do
38 Result := parsed_class /= Void and then internal_match_list /= Void
39 end
40
41 feature -- AST process
42
43 process_ast_node (a_node: AST_EIFFEL)
44 -- Process `a_node'.
45 -- Note: `a_node' must be included in `parsed_class'.
46 require
47 is_valid: is_valid
48 do
49 if
50 attached match_list.item_by_start_position (a_node.complete_start_position (match_list)) as l_start_leaf and then
51 attached match_list.item_by_end_position (a_node.complete_end_position (match_list)) as l_end_leaf
52 then
53 start_index := l_start_leaf.index
54 end_index := l_end_leaf.index
55 end
56 last_index := start_index - 1
57 safe_process (a_node)
58 process_trailing_leaves
59 end
60
61 feature -- Access
62
63 parsed_class: detachable CLASS_AS
64 -- Roundtrip-parsed class
65 -- All iteration will be conducted within the scope of this class.
66
67 last_index: INTEGER
68 -- Index of last processed item in `match_list'.
69
70 start_index: INTEGER
71 end_index: INTEGER
72 -- Start and end item index in `match_list'.
73
74 match_list: LEAF_AS_LIST
75 -- List of tokens
76 require
77 is_valid: is_valid
78 do
79 check attached internal_match_list as l_list then
80 Result := l_list
81 end
82 end
83
84 will_process_leading_leaves: BOOLEAN
85 -- Will leading ast nodes (BREAK_AS or SYMBOL_AS:optional semicolon) be processed?
86
87 will_process_trailing_leaves: BOOLEAN
88 -- Will trailing ast nodes (BREAK_AS) be processed?
89
90 feature -- Settings
91
92 reset
93 -- Reset current
94 do
95 parsed_class := Void
96 internal_match_list := Void
97 end
98
99 setup (a_class: CLASS_AS; a_list: LEAF_AS_LIST; will_process_leading, will_process_trailing: BOOLEAN)
100 -- Setup environment for roundtrip visit.
101 require
102 a_class_not_void: a_class /= Void
103 a_list_not_void: a_list /= Void
104 do
105 set_parsed_class (a_class)
106 set_match_list (a_list)
107 set_will_process_leading_leaves (will_process_leading)
108 set_will_process_trailing_leaves (will_process_trailing)
109 end
110
111 set_parsed_class (a_class: CLASS_AS)
112 -- Set `parsed_class' with `a_class'.
113 require
114 a_class_not_void: a_class /= Void
115 do
116 parsed_class := a_class
117 last_index := 0
118 start_index := 1
119 ensure
120 parsed_class_set: parsed_class = a_class
121 end
122
123 set_match_list (a_list: LEAF_AS_LIST)
124 -- Set `match_list' with `a_list'.
125 require
126 a_list_not_void: a_list /= Void
127 do
128 internal_match_list := a_list
129 end_index := a_list.count
130 ensure
131 match_list_set: internal_match_list = a_list
132 end
133
134 set_will_process_leading_leaves (b: BOOLEAN)
135 -- Set `will_process_leading_leaves' with `b'.
136 do
137 will_process_leading_leaves := b
138 ensure
139 will_process_leading_leaves_set: will_process_leading_leaves = b
140 end
141
142 set_will_process_trailing_leaves (b: BOOLEAN)
143 -- Set `will_process_trailing_leaves' with `b'.
144 do
145 will_process_trailing_leaves := b
146 ensure
147 will_process_trailing_leaves_set: will_process_trailing_leaves = b
148 end
149
150 feature -- Roundtrip: process leaf
151
152 process_keyword_as (l_as: KEYWORD_AS)
153 -- Process `l_as'.
154 do
155 process_leading_leaves (l_as.index)
156 last_index := l_as.index
157 end
158
159 process_symbol_as (l_as: SYMBOL_AS)
160 -- Process `l_as'.
161 do
162 process_leading_leaves (l_as.index)
163 last_index := l_as.index
164 end
165
166 process_break_as (l_as: BREAK_AS)
167 -- Process `l_as'.
168 do
169 process_leading_leaves (l_as.index)
170 last_index := l_as.index
171 end
172
173 process_leaf_stub_as (l_as: LEAF_STUB_AS)
174 -- Process `l_as'.
175 do
176 process_leading_leaves (l_as.index)
177 last_index := l_as.index
178 end
179
180 process_symbol_stub_as (l_as: SYMBOL_STUB_AS)
181 -- Process `l_as'.
182 do
183 process_leading_leaves (l_as.index)
184 last_index := l_as.index
185 end
186
187 process_keyword_stub_as (l_as: KEYWORD_STUB_AS)
188 -- Process `l_as'.
189 do
190 process_keyword_as (l_as)
191 end
192
193 process_bool_as (l_as: BOOL_AS)
194 do
195 process_leading_leaves (l_as.index)
196 last_index := l_as.index
197 end
198
199 process_char_as (l_as: CHAR_AS)
200 do
201 process_leading_leaves (l_as.index)
202 last_index := l_as.index
203 end
204
205 process_result_as (l_as: RESULT_AS)
206 do
207 process_leading_leaves (l_as.index)
208 last_index := l_as.index
209 end
210
211 process_retry_as (l_as: RETRY_AS)
212 do
213 process_leading_leaves (l_as.index)
214 last_index := l_as.index
215 end
216
217 process_unique_as (l_as: UNIQUE_AS)
218 do
219 process_leading_leaves (l_as.index)
220 last_index := l_as.index
221 end
222
223 process_deferred_as (l_as: DEFERRED_AS)
224 do
225 process_leading_leaves (l_as.index)
226 last_index := l_as.index
227 end
228
229 process_void_as (l_as: VOID_AS)
230 do
231 process_leading_leaves (l_as.index)
232 last_index := l_as.index
233 end
234
235 process_string_as (l_as: STRING_AS)
236 do
237 if l_as.is_once_string then
238 safe_process (l_as.once_string_keyword (match_list))
239 end
240 safe_process (l_as.type)
241 process_leading_leaves (l_as.index)
242 last_index := l_as.index
243 end
244
245 process_verbatim_string_as (l_as: VERBATIM_STRING_AS)
246 do
247 if l_as.is_once_string then
248 safe_process (l_as.once_string_keyword (match_list))
249 end
250 safe_process (l_as.type)
251 process_leading_leaves (l_as.index)
252 last_index := l_as.index
253 end
254
255 process_current_as (l_as: CURRENT_AS)
256 do
257 process_leading_leaves (l_as.index)
258 last_index := l_as.index
259 end
260
261 process_integer_as (l_as: INTEGER_AS)
262 do
263 safe_process (l_as.constant_type)
264 safe_process (l_as.sign_symbol (match_list))
265 process_leading_leaves (l_as.index)
266 last_index := l_as.index
267 end
268
269 process_real_as (l_as: REAL_AS)
270 do
271 safe_process (l_as.constant_type)
272 safe_process (l_as.sign_symbol (match_list))
273 process_leading_leaves (l_as.index)
274 last_index := l_as.index
275 end
276
277 process_id_as (l_as: ID_AS)
278 do
279 process_leading_leaves (l_as.index)
280 last_index := l_as.index
281 end
282
283 feature
284
285 process_none_id_as (l_as: NONE_ID_AS)
286 -- Process `l_as'.
287 do
288 -- Do nothing, because this id is automatically inserted by Eiffel compiler,
289 -- we should not produce it when doing roundtrip.
290 end
291
292 process_typed_char_as (l_as: TYPED_CHAR_AS)
293 -- Process `l_as'.
294 do
295 l_as.type.process (Current)
296 process_leading_leaves (l_as.index)
297 last_index := l_as.index
298 end
299
300 process_agent_routine_creation_as (l_as: AGENT_ROUTINE_CREATION_AS)
301 -- Process `l_as'.
302 do
303 safe_process (l_as.agent_keyword (match_list))
304 if l_as.target /= Void then
305 safe_process (l_as.lparan_symbol (match_list))
306 safe_process (l_as.target)
307 safe_process (l_as.rparan_symbol (match_list))
308 safe_process (l_as.dot_symbol (match_list))
309 end
310 safe_process (l_as.feature_name)
311 safe_process (l_as.internal_operands)
312 end
313
314 process_inline_agent_creation_as (l_as: INLINE_AGENT_CREATION_AS)
315 -- Process `l_as'.
316 do
317 safe_process (l_as.agent_keyword (match_list))
318 safe_process (l_as.body)
319 safe_process (l_as.internal_operands)
320 end
321
322 process_create_creation_as (l_as: CREATE_CREATION_AS)
323 -- Process `l_as'.
324 do
325 safe_process (l_as.create_keyword (match_list))
326 safe_process (l_as.type)
327 safe_process (l_as.target)
328 safe_process (l_as.call)
329 end
330
331 process_bang_creation_as (l_as: BANG_CREATION_AS)
332 -- Process `l_as'.
333 do
334 safe_process (l_as.lbang_symbol)
335 safe_process (l_as.type)
336 safe_process (l_as.rbang_symbol)
337 safe_process (l_as.target)
338 safe_process (l_as.call)
339 end
340
341 process_create_creation_expr_as (l_as: CREATE_CREATION_EXPR_AS)
342 -- Process `l_as'.
343 do
344 safe_process (l_as.create_keyword (match_list))
345 safe_process (l_as.type)
346 safe_process (l_as.call)
347 end
348
349 process_bang_creation_expr_as (l_as: BANG_CREATION_EXPR_AS)
350 -- Process `l_as'.
351 do
352 safe_process (l_as.lbang_symbol)
353 safe_process (l_as.type)
354 safe_process (l_as.rbang_symbol)
355 safe_process (l_as.call)
356 end
357
358 feature
359
360 process_custom_attribute_as (l_as: CUSTOM_ATTRIBUTE_AS)
361 do
362 safe_process (l_as.creation_expr)
363 safe_process (l_as.tuple)
364 safe_process (l_as.end_keyword (match_list))
365 end
366
367 process_static_access_as (l_as: STATIC_ACCESS_AS)
368 do
369 safe_process (l_as.feature_keyword (match_list))
370 safe_process (l_as.class_type)
371 safe_process (l_as.dot_symbol (match_list))
372 safe_process (l_as.feature_name)
373 safe_process (l_as.internal_parameters)
374 end
375
376 process_feature_clause_as (l_as: FEATURE_CLAUSE_AS)
377 do
378 safe_process (l_as.feature_keyword)
379 safe_process (l_as.clients)
380 safe_process (l_as.features)
381 end
382
383 process_tuple_as (l_as: TUPLE_AS)
384 do
385 safe_process (l_as.lbracket_symbol (match_list))
386 safe_process (l_as.expressions)
387 safe_process (l_as.rbracket_symbol (match_list))
388 end
389
390 process_array_as (l_as: ARRAY_AS)
391 do
392 safe_process (l_as.larray_symbol (match_list))
393 safe_process (l_as.expressions)
394 safe_process (l_as.rarray_symbol (match_list))
395 end
396
397 process_body_as (l_as: BODY_AS)
398 do
399 safe_process (l_as.internal_arguments)
400 safe_process (l_as.colon_symbol (match_list))
401 safe_process (l_as.type)
402 safe_process (l_as.assign_keyword (match_list))
403 safe_process (l_as.assigner)
404 safe_process (l_as.is_keyword (match_list))
405
406 if attached {CONSTANT_AS} l_as.content as c_as then
407 c_as.process (Current)
408 safe_process (l_as.indexing_clause)
409 else
410 safe_process (l_as.indexing_clause)
411 safe_process (l_as.content)
412 end
413 end
414
415 process_built_in_as (l_as: BUILT_IN_AS)
416 -- Process `l_as'.
417 do
418 process_external_as (l_as)
419 end
420
421 process_access_feat_as (l_as: ACCESS_FEAT_AS)
422 do
423 safe_process (l_as.feature_name)
424 safe_process (l_as.internal_parameters)
425 end
426
427 process_access_inv_as (l_as: ACCESS_INV_AS)
428 do
429 safe_process (l_as.dot_symbol (match_list))
430 safe_process (l_as.feature_name)
431 safe_process (l_as.internal_parameters)
432 end
433
434 process_access_id_as (l_as: ACCESS_ID_AS)
435 do
436 safe_process (l_as.feature_name)
437 safe_process (l_as.internal_parameters)
438 end
439
440 process_access_assert_as (l_as: ACCESS_ASSERT_AS)
441 do
442 process_access_feat_as (l_as)
443 end
444
445 process_precursor_as (l_as: PRECURSOR_AS)
446 do
447 safe_process (l_as.precursor_keyword)
448 safe_process (l_as.parent_base_class)
449 safe_process (l_as.internal_parameters)
450 end
451
452 process_nested_expr_as (l_as: NESTED_EXPR_AS)
453 do
454 safe_process (l_as.lparan_symbol (match_list))
455 safe_process (l_as.target)
456 safe_process (l_as.rparan_symbol (match_list))
457 safe_process (l_as.dot_symbol (match_list))
458 safe_process (l_as.message)
459 end
460
461 process_nested_as (l_as: NESTED_AS)
462 do
463 safe_process (l_as.target)
464 safe_process (l_as.dot_symbol (match_list))
465 safe_process (l_as.message)
466 end
467
468 process_creation_expr_as (l_as: CREATION_EXPR_AS)
469 do
470 check
471 should_not_reach_here: False
472 end
473 end
474
475 process_type_expr_as (l_as: TYPE_EXPR_AS)
476 do
477 safe_process (l_as.type)
478 end
479
480 process_routine_as (l_as: ROUTINE_AS)
481 do
482
483 safe_process (l_as.obsolete_keyword (match_list))
484 safe_process (l_as.obsolete_message)
485 safe_process (l_as.precondition)
486 safe_process (l_as.internal_locals)
487 safe_process (l_as.routine_body)
488 safe_process (l_as.postcondition)
489 safe_process (l_as.rescue_keyword (match_list))
490 safe_process (l_as.rescue_clause)
491 safe_process (l_as.end_keyword)
492 end
493
494 process_constant_as (l_as: CONSTANT_AS)
495 do
496 safe_process (l_as.value)
497 end
498
499 process_eiffel_list (l_as: EIFFEL_LIST [AST_EIFFEL])
500 local
501 i: INTEGER
502 j: INTEGER
503 n: INTEGER
504 m: INTEGER
505 do
506 from
507 n := l_as.count
508 i := 1
509 check
510 consistent_separator_count: attached l_as.separator_list as l implies l.count = n or else l.count = n - 1
511 end
512 if attached l_as.separator_list as l_sep_list then
513 m := l_sep_list.count
514 if m >= n then
515 -- There is a leading separator, start from index 1.
516 j := 1
517 end
518 else
519 m := 0
520 end
521 until
522 i > n
523 loop
524 if j = 0 then
525 -- There is no leading separator, advance to the next one.
526 j := 1
527 elseif j <= m then
528 -- There is a separator, process it.
529 safe_process (l_as.separator_list_i_th (j, match_list))
530 j := j + 1
531 end
532 -- Process list element.
533 safe_process (l_as [i])
534 i := i + 1
535 end
536 end
537
538 process_indexing_clause_as (l_as: INDEXING_CLAUSE_AS)
539 do
540 safe_process (l_as.indexing_keyword (match_list))
541 process_eiffel_list (l_as)
542 safe_process (l_as.end_keyword (match_list))
543 end
544
545 process_operand_as (l_as: OPERAND_AS)
546 do
547 safe_process (l_as.class_type)
548 safe_process (l_as.question_mark_symbol (match_list))
549 safe_process (l_as.target)
550 safe_process (l_as.expression)
551 end
552
553 process_tagged_as (l_as: TAGGED_AS)
554 do
555 safe_process (l_as.tag)
556 safe_process (l_as.colon_symbol (match_list))
557 safe_process (l_as.expr)
558 end
559
560 process_variant_as (l_as: VARIANT_AS)
561 do
562 safe_process (l_as.variant_keyword (match_list))
563 safe_process (l_as.tag)
564 safe_process (l_as.colon_symbol (match_list))
565 safe_process (l_as.expr)
566 end
567
568 process_un_strip_as (l_as: UN_STRIP_AS)
569 do
570 safe_process (l_as.strip_keyword (match_list))
571 safe_process (l_as.lparan_symbol (match_list))
572 process_identifier_list (l_as.id_list)
573 safe_process (l_as.rparan_symbol (match_list))
574 end
575
576 process_converted_expr_as (l_as: CONVERTED_EXPR_AS)
577 do
578 l_as.expr.process (Current)
579 end
580
581 process_paran_as (l_as: PARAN_AS)
582 do
583 safe_process (l_as.lparan_symbol (match_list))
584 l_as.expr.process (Current)
585 safe_process (l_as.rparan_symbol (match_list))
586 end
587
588 process_expr_call_as (l_as: EXPR_CALL_AS)
589 do
590 l_as.call.process (Current)
591 end
592
593 process_expr_address_as (l_as: EXPR_ADDRESS_AS)
594 do
595 safe_process (l_as.address_symbol (match_list))
596 safe_process (l_as.lparan_symbol (match_list))
597 safe_process (l_as.expr)
598 safe_process (l_as.rparan_symbol (match_list))
599 end
600
601 process_address_result_as (l_as: ADDRESS_RESULT_AS)
602 do
603 safe_process (l_as.address_symbol (match_list))
604 safe_process (l_as.result_keyword)
605 end
606
607 process_address_current_as (l_as: ADDRESS_CURRENT_AS)
608 do
609 safe_process (l_as.address_symbol (match_list))
610 safe_process (l_as.current_keyword)
611 end
612
613 process_address_as (l_as: ADDRESS_AS)
614 do
615 safe_process (l_as.address_symbol (match_list))
616 safe_process (l_as.feature_name)
617 end
618
619 process_routine_creation_as (l_as: ROUTINE_CREATION_AS)
620 do
621 check
622 should_not_reach_here: False
623 end
624 end
625
626 process_unary_as (l_as: UNARY_AS)
627 do
628 safe_process (l_as.operator (match_list))
629 safe_process (l_as.expr)
630 end
631
632 process_un_free_as (l_as: UN_FREE_AS)
633 do
634 safe_process (l_as.op_name)
635 safe_process (l_as.expr)
636 end
637
638 process_un_minus_as (l_as: UN_MINUS_AS)
639 do
640 process_unary_as (l_as)
641 end
642
643 process_un_not_as (l_as: UN_NOT_AS)
644 do
645 process_unary_as (l_as)
646 end
647
648 process_un_old_as (l_as: UN_OLD_AS)
649 do
650 process_unary_as (l_as)
651 end
652
653 process_un_plus_as (l_as: UN_PLUS_AS)
654 do
655 process_unary_as (l_as)
656 end
657
658 process_binary_as (l_as: BINARY_AS)
659 do
660 safe_process (l_as.left)
661 safe_process (l_as.operator (match_list))
662 safe_process (l_as.right)
663 end
664
665 process_bin_and_then_as (l_as: BIN_AND_THEN_AS)
666 do
667 safe_process (l_as.left)
668 safe_process (l_as.and_keyword (match_list))
669 safe_process (l_as.then_keyword (match_list))
670 safe_process (l_as.right)
671 end
672
673 process_bin_free_as (l_as: BIN_FREE_AS)
674 do
675 process_binary_as (l_as)
676 end
677
678 process_bin_implies_as (l_as: BIN_IMPLIES_AS)
679 do
680 process_binary_as (l_as)
681 end
682
683 process_bin_or_as (l_as: BIN_OR_AS)
684 do
685 process_binary_as (l_as)
686 end
687
688 process_bin_or_else_as (l_as: BIN_OR_ELSE_AS)
689 do
690 safe_process (l_as.left)
691 safe_process (l_as.or_keyword (match_list))
692 safe_process (l_as.else_keyword (match_list))
693 safe_process (l_as.right)
694 end
695
696 process_bin_xor_as (l_as: BIN_XOR_AS)
697 do
698 process_binary_as (l_as)
699 end
700
701 process_bin_ge_as (l_as: BIN_GE_AS)
702 do
703 process_binary_as (l_as)
704 end
705
706 process_bin_gt_as (l_as: BIN_GT_AS)
707 do
708 process_binary_as (l_as)
709 end
710
711 process_bin_le_as (l_as: BIN_LE_AS)
712 do
713 process_binary_as (l_as)
714 end
715
716 process_bin_lt_as (l_as: BIN_LT_AS)
717 do
718 process_binary_as (l_as)
719 end
720
721 process_bin_div_as (l_as: BIN_DIV_AS)
722 do
723 process_binary_as (l_as)
724 end
725
726 process_bin_minus_as (l_as: BIN_MINUS_AS)
727 do
728 process_binary_as (l_as)
729 end
730
731 process_bin_mod_as (l_as: BIN_MOD_AS)
732 do
733 process_binary_as (l_as)
734 end
735
736 process_bin_plus_as (l_as: BIN_PLUS_AS)
737 do
738 process_binary_as (l_as)
739 end
740
741 process_bin_power_as (l_as: BIN_POWER_AS)
742 do
743 process_binary_as (l_as)
744 end
745
746 process_bin_slash_as (l_as: BIN_SLASH_AS)
747 do
748 process_binary_as (l_as)
749 end
750
751 process_bin_star_as (l_as: BIN_STAR_AS)
752 do
753 process_binary_as (l_as)
754 end
755
756 process_bin_and_as (l_as: BIN_AND_AS)
757 do
758 process_binary_as (l_as)
759 end
760
761 process_bin_eq_as (l_as: BIN_EQ_AS)
762 do
763 process_binary_as (l_as)
764 end
765
766 process_bin_ne_as (l_as: BIN_NE_AS)
767 do
768 process_binary_as (l_as)
769 end
770
771 process_bin_tilde_as (l_as: BIN_TILDE_AS)
772 do
773 process_binary_as (l_as)
774 end
775
776 process_bin_not_tilde_as (l_as: BIN_NOT_TILDE_AS)
777 do
778 process_binary_as (l_as)
779 end
780
781 process_bracket_as (l_as: BRACKET_AS)
782 do
783 safe_process (l_as.target)
784 safe_process (l_as.lbracket_symbol)
785 safe_process (l_as.operands)
786 safe_process (l_as.rbracket_symbol)
787 end
788
789 process_object_test_as (l_as: OBJECT_TEST_AS)
790 do
791 if l_as.is_attached_keyword then
792 safe_process (l_as.attached_keyword (match_list))
793 safe_process (l_as.type)
794 l_as.expression.process (Current)
795 safe_process (l_as.as_keyword (match_list))
796 safe_process (l_as.name)
797 else
798 safe_process (l_as.lcurly_symbol (match_list))
799 safe_process (l_as.name)
800 safe_process (l_as.type)
801 l_as.expression.process (Current)
802 end
803 end
804
805 process_external_lang_as (l_as: EXTERNAL_LANG_AS)
806 do
807 l_as.language_name.process (Current)
808 end
809
810 process_feature_as (l_as: FEATURE_AS)
811 do
812 safe_process (l_as.feature_names)
813 safe_process (l_as.body)
814 end
815
816 process_infix_prefix_as (l_as: INFIX_PREFIX_AS)
817 do
818 safe_process (l_as.frozen_keyword)
819 safe_process (l_as.infix_prefix_keyword)
820 safe_process (l_as.alias_name)
821 end
822
823 process_feat_name_id_as (l_as: FEAT_NAME_ID_AS)
824 do
825 safe_process (l_as.frozen_keyword)
826 safe_process (l_as.feature_name)
827 end
828
829 process_feature_name_alias_as (l_as: FEATURE_NAME_ALIAS_AS)
830 do
831 safe_process (l_as.frozen_keyword)
832 safe_process (l_as.feature_name)
833 if l_as.alias_name /= Void then
834 safe_process (l_as.alias_keyword (match_list))
835 safe_process (l_as.alias_name)
836 if l_as.has_convert_mark then
837 safe_process (l_as.convert_keyword (match_list))
838 end
839 end
840 end
841
842 process_feature_list_as (l_as: FEATURE_LIST_AS)
843 do
844 safe_process (l_as.features)
845 end
846
847 process_all_as (l_as: ALL_AS)
848 do
849 safe_process (l_as.all_keyword (match_list))
850 end
851
852 process_assign_as (l_as: ASSIGN_AS)
853 do
854 safe_process (l_as.target)
855 safe_process (l_as.assignment_symbol (match_list))
856 safe_process (l_as.source)
857 end
858
859 process_assigner_call_as (l_as: ASSIGNER_CALL_AS)
860 do
861 safe_process (l_as.target)
862 safe_process (l_as.assignment_symbol)
863 safe_process (l_as.source)
864 end
865
866 process_reverse_as (l_as: REVERSE_AS)
867 do
868 safe_process (l_as.target)
869 safe_process (l_as.assignment_symbol (match_list))
870 safe_process (l_as.source)
871 end
872
873 process_check_as (l_as: CHECK_AS)
874 do
875 safe_process (l_as.check_keyword (match_list))
876 safe_process (l_as.full_assertion_list)
877 safe_process (l_as.end_keyword)
878 end
879
880 process_creation_as (l_as: CREATION_AS)
881 do
882 check
883 Should_not_reach_here: False
884 end
885 end
886
887 process_debug_as (l_as: DEBUG_AS)
888 do
889 safe_process (l_as.debug_keyword (match_list))
890 safe_process (l_as.internal_keys)
891 safe_process (l_as.compound)
892 safe_process (l_as.end_keyword)
893 end
894
895 process_guard_as (l_as: GUARD_AS)
896 do
897 safe_process (l_as.check_keyword (match_list))
898 safe_process (l_as.full_assertion_list)
899 safe_process (l_as.then_keyword (match_list))
900 safe_process (l_as.compound)
901 safe_process (l_as.end_keyword)
902 end
903
904 process_if_as (l_as: IF_AS)
905 do
906 safe_process (l_as.if_keyword (match_list))
907 safe_process (l_as.condition)
908 safe_process (l_as.then_keyword (match_list))
909 safe_process (l_as.compound)
910 safe_process (l_as.elsif_list)
911 safe_process (l_as.else_keyword (match_list))
912 safe_process (l_as.else_part)
913 safe_process (l_as.end_keyword)
914 end
915
916 process_inspect_as (l_as: INSPECT_AS)
917 do
918 safe_process (l_as.inspect_keyword (match_list))
919 safe_process (l_as.switch)
920 safe_process (l_as.case_list)
921 safe_process (l_as.else_keyword (match_list))
922 safe_process (l_as.else_part)
923 safe_process (l_as.end_keyword)
924 end
925
926 process_instr_call_as (l_as: INSTR_CALL_AS)
927 do
928 l_as.call.process (Current)
929 end
930
931 process_loop_as (l_as: LOOP_AS)
932 local
933 l_until: detachable KEYWORD_AS
934 l_variant_processing_after: BOOLEAN
935 l_variant_part: detachable VARIANT_AS
936 do
937 safe_process (l_as.iteration)
938 safe_process (l_as.from_keyword (match_list))
939 safe_process (l_as.from_part)
940 safe_process (l_as.invariant_keyword (match_list))
941 safe_process (l_as.full_invariant_list)
942 -- Special code to handle the old or new ordering of the `variant'
943 -- clause in a loop.
944 l_until := l_as.until_keyword (match_list)
945 l_variant_part := l_as.variant_part
946 if l_until = Void then
947 -- Must be across loop
948 l_variant_processing_after := True
949 elseif l_variant_part /= Void then
950 if l_variant_part.start_position > l_until.start_position then
951 l_variant_processing_after := True
952 else
953 l_variant_part.process (Current)
954 end
955 end
956 safe_process (l_until)
957 safe_process (l_as.stop)
958 safe_process (l_as.loop_keyword (match_list))
959 safe_process (l_as.compound)
960 if l_variant_part /= Void and l_variant_processing_after then
961 l_variant_part.process (Current)
962 end
963 safe_process (l_as.end_keyword)
964 end
965
966 process_iteration_as (l_as: ITERATION_AS)
967 do
968 safe_process (l_as.across_keyword (match_list))
969 l_as.expression.process (Current)
970 safe_process (l_as.as_keyword (match_list))
971 l_as.identifier.process (Current)
972 end
973
974 process_loop_expr_as (l_as: LOOP_EXPR_AS)
975 do
976 l_as.iteration.process (Current)
977 safe_process (l_as.invariant_keyword (match_list))
978 safe_process (l_as.full_invariant_list)
979 safe_process (l_as.until_keyword (match_list))
980 safe_process (l_as.exit_condition)
981 safe_process (l_as.qualifier_keyword (match_list))
982 l_as.expression.process (Current)
983 safe_process (l_as.variant_part)
984 safe_process (l_as.end_keyword)
985 end
986
987 process_external_as (l_as: EXTERNAL_AS)
988 do
989 safe_process (l_as.external_keyword (match_list))
990 safe_process (l_as.language_name)
991 safe_process (l_as.alias_keyword (match_list))
992 safe_process (l_as.alias_name_literal)
993 end
994
995 process_attribute_as (l_as: ATTRIBUTE_AS)
996 do
997 safe_process (l_as.attribute_keyword (match_list))
998 safe_process (l_as.compound)
999 end
1000
1001 process_do_as (l_as: DO_AS)
1002 do
1003 safe_process (l_as.do_keyword (match_list))
1004 safe_process (l_as.compound)
1005 end
1006
1007 process_once_as (l_as: ONCE_AS)
1008 do
1009 safe_process (l_as.once_keyword (match_list))
1010 safe_process (l_as.internal_keys)
1011 safe_process (l_as.compound)
1012 end
1013
1014 process_type_dec_as (l_as: TYPE_DEC_AS)
1015 do
1016 process_identifier_list (l_as.id_list)
1017 safe_process (l_as.colon_symbol (match_list))
1018 safe_process (l_as.type)
1019 end
1020
1021 process_class_as (l_as: CLASS_AS)
1022 do
1023 safe_process (l_as.internal_top_indexes)
1024 safe_process (l_as.frozen_keyword (match_list))
1025 safe_process (l_as.deferred_keyword (match_list))
1026 safe_process (l_as.expanded_keyword (match_list))
1027 safe_process (l_as.external_keyword (match_list))
1028 safe_process (l_as.class_keyword (match_list))
1029 safe_process (l_as.class_name)
1030 safe_process (l_as.internal_generics)
1031 safe_process (l_as.alias_keyword (match_list))
1032 safe_process (l_as.external_class_name)
1033 safe_process (l_as.obsolete_keyword (match_list))
1034 safe_process (l_as.obsolete_message)
1035 safe_process (l_as.internal_conforming_parents)
1036 safe_process (l_as.internal_non_conforming_parents)
1037 safe_process (l_as.creators)
1038 safe_process (l_as.convertors)
1039 safe_process (l_as.features)
1040 safe_process (l_as.internal_invariant)
1041 safe_process (l_as.internal_bottom_indexes)
1042 safe_process (l_as.end_keyword)
1043 end
1044
1045 process_parent_as (l_as: PARENT_AS)
1046 do
1047 safe_process (l_as.type)
1048 safe_process (l_as.internal_renaming)
1049 safe_process (l_as.internal_exports)
1050 safe_process (l_as.internal_undefining)
1051 safe_process (l_as.internal_redefining)
1052 safe_process (l_as.internal_selecting)
1053 safe_process (l_as.end_keyword (match_list))
1054 end
1055
1056 process_like_id_as (l_as: LIKE_ID_AS)
1057 do
1058 safe_process (l_as.lcurly_symbol (match_list))
1059 safe_process (l_as.attachment_mark (match_list))
1060 safe_process (l_as.like_keyword (match_list))
1061 safe_process (l_as.anchor)
1062 safe_process (l_as.rcurly_symbol (match_list))
1063 end
1064
1065 process_like_cur_as (l_as: LIKE_CUR_AS)
1066 do
1067 safe_process (l_as.lcurly_symbol (match_list))
1068 safe_process (l_as.attachment_mark (match_list))
1069 safe_process (l_as.like_keyword (match_list))
1070 safe_process (l_as.current_keyword)
1071 safe_process (l_as.rcurly_symbol (match_list))
1072 end
1073
1074 process_qualified_anchored_type_as (l_as: QUALIFIED_ANCHORED_TYPE_AS)
1075 do
1076 safe_process (l_as.lcurly_symbol (match_list))
1077 safe_process (l_as.attachment_mark (match_list))
1078 safe_process (l_as.like_keyword (match_list))
1079 safe_process (l_as.qualifier)
1080 safe_process (l_as.chain)
1081 safe_process (l_as.rcurly_symbol (match_list))
1082 end
1083
1084 process_feature_id_as (l_as: FEATURE_ID_AS)
1085 -- <Precursor>
1086 do
1087 safe_process (l_as.name)
1088 end
1089
1090 process_formal_as (l_as: FORMAL_AS)
1091 do
1092 safe_process (l_as.lcurly_symbol (match_list))
1093 safe_process (l_as.attachment_mark (match_list))
1094 safe_process (l_as.reference_or_expanded_keyword (match_list))
1095 safe_process (l_as.name)
1096 safe_process (l_as.rcurly_symbol (match_list))
1097 end
1098
1099 process_formal_dec_as (l_as: FORMAL_DEC_AS)
1100 do
1101 safe_process (l_as.formal)
1102 safe_process (l_as.constrain_symbol (match_list))
1103 safe_process (l_as.constraints)
1104 safe_process (l_as.create_keyword (match_list))
1105 safe_process (l_as.creation_feature_list)
1106 safe_process (l_as.end_keyword (match_list))
1107 end
1108
1109 process_class_type_as (l_as: CLASS_TYPE_AS)
1110 do
1111 safe_process (l_as.lcurly_symbol (match_list))
1112 safe_process (l_as.attachment_mark (match_list))
1113 safe_process (l_as.expanded_keyword (match_list))
1114 safe_process (l_as.separate_keyword (match_list))
1115 safe_process (l_as.class_name)
1116 safe_process (l_as.rcurly_symbol (match_list))
1117 end
1118
1119 process_generic_class_type_as (l_as: GENERIC_CLASS_TYPE_AS)
1120 do
1121 safe_process (l_as.lcurly_symbol (match_list))
1122 safe_process (l_as.attachment_mark (match_list))
1123 safe_process (l_as.expanded_keyword (match_list))
1124 safe_process (l_as.separate_keyword (match_list))
1125 safe_process (l_as.class_name)
1126 safe_process (l_as.internal_generics)
1127 safe_process (l_as.rcurly_symbol (match_list))
1128 end
1129
1130 process_named_tuple_type_as (l_as: NAMED_TUPLE_TYPE_AS)
1131 do
1132 safe_process (l_as.lcurly_symbol (match_list))
1133 safe_process (l_as.attachment_mark (match_list))
1134 safe_process (l_as.separate_keyword (match_list))
1135 safe_process (l_as.class_name)
1136 safe_process (l_as.parameters)
1137 safe_process (l_as.rcurly_symbol (match_list))
1138 end
1139
1140 process_constraining_type_as (l_as: CONSTRAINING_TYPE_AS)
1141 do
1142 l_as.type.process (Current)
1143 safe_process (l_as.renaming)
1144 safe_process (l_as.end_keyword (match_list))
1145 end
1146
1147 process_none_type_as (l_as: NONE_TYPE_AS)
1148 do
1149 safe_process (l_as.lcurly_symbol (match_list))
1150 safe_process (l_as.class_name_literal)
1151 safe_process (l_as.rcurly_symbol (match_list))
1152 end
1153
1154 process_rename_as (l_as: RENAME_AS)
1155 do
1156 safe_process (l_as.old_name)
1157 safe_process (l_as.as_keyword (match_list))
1158 safe_process (l_as.new_name)
1159 end
1160
1161 process_invariant_as (l_as: INVARIANT_AS)
1162 do
1163 safe_process (l_as.invariant_keyword (match_list))
1164 safe_process (l_as.full_assertion_list)
1165 end
1166
1167 process_interval_as (l_as: INTERVAL_AS)
1168 do
1169 safe_process (l_as.lower)
1170 safe_process (l_as.dotdot_symbol)
1171 safe_process (l_as.upper)
1172 end
1173
1174 process_index_as (l_as: INDEX_AS)
1175 do
1176 safe_process (l_as.tag)
1177 safe_process (l_as.colon_symbol (match_list))
1178 safe_process (l_as.index_list)
1179 end
1180
1181 process_export_item_as (l_as: EXPORT_ITEM_AS)
1182 do
1183 safe_process (l_as.clients)
1184 safe_process (l_as.features)
1185 end
1186
1187 process_elseif_as (l_as: ELSIF_AS)
1188 do
1189 safe_process (l_as.elseif_keyword (match_list))
1190 safe_process (l_as.expr)
1191 safe_process (l_as.then_keyword (match_list))
1192 safe_process (l_as.compound)
1193 end
1194
1195 process_create_as (l_as: CREATE_AS)
1196 do
1197 safe_process (l_as.create_creation_keyword (match_list))
1198 safe_process (l_as.clients)
1199 safe_process (l_as.feature_list)
1200 end
1201
1202 process_client_as (l_as: CLIENT_AS)
1203 do
1204 safe_process (l_as.clients)
1205 end
1206
1207 process_case_as (l_as: CASE_AS)
1208 do
1209 safe_process (l_as.when_keyword (match_list))
1210 safe_process (l_as.interval)
1211 safe_process (l_as.then_keyword (match_list))
1212 safe_process (l_as.compound)
1213 end
1214
1215 process_ensure_as (l_as: ENSURE_AS)
1216 do
1217 safe_process (l_as.ensure_keyword (match_list))
1218 safe_process (l_as.full_assertion_list)
1219 end
1220
1221 process_ensure_then_as (l_as: ENSURE_THEN_AS)
1222 do
1223 safe_process (l_as.ensure_keyword (match_list))
1224 safe_process (l_as.then_keyword (match_list))
1225 safe_process (l_as.full_assertion_list)
1226 end
1227
1228 process_require_as (l_as: REQUIRE_AS)
1229 do
1230 safe_process (l_as.require_keyword (match_list))
1231 safe_process (l_as.full_assertion_list)
1232 end
1233
1234 process_require_else_as (l_as: REQUIRE_ELSE_AS)
1235 do
1236 safe_process (l_as.require_keyword (match_list))
1237 safe_process (l_as.else_keyword (match_list))
1238 safe_process (l_as.full_assertion_list)
1239 end
1240
1241 process_convert_feat_as (l_as: CONVERT_FEAT_AS)
1242 do
1243 safe_process (l_as.feature_name)
1244 safe_process (l_as.colon_symbol (match_list))
1245 safe_process (l_as.lparan_symbol (match_list))
1246 safe_process (l_as.lcurly_symbol (match_list))
1247 safe_process (l_as.conversion_types)
1248 safe_process (l_as.rcurly_symbol (match_list))
1249 safe_process (l_as.rparan_symbol (match_list))
1250 end
1251
1252 process_type_list_as (l_as: TYPE_LIST_AS)
1253 do
1254 safe_process (l_as.opening_bracket_as (match_list))
1255 process_eiffel_list (l_as)
1256 safe_process (l_as.closing_bracket_as (match_list))
1257 end
1258
1259 process_type_dec_list_as (l_as: TYPE_DEC_LIST_AS)
1260 do
1261 safe_process (l_as.opening_bracket_as (match_list))
1262 process_eiffel_list (l_as)
1263 safe_process (l_as.closing_bracket_as (match_list))
1264 end
1265
1266 process_convert_feat_list_as (l_as: CONVERT_FEAT_LIST_AS)
1267 -- Process `l_as'.
1268 do
1269 safe_process (l_as.convert_keyword (match_list))
1270 process_eiffel_list (l_as)
1271 end
1272
1273 process_class_list_as (l_as: CLASS_LIST_AS)
1274 -- Process `l_as'.
1275 do
1276 safe_process (l_as.lcurly_symbol (match_list))
1277 process_eiffel_list (l_as)
1278 safe_process (l_as.rcurly_symbol (match_list))
1279 end
1280
1281 process_parent_list_as (l_as: PARENT_LIST_AS)
1282 -- Process `l_as'.
1283 do
1284 safe_process (l_as.inherit_keyword (match_list))
1285 safe_process (l_as.lcurly_symbol (match_list))
1286 safe_process (l_as.none_id_as (match_list))
1287 safe_process (l_as.rcurly_symbol (match_list))
1288 process_eiffel_list (l_as)
1289 end
1290
1291 process_local_dec_list_as (l_as: LOCAL_DEC_LIST_AS)
1292 -- Process `l_as'.
1293 do
1294 safe_process (l_as.local_keyword (match_list))
1295 safe_process(l_as.locals)
1296 end
1297
1298 process_formal_argu_dec_list_as (l_as: FORMAL_ARGU_DEC_LIST_AS)
1299 -- Process `l_as'.
1300 do
1301 safe_process (l_as.lparan_symbol (match_list))
1302 safe_process (l_as.arguments)
1303 safe_process (l_as.rparan_symbol (match_list))
1304 end
1305
1306 process_key_list_as (l_as: KEY_LIST_AS)
1307 -- Process `l_as'.
1308 do
1309 safe_process (l_as.lparan_symbol (match_list))
1310 safe_process (l_as.keys)
1311 safe_process (l_as.rparan_symbol (match_list))
1312 end
1313
1314 process_delayed_actual_list_as (l_as: DELAYED_ACTUAL_LIST_AS)
1315 -- Process `l_as'.
1316 do
1317 safe_process (l_as.lparan_symbol (match_list))
1318 safe_process (l_as.operands)
1319 safe_process (l_as.rparan_symbol (match_list))
1320 end
1321
1322 process_parameter_list_as (l_as: PARAMETER_LIST_AS)
1323 -- Process `l_as'.
1324 do
1325 safe_process (l_as.lparan_symbol (match_list))
1326 safe_process (l_as.parameters)
1327 safe_process (l_as.rparan_symbol (match_list))
1328 end
1329
1330 process_rename_clause_as (l_as: RENAME_CLAUSE_AS)
1331 -- Process `l_as'.
1332 do
1333 safe_process (l_as.rename_keyword (match_list))
1334 safe_process (l_as.content)
1335 end
1336
1337 process_export_clause_as (l_as: EXPORT_CLAUSE_AS)
1338 -- Process `l_as'.
1339 do
1340 safe_process (l_as.export_keyword (match_list))
1341 safe_process (l_as.content)
1342 end
1343
1344 process_undefine_clause_as (l_as: UNDEFINE_CLAUSE_AS)
1345 -- Process `l_as'.
1346 do
1347 safe_process (l_as.undefine_keyword (match_list))
1348 safe_process (l_as.content)
1349 end
1350
1351 process_redefine_clause_as (l_as: REDEFINE_CLAUSE_AS)
1352 -- Process `l_as'.
1353 do
1354 safe_process (l_as.redefine_keyword (match_list))
1355 safe_process (l_as.content)
1356 end
1357
1358 process_select_clause_as (l_as: SELECT_CLAUSE_AS)
1359 -- Process `l_as'.
1360 do
1361 safe_process (l_as.select_keyword (match_list))
1362 safe_process (l_as.content)
1363 end
1364
1365 process_formal_generic_list_as (l_as: FORMAL_GENERIC_LIST_AS)
1366 -- Process `l_as'.
1367 do
1368 safe_process (l_as.lsqure_symbol (match_list))
1369 process_eiffel_list (l_as)
1370 safe_process (l_as.rsqure_symbol (match_list))
1371 end
1372
1373 feature -- Quantification
1374
1375 process_there_exists_as (a_as: THERE_EXISTS_AS)
1376 -- Process `a_as'.
1377 do
1378 -- Standard Eiffel does not support universal quantification,
1379 -- so roundtrip parser should not reach this point. 15.11.2010 Jasonw
1380 check should_not_be_here: False end
1381 end
1382
1383 process_for_all_as (a_as: FOR_ALL_AS)
1384 -- Process `a_as'.
1385 do
1386 -- Standard Eiffel does not support universal quantification,
1387 -- so roundtrip parser should not reach this point. 15.11.2010 Jasonw
1388 check should_not_be_here: False end
1389 end
1390
1391 feature
1392
1393 process_all_break_as
1394 -- Process all BREAK AST nodes in `match_list'.
1395 require
1396 match_list_not_void: match_list /= Void
1397 leading_leaves_not_processed: not will_process_leading_leaves
1398 local
1399 l_start_index, l_end_index, l_last_index: INTEGER
1400 l_index: INTEGER
1401 do
1402 l_start_index := start_index
1403 l_end_index := end_index
1404 l_last_index := last_index
1405 from
1406 l_index := 1
1407 start_index := 1
1408 last_index := 0
1409 end_index := match_list.count
1410 until
1411 l_index > end_index
1412 loop
1413 if attached {BREAK_AS} match_list.i_th (l_index) as l_break then
1414 l_break.process (Current)
1415 end
1416 l_index := l_index + 1
1417 end
1418 start_index := l_start_index
1419 end_index := l_end_index
1420 last_index := l_last_index
1421 end
1422
1423 feature{NONE} -- Implementation
1424
1425 process_leading_leaves (ind: INTEGER)
1426 -- Process all not-processed leading leaves in `match_list' before index `ind'.
1427 require
1428 valid_index: ind >= start_index and then ind <= end_index
1429 local
1430 i: INTEGER
1431 do
1432 if will_process_leading_leaves then
1433 if ind > last_index + 1 then
1434 from
1435 i := last_index + 1
1436 until
1437 i = ind
1438 loop
1439 match_list.i_th (i).process (Current)
1440 i := i + 1
1441 end
1442 end
1443 end
1444 end
1445
1446 process_trailing_leaves
1447 -- Process all trailing leaves in `match_list' after `last_index'.
1448 local
1449 l_count: INTEGER
1450 do
1451 if will_process_trailing_leaves then
1452 l_count := end_index
1453 if last_index < l_count then
1454 from
1455 last_index := last_index + 1
1456 until
1457 last_index > l_count
1458 loop
1459 match_list.i_th (last_index).process (Current)
1460 last_index := last_index + 1
1461 end
1462 end
1463 end
1464 end
1465
1466 process_identifier_list (l_as: IDENTIFIER_LIST)
1467 -- Process `l_as'
1468 local
1469 i, l_count: INTEGER
1470 l_index: INTEGER
1471 l_id_as: ID_AS
1472 l_leaf: LEAF_AS
1473 do
1474 if l_as /= Void then
1475 if attached l_as.id_list as l_ids and then l_ids.count > 0 then
1476 from
1477 l_ids.start
1478 i := 1
1479 -- Temporary/reused objects to print identifiers.
1480 create l_id_as.initialize_from_id (1)
1481 if attached l_as.separator_list as l_sep_list then
1482 l_count := l_sep_list.count
1483 end
1484 until
1485 l_ids.after
1486 loop
1487 l_index := l_ids.item
1488 if match_list.valid_index (l_index) then
1489 l_leaf := match_list.i_th (l_index)
1490 -- Note that we do not set the `name_id' for `l_id_as' since it will require
1491 -- updating the NAMES_HEAP and we do not want to do that. It is assumed in roundtrip
1492 -- mode that the text is never obtained from the node itself but from the `text' queries.
1493 l_id_as.set_position (l_leaf.line, l_leaf.column, l_leaf.position, l_leaf.location_count)
1494 l_id_as.set_index (l_index)
1495 safe_process (l_id_as)
1496 end
1497 if i <= l_count then
1498 safe_process (l_as.separator_list_i_th (i, match_list))
1499 i := i + 1
1500 end
1501 l_ids.forth
1502 end
1503 end
1504 end
1505 end
1506
1507 internal_match_list: detachable like match_list
1508 -- Storage for `match_list'.
1509
1510 invariant
1511
1512 note
1513 copyright: "Copyright (c) 1984-2013, Eiffel Software"
1514 license: "GPL version 2 (see http://www.eiffel.com/licensing/gpl.txt)"
1515 licensing_options: "http://www.eiffel.com/licensing"
1516 copying: "[
1517 This file is part of Eiffel Software's Eiffel Development Environment.
1518
1519 Eiffel Software's Eiffel Development Environment is free
1520 software; you can redistribute it and/or modify it under
1521 the terms of the GNU General Public License as published
1522 by the Free Software Foundation, version 2 of the License
1523 (available at the URL listed under "license" above).
1524
1525 Eiffel Software's Eiffel Development Environment is
1526 distributed in the hope that it will be useful, but
1527 WITHOUT ANY WARRANTY; without even the implied warranty
1528 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
1529 See the GNU General Public License for more details.
1530
1531 You should have received a copy of the GNU General Public
1532 License along with Eiffel Software's Eiffel Development
1533 Environment; if not, write to the Free Software Foundation,
1534 Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1535 ]"
1536 source: "[
1537 Eiffel Software
1538 5949 Hollister Ave., Goleta, CA 93117 USA
1539 Telephone 805-685-1006, Fax 805-685-6869
1540 Website http://www.eiffel.com
1541 Customer support http://support.eiffel.com
1542 ]"
1543
1544 end

Properties

Name Value
svn:eol-style native
svn:keywords Author Date ID Revision

  ViewVC Help
Powered by ViewVC 1.1.23