Subversion Repositories tendra.SVN

Rev

Rev 6 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
6 7u83 1
<?xml version="1.0" standalone="no"?>
2
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
3
  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
4
 
5
<!--
6
  $Id$
7
-->
8
 
9
<book>
10
  <bookinfo>
11
    <title>TDF Diagnostic Specification, Issue 3.0</title>
12
 
13
    <corpauthor>The TenDRA Project</corpauthor>
14
 
15
    <author>
16
      <firstname>Jeroen</firstname>
17
      <surname>Ruigrok van der Werven</surname>
18
    </author>
19
    <authorinitials>JRvdW</authorinitials>
20
    <pubdate>2004</pubdate>
21
 
22
    <copyright>
23
      <year>2004</year>
24
      <year>2005</year>
25
 
26
      <holder>The TenDRA Project</holder>
27
    </copyright>
28
 
29
    <copyright>
30
      <year>1998</year>
31
 
32
      <holder>DERA</holder>
33
    </copyright>
34
  </bookinfo>
35
 
36
  <chapter id="introduction">
37
    <title>Introduction</title>
38
 
39
    <para>The <acronym>TDF</acronym> diagnostic information is intended to
40
      convey all that information, used by current source level debuggers,
41
      which would conventionally be part of an object file.  Any particular
42
      installer will only use those parts of this information which its native
43
      object format can represent.</para>
44
 
45
    <para>The version of the diagnostics described here is the first version.
46
      It has only been tested with TDF produced from C programs.  There are
47
      known to be certain deficiencies relative to other languages (in
48
      particular to FORTRAN).  A later version will correct these
49
      deficiencies.  The changes already envisaged are detailed in
50
      <xref linkend="proposed-changes"/>, and would have minimal (if any)
51
      impact on C producers.</para>
52
 
53
    <para>The diagnostic system introduces one new type of TDF linkable
54
      entities, and currently adds two new units to the bitstream
55
      representation of TDF.</para>
56
 
57
    <para>Much of the actual annotation of procedure bodies is currently done
58
      by reserved <code>TOKEN</code>s, which installers recognize specially.
59
      These <code>TOKEN</code>s are described in
60
      <xref linkend="reserved-diagnostic-tokens"/>.</para>
61
 
62
    <para>There is a resemblance between the TDF diagnostic information and
63
      Unix International's <acronym>DWARF</acronym> format.
64
      <acronym>DWARF</acronym> has similar aims to the TDF diagnostics, and
65
      ensuring that complete <acronym>DWARF</acronym> information could be
66
      generated provided a useful check during the development of the TDF
67
      diagnostics.  However the TDF diagnostics are intended to be
68
      architecture (and format) neutral.  No inference should be made about
69
      any link (present or future) between <acronym>DWARF</acronym> and TDF
70
      diagnostics.</para>
71
  </chapter>
72
 
73
  <chapter id="diagnostic-sorts">
74
    <title>Diagnostic SORTs</title>
75
 
76
    <para>As a summary of this section:</para>
77
 
78
    <itemizedlist>
79
      <listitem>
80
        <para><code>DIAG_TYPE</code>s describe programming language types
81
          (e.g. arrays, structs...). <code>DIAG_TQ</code>s are qualifiers
82
          of <code>DIAG_TYPE</code>s used for attributes like volatile
83
          and const.</para>
84
      </listitem>
85
 
86
      <listitem>
87
        <para><code>FILENAME</code>s and <code>SOURCEMARK</code>s describe
88
        source files and locations within them.</para>
89
      </listitem>
90
 
91
      <listitem>
92
        <para><code>DIAG_TAG</code>s associate integers with
93
          <code>DIAG_TYPE</code>s. They are used in a similar manner to
94
          normal TDF <code>TAG</code>s, and are held in a (TDF) linkable
95
          unit called a <code>DIAG_TYPE_UNIT</code>.</para>
96
      </listitem>
97
 
98
      <listitem>
99
        <para><code>DIAG_UNIT</code>s hold a collection of
100
        <code>DIAG_DESCRIPTOR</code>s, used for information outside
101
        procedure bodies.</para>
102
      </listitem>
103
    </itemizedlist>
104
 
105
    <sect1 id="diag_descriptor">
106
      <title>DIAG_DESCRIPTOR</title>
107
 
108
      <informaltable frame="none">
109
        <textobject>
110
          <phrase>DIAG_DESCRIPTOR encoding</phrase>
111
        </textobject>
112
 
113
        <tgroup cols="2">
114
          <tbody>
115
            <row>
116
              <entry>Number of encoding bits:</entry>
117
              <entry>2</entry>
118
            </row>
119
 
120
            <row>
121
              <entry>Is coding extendable:</entry>
122
              <entry>yes</entry>
123
            </row>
124
          </tbody>
125
        </tgroup>
126
      </informaltable>
127
 
128
      <para><code>DIAG_DESCRIPTOR</code>s are used to associate names in the
129
        source program with diagnostic items.</para>
130
 
131
      <sect2 id="diag_desc_id">
132
        <title>diag_desc_id</title>
133
 
134
        <informaltable frame="none">
135
          <textobject>
136
            <phrase>diag_desc_id encoding</phrase>
137
          </textobject>
138
 
139
          <tgroup cols="2">
140
            <tbody>
141
              <row>
142
                <entry>Encoding number:</entry>
143
                <entry>1</entry>
144
              </row>
145
            </tbody>
146
          </tgroup>
147
        </informaltable>
148
 
149
        <programlisting>
150
src_name:        TDFSTRING(k, n)
151
whence:          SOURCEMARK
152
found_at:        EXP POINTER(al)
153
type:            DIAG_TYPE
154
                       -&gt; DIAG_DESCRIPTOR
155
        </programlisting>
156
 
157
        <para>Generates a descriptor for an identifier (of
158
          <code>DIAG_TYPE</code> <varname>type</varname>), whose source name
159
          was <varname>src_name</varname> from source location
160
          <varname>whence</varname>. The <code>EXP</code>
161
          <varname>found_at</varname> describes how to access the value.  Note
162
          that the <code>EXP</code> need not be unique (e.g. FORTRAN
163
          EQUIVALENCE might be implemented this way).</para>
164
      </sect2>
165
 
166
      <sect2 id="diag_desc_struct">
167
        <title>diag_desc_struct</title>
168
 
169
        <informaltable frame="none">
170
          <textobject>
171
            <phrase>diag_desc_struct encoding</phrase>
172
          </textobject>
173
 
174
          <tgroup cols="2">
175
            <tbody>
176
              <row>
177
                <entry>Encoding number:</entry>
178
                <entry>2</entry>
179
              </row>
180
            </tbody>
181
          </tgroup>
182
        </informaltable>
183
 
184
        <programlisting>
185
src_name:        TDFSTRING(k, n)
186
whence:          SOURCEMARK
187
new_type:        DIAG_TYPE
188
                       -&gt; DIAG_DESCRIPTOR
189
        </programlisting>
190
 
191
        <para>Generates a descriptor whose source name was
192
          <varname>src_name</varname>.  <varname>new_type</varname> must be
193
          either a <code>DIAG_STRUCT</code>, <code>DIAG_UNION</code> or
194
          <code>DIAG_ENUM</code>.</para>
195
 
196
        <para><note>This construct is obsolete.</note></para>
197
      </sect2>
198
 
199
      <sect2 id="diag_desc_typedef">
200
        <title>diag_desc_typedef</title>
201
 
202
        <informaltable frame="none">
203
          <textobject>
204
            <phrase>diag_desc_typedef encoding</phrase>
205
          </textobject>
206
          <tgroup cols="2">
207
            <tbody>
208
              <row>
209
                <entry>Encoding number:</entry>
210
                <entry>3</entry>
211
              </row>
212
            </tbody>
213
          </tgroup>
214
        </informaltable>
215
 
216
        <programlisting>
217
src_name:        TDFSTRING(k, n)
218
whence:          SOURCEMARK
219
new_type:        DIAG_TYPE
220
                       -&gt; DIAG_DESCRIPTOR
221
        </programlisting>
222
 
223
        <para>Generates a descriptor for a type <varname>new_type</varname>
224
          whose source name was <varname>src_name</varname>. Note that
225
          <varname>diag_desc_typedef</varname> is used for associating a name
226
          with a type, rather than for any name given in the initial
227
          description of the type (e.g. in C this is used for typedef, not for
228
          struct/union/enum tags).</para>
229
      </sect2>
230
    </sect1>
231
 
232
    <sect1 id="diag_unit">
233
      <title>DIAG_UNIT</title>
234
 
235
      <informaltable frame="none">
236
        <textobject>
237
          <phrase>DIAG_UNIT encoding</phrase>
238
        </textobject>
239
 
240
        <tgroup cols="2">
241
          <tbody>
242
            <row>
243
              <entry>Number of encoding bits:</entry>
244
              <entry>0</entry>
245
            </row>
246
 
247
            <row>
248
              <entry>Is coding extendable:</entry>
249
              <entry>no</entry>
250
            </row>
251
 
252
            <row>
253
              <entry>Unit identification:</entry>
254
              <entry><varname>diagdef</varname></entry>
255
            </row>
256
          </tbody>
257
        </tgroup>
258
      </informaltable>
259
 
260
      <para>A <code>DIAG_UNIT</code> is a TDF unit containing
261
        <code>DIAG_DESCRIPTOR</code>s. A <code>DIAG_UNIT</code> is used to
262
        contain descriptions of items outside procedure bodies (e.g.  global
263
        variables, global type definitions).</para>
264
 
265
      <sect2 id="build_diag_unit">
266
        <title>build_diag_unit</title>
267
 
268
        <informaltable frame="none">
269
          <textobject>
270
            <phrase>build_diag_unit encoding</phrase>
271
          </textobject>
272
 
273
          <tgroup cols="2">
274
            <tbody>
275
              <row>
276
                <entry>Encoding number:</entry>
277
                <entry>0</entry>
278
              </row>
279
            </tbody>
280
          </tgroup>
281
        </informaltable>
282
 
283
        <programlisting>
284
no_labels:       TDFINT
285
descriptors:     SLIST(DIAG_DESCRIPTOR)
286
           -&gt; DIAG_UNIT
287
        </programlisting>
288
 
289
        <para>Create a <code>DIAG_UNIT</code> containing
290
          <code>DIAG_DESCRIPTOR</code>s. <varname>no_labels</varname> is the
291
          number of local labels used in <varname>descriptors</varname> (for
292
          conditionals).</para>
293
      </sect2>
294
    </sect1>
295
 
296
    <sect1 id="diag_tag">
297
      <title>DIAG_TAG</title>
298
 
299
      <informaltable frame="none">
300
        <textobject>
301
          <phrase>DIAG_TAG encoding</phrase>
302
        </textobject>
303
 
304
        <tgroup cols="2">
305
          <tbody>
306
            <row>
307
              <entry>Number of encoding bits:</entry>
308
              <entry>1</entry>
309
            </row>
310
 
311
            <row>
312
              <entry>Is coding extendable:</entry>
313
              <entry>yes</entry>
314
            </row>
315
 
316
            <row>
317
              <entry>Linkable entity identification:</entry>
318
              <entry><varname>diagtag</varname></entry>
319
            </row>
320
          </tbody>
321
        </tgroup>
322
      </informaltable>
323
 
324
      <para><code>DIAG_TAG</code>s are used inter alia to break cyclic
325
        diagnostic types.  They are (TDF) linkable entities.  A
326
        <code>DIAG_TAG</code> is made from a number, and used in
327
        <varname>use_diag_tag</varname> to obtain the <code>DIAG_TYPE</code>
328
        associated with that number by
329
        <varname>make_diag_tagdef</varname>.</para>
330
 
331
      <sect2 id="make_diag_tag">
332
        <title>make_diag_tag</title>
333
 
334
        <informaltable frame="none">
335
          <textobject>
336
            <phrase>make_diag_tag encoding</phrase>
337
          </textobject>
338
 
339
          <tgroup cols="2">
340
            <tbody>
341
              <row>
342
                <entry>Encoding number:</entry>
343
                <entry>1</entry>
344
              </row>
345
            </tbody>
346
          </tgroup>
347
        </informaltable>
348
 
349
        <programlisting>
350
num:             TDFINT
351
                       -&gt; DIAG_TAG
352
        </programlisting>
353
 
354
        <para>Create a <code>DIAG_TAG</code> from
355
          <varname>num</varname>.</para>
356
      </sect2>
357
    </sect1>
358
 
359
    <sect1 id="diag_tagder">
360
      <title>DIAG_TAGDEF</title>
361
 
362
      <informaltable frame="none">
363
        <textobject>
364
          <phrase>DIAG_TAGDEF encoding</phrase>
365
        </textobject>
366
 
367
        <tgroup cols="2">
368
          <tbody>
369
            <row>
370
              <entry>Number of encoding bits:</entry>
371
              <entry>1</entry>
372
            </row>
373
 
374
            <row>
375
              <entry>Is coding extendable:</entry>
376
              <entry>yes</entry>
377
            </row>
378
          </tbody>
379
        </tgroup>
380
      </informaltable>
381
 
382
    <para><code>DIAG_TAGDEF</code>s associate <code>DIAG_TAG</code>s with
383
      <code>DIAG_TYPE</code> s.</para>
384
 
385
    <sect2 id="make_diag_tagdef">
386
      <title>make_diag_tagdef</title>
387
 
388
      <informaltable frame="none">
389
        <textobject>
390
          <phrase>make_diag_tagdef encoding</phrase>
391
        </textobject>
392
 
393
        <tgroup cols="2">
394
          <tbody>
395
            <row>
396
              <entry>Encoding number:</entry>
397
              <entry>1</entry>
398
            </row>
399
          </tbody>
400
        </tgroup>
401
      </informaltable>
402
 
403
      <programlisting>
404
tno:             TDFINT
405
dtype:           DIAG_TYPE
406
                     -&gt; DIAG_TAGDEF
407
      </programlisting>
408
 
409
      <para>Associates tag number <varname>tno</varname> with
410
        <varname>dtype</varname>.
411
      </para>
412
    </sect2>
413
  </sect1>
414
 
415
  <sect1 id="diag_type_unit">
416
    <title>DIAG_TYPE_UNIT</title>
417
 
418
    <informaltable frame="none">
419
      <textobject>
420
        <phrase>DIAG_TYPE_UNIT encoding</phrase>
421
      </textobject>
422
 
423
      <tgroup cols="2">
424
        <tbody>
425
          <row>
426
            <entry>Number of encoding bits:</entry>
427
            <entry>0</entry>
428
          </row>
429
 
430
          <row>
431
            <entry>Is coding extendable:</entry>
432
            <entry>no</entry>
433
          </row>
434
 
435
          <row>
436
            <entry>Unit identification:</entry>
437
            <entry><varname>diagtype</varname></entry>
438
          </row>
439
        </tbody>
440
      </tgroup>
441
    </informaltable>
442
 
443
    <para>A <code>DIAG_TYPE_UNIT</code> is a TDF unit containing
444
      <code>DIAG_TAGDEF</code>s.</para>
445
 
446
    <sect2 id="build_diagtype_unit">
447
      <title>build_diagtype_unit</title>
448
 
449
      <informaltable frame="none">
450
        <textobject>
451
          <phrase>build_diagtype_unit encoding</phrase>
452
        </textobject>
453
 
454
        <tgroup cols="2">
455
          <tbody>
456
            <row>
457
              <entry>Encoding number:</entry>
458
              <entry>0</entry>
459
            </row>
460
          </tbody>
461
        </tgroup>
462
      </informaltable>
463
 
464
      <programlisting>
465
no_labels:       TDFINT
466
tagdefs: SLIST(DIAG_TAGDEF)
467
                     -&gt; DIAG_TYPEUNIT
468
      </programlisting>
469
 
470
      <para>Create a <code>DIAG_TYPEUNIT</code> containing
471
        <code>DIAG_TAGDEF</code>s. <varname>no_labels</varname> is the number
472
        of local labels used in <varname>tagdefs</varname> (for
473
        conditionals).</para>
474
    </sect2>
475
  </sect1>
476
 
477
  <sect1 id="diag_type">
478
    <title>DIAG_TYPE</title>
479
 
480
    <informaltable frame="none">
481
      <textobject>
482
        <phrase>DIAG_TYPE encoding</phrase>
483
      </textobject>
484
 
485
      <tgroup cols="2">
486
        <tbody>
487
          <row>
488
            <entry>Sortname:</entry>
489
            <entry><varname>foreign_sort("diag_type")</varname></entry>
490
          </row>
491
 
492
          <row>
493
            <entry>Number of encoding bits:</entry>
494
            <entry>4</entry>
495
          </row>
496
 
497
          <row>
498
            <entry>Is coding extendable:</entry>
499
            <entry>yes</entry>
500
          </row>
501
        </tbody>
502
      </tgroup>
503
    </informaltable>
504
 
505
    <para><code>DIAG_TYPE</code>s are used to provide diagnostic
506
      information about data types.</para>
507
 
508
    <sect2 id="diag_type_apply_token">
509
      <title>diag_type_apply_token</title>
510
 
511
      <informaltable frame="none">
512
        <textobject>
513
          <phrase>diag_type_apply_token encoding</phrase>
514
        </textobject>
515
 
516
        <tgroup cols="2">
517
          <tbody>
518
            <row>
519
              <entry>Encoding number:</entry>
520
              <entry>1</entry>
521
            </row>
522
          </tbody>
523
        </tgroup>
524
      </informaltable>
525
 
526
      <programlisting>
527
token_value:     TOKEN
528
token_args:      BITSTREAM
529
                     -&gt; DIAG_TYPE
530
      </programlisting>
531
 
532
      <para>The token is applied to the arguments to give a
533
        <code>DIAG_TYPE</code>. If there is a definition for
534
        <varname>token_value</varname> in the <code>CAPSULE</code> then
535
        <varname>token_args</varname> is a <code>BITSTREAM</code> encoding of
536
        the <code>SORT</code>s of its parameters, in the order
537
        specified.</para>
538
    </sect2>
539
 
540
    <sect2 id="diag_array">
541
      <title>diag_array</title>
542
 
543
      <informaltable frame="none">
544
        <textobject>
545
          <phrase>diag_array encoding</phrase>
546
        </textobject>
547
 
548
        <tgroup cols="2">
549
          <tbody>
550
            <row>
551
              <entry>Encoding number:</entry>
552
              <entry>2</entry>
553
            </row>
554
          </tbody>
555
        </tgroup>
556
      </informaltable>
557
 
558
      <programlisting>
559
element_type:    DIAG_TYPE
560
stride:          EXP OFFSET(p,p)
561
lower_bound:     EXP INTEGER(v)
562
upper_bound:     EXP INTEGER(v)
563
index_type:      DIAG_TYPE
564
                     -&gt; DIAG_TYPE
565
      </programlisting>
566
 
567
      <para>An array of <varname>element_type</varname> objects.
568
        <varname>stride</varname> is the <code>OFFSET</code> between elements
569
        of the array (i.e. <varname>p</varname> is described by
570
        <varname>element_type</varname>). The bounds are in general not
571
        runtime constants, hence the values are <code>EXP</code>s (not say
572
        <code>SIGNED_NAT</code>). The <code>VARIETY</code>
573
        <varname>v</varname> is described by <varname>index_type</varname>. As
574
        in TDF there is no multi-dimensional array primitive.</para>
575
    </sect2>
576
 
577
    <sect2 id="diag_bitfield">
578
      <title>diag_bitfield</title>
579
 
580
      <informaltable frame="none">
581
        <textobject>
582
          <phrase>diag_bitfield encoding</phrase>
583
        </textobject>
584
 
585
        <tgroup cols="2">
586
          <tbody>
587
            <row>
588
              <entry>Encoding number:</entry>
589
              <entry>3</entry>
590
            </row>
591
          </tbody>
592
        </tgroup>
593
      </informaltable>
594
 
595
      <programlisting>
596
type:            DIAG_TYPE
597
number_of_bits:  NAT
598
                     -&gt; DIAG_TYPE
599
      </programlisting>
600
 
601
      <para>Describes <varname>number_of_bits</varname>, which when extracted
602
        will have <code>DIAG_TYPE</code> <varname>type</varname>.</para>
603
    </sect2>
604
 
605
    <sect2 id="diag_enum">
606
      <title>diag_enum</title>
607
 
608
      <informaltable frame="none">
609
        <textobject>
610
          <phrase>diag_enum encoding</phrase>
611
        </textobject>
612
 
613
        <tgroup cols="2">
614
          <tbody>
615
            <row>
616
              <entry>Encoding number:</entry>
617
              <entry>4</entry>
618
            </row>
619
          </tbody>
620
        </tgroup>
621
      </informaltable>
622
 
623
      <programlisting>
624
base_type:       DIAG_TYPE
625
enum_name:       TDFSTRING(k, n)
626
values:          LIST(ENUM_VALUES) 
627
                     -&gt; DIAG_TYPE
628
      </programlisting>
629
 
630
      <para>An enumeration to be stored in an object of type
631
        <varname>base_type</varname>.  If <varname>enum_name</varname> is a
632
        string contining zero characters this signifies no source tag.</para>
633
    </sect2>
634
 
635
    <sect2 id="diag_floating_variety">
636
      <title>diag_floating_variety</title>
637
 
638
      <informaltable frame="none">
639
        <textobject>
640
          <phrase>diag_floating_variety encoding</phrase>
641
        </textobject>
642
 
643
        <tgroup cols="2">
644
          <tbody>
645
            <row>
646
              <entry>Encoding number:</entry>
647
              <entry>5</entry>
648
            </row>
649
          </tbody>
650
        </tgroup>
651
      </informaltable>
652
 
653
      <programlisting>
654
var:             FLOATING_VARIETY
655
                     -&gt; DIAG_TYPE
656
      </programlisting>
657
 
658
      <para>Creates a <code>DIAG_TYPE</code> to describe an
659
        <code>FLOATING_VARIETY</code> <varname>var</varname>.</para>
660
    </sect2>
661
 
662
    <sect2 id="diag_loc">
663
      <title>diag_loc</title>
664
 
665
      <informaltable frame="none">
666
        <textobject>
667
          <phrase>diag_loc encoding</phrase>
668
        </textobject>
669
 
670
        <tgroup cols="2">
671
          <tbody>
672
            <row>
673
              <entry>Encoding number:</entry>
674
              <entry>6</entry>
675
            </row>
676
          </tbody>
677
        </tgroup>
678
      </informaltable>
679
 
680
      <programlisting>
681
object:          DIAG_TYPE
682
qualifier:       DIAG_TQ
683
                     -&gt; DIAG_TYPE
684
      </programlisting>
685
 
686
      <para>Records the existence of an item of <code>DIAG_TYPE</code>
687
        <varname>object</varname>, qualified by <varname>qualifier</varname>.
688
        <varname>diag_loc</varname> is used for variables (which may of course
689
        not actually occupy a memory location).</para>
690
    </sect2>
691
 
692
    <sect2 id="diag_proc">
693
      <title>diag_proc</title>
694
 
695
      <informaltable frame="none">
696
        <textobject>
697
          <phrase>diag_proc encoding</phrase>
698
        </textobject>
699
 
700
        <tgroup cols="2">
701
          <tbody>
702
            <row>
703
              <entry>Encoding number:</entry>
704
              <entry>7</entry>
705
            </row>
706
          </tbody>
707
        </tgroup>
708
      </informaltable>
709
 
710
      <programlisting>
711
params:          LIST(DIAG_TYPE)
712
optional_args:   BOOL
713
result_type:     DIAG_TYPE
714
                     -&gt; DIAG_TYPE
715
      </programlisting>
716
 
717
      <para>Describes a procedure taking <varname>n</varname> parameters.
718
        <varname>optional_args</varname> is true if and only if the
719
        <varname>make_proc</varname> which this <varname>diag_proc</varname>
720
        describes had <varname>vartag</varname> present.</para>
721
    </sect2>
722
 
723
    <sect2 id="diag_ptr">
724
      <title>diag_ptr</title>
725
 
726
      <informaltable frame="none">
727
        <textobject>
728
          <phrase>diag_ptr encoding</phrase>
729
        </textobject>
730
        <tgroup cols="2">
731
          <tbody>
732
            <row>
733
              <entry>Encoding number:</entry>
734
              <entry>8</entry>
735
            </row>
736
          </tbody>
737
        </tgroup>
738
      </informaltable>
739
 
740
      <programlisting>
741
object:          DIAG_TYPE
742
qualifier:       DIAG_TQ
743
                     -&gt; DIAG_TYPE
744
      </programlisting>
745
 
746
      <para>Describes a pointer to an object of <code>DIAG_TYPE</code>
747
        <varname>object</varname>. The <code>DIAG_TQ</code> qualifier
748
        <varname>qualifier</varname> qualifies the pointer, not the object
749
        pointed to.</para>
750
    </sect2>
751
 
752
    <sect2 id="diag_struct">
753
      <title>diag_struct</title>
754
 
755
      <informaltable frame="none">
756
        <textobject>
757
          <phrase>diag_struct encoding</phrase>
758
        </textobject>
759
 
760
        <tgroup cols="2">
761
          <tbody>
762
            <row>
763
              <entry>Encoding number:</entry>
764
              <entry>9</entry>
765
            </row>
766
          </tbody>
767
        </tgroup>
768
      </informaltable>
769
 
770
      <programlisting>
771
tdf_shape:       SHAPE
772
src_name:        TDFSTRING(k, n)
773
fields:          LIST(DIAG_FIELD) 
774
                     -&gt; DIAG_TYPE
775
      </programlisting>
776
 
777
      <para>Describes a structure. If <varname>src_name</varname> is a string
778
        contining zero characters this signifies no source tag for the whole
779
        structure.  <varname>tdf_shape</varname> allows the total size to be
780
        computed.</para>
781
    </sect2>
782
 
783
    <sect2 id="diag_type_null">
784
      <title>diag_type_null</title>
785
 
786
      <informaltable frame="none">
787
        <textobject>
788
          <phrase>diag_type_null encoding</phrase>
789
        </textobject>
790
        <tgroup cols="2">
791
          <tbody>
792
            <row>
793
              <entry>Encoding number:</entry>
794
              <entry>10</entry>
795
            </row>
796
          </tbody>
797
        </tgroup>
798
      </informaltable>
799
 
800
      <programlisting>
801
                   -&gt; DIAG_TYPE
802
      </programlisting>
803
 
804
      <para>A null <code>DIAG_TYPE</code>.</para>
805
    </sect2>
806
 
807
    <sect2 id="diag_union">
808
      <title>diag_union</title>
809
 
810
      <informaltable frame="none">
811
        <textobject>
812
          <phrase>diag_union encoding</phrase>
813
        </textobject>
814
 
815
        <tgroup cols="2">
816
          <tbody>
817
            <row>
818
              <entry>Encoding number:</entry>
819
              <entry>11</entry>
820
            </row>
821
          </tbody>
822
        </tgroup>
823
      </informaltable>
824
 
825
      <programlisting>
826
tdf_shape:       SHAPE
827
src_name:        TDFSTRING(k, n)
828
fields:          LIST(DIAG_FIELD)
829
                     -&gt; DIAG_TYPE
830
      </programlisting>
831
 
832
      <para>Describes a union. If <varname>src_name</varname> is a string
833
        contining zero characters this signifies no source tag for the whole
834
        union.  <varname>tdf_shape</varname> allows the total size to be
835
        computed.</para>
836
    </sect2>
837
 
838
    <sect2 id="diag_variety">
839
      <title>diag_variety</title>
840
 
841
      <informaltable frame="none">
842
        <textobject>
843
          <phrase>diag_variety encoding</phrase>
844
        </textobject>
845
 
846
        <tgroup cols="2">
847
          <tbody>
848
            <row>
849
              <entry>Encoding number:</entry>
850
              <entry>12</entry>
851
            </row>
852
          </tbody>
853
        </tgroup>
854
      </informaltable>
855
 
856
      <programlisting>
857
var:             VARIETY
858
                     -&gt; DIAG_TYPE
859
      </programlisting>
860
 
861
      <para>Creates a <code>DIAG_TYPE</code> to describe an integer
862
        <code>VARIETY</code> <varname>var</varname>.</para>
863
    </sect2>
864
 
865
    <sect2 id="use_diag_tag">
866
      <title>use_diag_tag</title>
867
 
868
      <informaltable frame="none">
869
        <textobject>
870
          <phrase>use_diag_tag encoding</phrase>
871
        </textobject>
872
 
873
        <tgroup cols="2">
874
          <tbody>
875
            <row>
876
              <entry>Encoding number:</entry>
877
              <entry>13</entry>
878
            </row>
879
          </tbody>
880
        </tgroup>
881
      </informaltable>
882
 
883
      <programlisting>
884
dtag:            DIAG_TAG
885
                     -&gt; DIAG_TYPE
886
      </programlisting>
887
 
888
      <para>Obtains the <code>DIAG_TYPE</code> associated with
889
        <code>DIAG_TAG</code> <varname>dtag</varname>.</para>
890
    </sect2>
891
  </sect1>
892
 
893
  <sect1 id="enum_values">
894
    <title>ENUM_VALUES</title>
895
 
896
    <informaltable frame="none">
897
      <textobject>
898
        <phrase>ENUM_VALUES encoding</phrase>
899
      </textobject>
900
 
901
      <tgroup cols="2">
902
        <tbody>
903
          <row>
904
            <entry>Number of encoding bits:</entry>
905
            <entry>0</entry>
906
          </row>
907
 
908
          <row>
909
            <entry>Is coding extendable:</entry>
910
            <entry>no</entry>
911
          </row>
912
        </tbody>
913
      </tgroup>
914
    </informaltable>
915
 
916
    <sect2 id="make_enum_values_list">
917
      <title>make_enum_values_list</title>
918
 
919
      <informaltable frame="none">
920
        <textobject>
921
          <phrase>make_enum_values_list encoding</phrase>
922
        </textobject>
923
 
924
        <tgroup cols="2">
925
          <tbody>
926
            <row>
927
              <entry>Encoding number:</entry>
928
              <entry>0</entry>
929
            </row>
930
          </tbody>
931
        </tgroup>
932
      </informaltable>
933
 
934
      <programlisting>
935
value:           EXP <varname>sh</varname>
936
src_name:        TDFSTRING(k, n)
937
                   -&gt; ENUM_VALUES
938
      </programlisting>
939
 
940
      <para><code>ENUM_VALUES</code> describe elements of an enumerated type.
941
        <varname>src_name</varname> is the source language name.
942
        <varname>value</varname> evaluates to a value of <code>SHAPE</code>
943
        <varname>sh</varname>. Note that all members of a
944
        <code>LIST(ENUM_VALUES</code>) must have the same
945
        <varname>sh</varname>.</para>
946
    </sect2>
947
  </sect1>
948
 
949
  <sect1 id="diag_field">
950
    <title>DIAG_FIELD</title>
951
 
952
    <informaltable frame="none">
953
      <textobject>
954
        <phrase>DIAG_FIELD encoding</phrase>
955
      </textobject>
956
 
957
      <tgroup cols="2">
958
        <tbody>
959
          <row>
960
            <entry>Number of encoding bits:</entry>
961
            <entry>0</entry>
962
          </row>
963
          <row>
964
            <entry>Is coding extendable:</entry>
965
            <entry>no</entry>
966
          </row>
967
        </tbody>
968
      </tgroup>
969
    </informaltable>
970
 
971
    <sect2 id="make_diag_field">
972
      <title>make_diag_field</title>
973
 
974
      <informaltable frame="none">
975
        <textobject>
976
          <phrase>make_diag_field encoding</phrase>
977
        </textobject>
978
 
979
        <tgroup cols="2">
980
          <tbody>
981
            <row>
982
              <entry>Encoding number:</entry>
983
              <entry>0</entry>
984
            </row>
985
          </tbody>
986
        </tgroup>
987
      </informaltable>
988
 
989
      <programlisting>
990
field_name:      TDFSTRING(k, n)
991
found_at:        EXP OFFSET(ALIGNMENT whole, ALIGNMENT this_field)
992
field_type:      DIAG_TYPE
993
                     -&gt; DIAG_FIELD
994
      </programlisting>
995
 
996
      <para><code>DIAG_FIELD</code>s describe one field of a structure or
997
        union.  <varname>field_name</varname> is the source language name.
998
        <varname>found_at</varname> is the <code>OFFSET</code> between
999
        <varname>whole</varname> (the enclosing structure or union), and this
1000
        field (<varname>this_field</varname>).  <varname>field_type</varname>
1001
        is the <code>DIAG_TYPE</code> of the field.</para>
1002
    </sect2>
1003
  </sect1>
1004
 
1005
  <sect1 id="diag_tq">
1006
    <title>DIAG_TQ</title>
1007
 
1008
    <informaltable frame="none">
1009
      <textobject>
1010
        <phrase>DIAG_TQ encoding</phrase>
1011
      </textobject>
1012
 
1013
      <tgroup cols="2">
1014
        <tbody>
1015
          <row>
1016
            <entry>Number of encoding bits:</entry>
1017
            <entry>2</entry>
1018
          </row>
1019
          <row>
1020
            <entry>Is coding extendable:</entry>
1021
            <entry>yes</entry>
1022
          </row>
1023
        </tbody>
1024
      </tgroup>
1025
    </informaltable>
1026
 
1027
    <para><code>DIAG_TQ</code>s are type qualifiers, used to qualify
1028
      <code>DIAG_TYPE</code>s. A <code>DIAG_TQ</code> is constructed from
1029
      <type>diag_tq_null</type> and the various <type>add_diag_XXX</type>
1030
      operations.</para>
1031
 
1032
    <sect2 id="add_diag_const">
1033
      <title>add_diag_const</title>
1034
 
1035
      <informaltable frame="none">
1036
        <textobject>
1037
          <phrase>add_diag_const encoding</phrase>
1038
        </textobject>
1039
 
1040
        <tgroup cols="2">
1041
          <tbody>
1042
            <row>
1043
              <entry>Encoding number:</entry>
1044
              <entry>1</entry>
1045
            </row>
1046
          </tbody>
1047
        </tgroup>
1048
      </informaltable>
1049
 
1050
      <programlisting>
1051
          <varname>qual</varname>:            DIAG_TQ
1052
                     -&gt; DIAG_TQ
1053
      </programlisting>
1054
 
1055
      <para>Marks a <code>DIAG_TQ</code> type qualifier as being
1056
        <token>const</token> in the ANSI C sense.</para>
1057
    </sect2>
1058
 
1059
    <sect2 id="add_diag_volatile">
1060
      <title>add_diag_volatile</title>
1061
 
1062
      <informaltable frame="none">
1063
        <textobject>
1064
          <phrase>add_diag_volatile encoding</phrase>
1065
        </textobject>
1066
 
1067
        <tgroup cols="2">
1068
          <tbody>
1069
            <row>
1070
              <entry>Encoding number:</entry>
1071
              <entry>2</entry>
1072
            </row>
1073
          </tbody>
1074
        </tgroup>
1075
      </informaltable>
1076
 
1077
      <programlisting>
1078
          <varname>qual</varname>:            DIAG_TQ
1079
                     -&gt; DIAG_TQ
1080
      </programlisting>
1081
 
1082
      <para>Marks a <code>DIAG_TQ</code> type qualifier as being
1083
        <token>volatile</token> in the ANSI C sense.</para>
1084
    </sect2>
1085
 
1086
    <sect2 id="diag_tq_null">
1087
      <title>diag_tq_null</title>
1088
 
1089
      <informaltable frame="none">
1090
        <textobject>
1091
          <phrase>diag_tq_null encoding</phrase>
1092
        </textobject>
1093
 
1094
        <tgroup cols="2">
1095
          <tbody>
1096
            <row>
1097
              <entry>Encoding number:</entry>
1098
              <entry>3</entry>
1099
            </row>
1100
          </tbody>
1101
        </tgroup>
1102
      </informaltable>
1103
 
1104
      <programlisting>
1105
                     -&gt; DIAG_TQ
1106
      </programlisting>
1107
 
1108
      <para>Create a null <code>DIAG_TQ</code> type qualifier.</para>
1109
    </sect2>
1110
  </sect1>
1111
 
1112
  <sect1 id="filename">
1113
    <title>FILENAME</title>
1114
 
1115
    <informaltable frame="none">
1116
      <textobject>
1117
        <phrase>FILENAME encoding</phrase>
1118
      </textobject>
1119
 
1120
      <tgroup cols="2">
1121
        <tbody>
1122
          <row>
1123
            <entry>Sortname:</entry>
1124
            <entry><function>foreign_sort("~diag_file")</function></entry>
1125
          </row>
1126
 
1127
          <row>
1128
            <entry>Number of encoding bits:</entry>
1129
            <entry>2</entry>
1130
          </row>
1131
 
1132
          <row>
1133
            <entry>Is coding extendable:</entry>
1134
            <entry>yes</entry>
1135
          </row>
1136
        </tbody>
1137
      </tgroup>
1138
    </informaltable>
1139
 
1140
    <para><code>FILENAME</code> record details of source files used in
1141
      producing a <code>CAPSULE</code>. They can be tokenised for
1142
      abbreviation.</para>
1143
 
1144
    <sect2 id="filename_apply_token">
1145
      <title>filename_apply_token</title>
1146
 
1147
      <informaltable frame="none">
1148
        <textobject>
1149
          <phrase>filename_apply_token encoding</phrase>
1150
        </textobject>
1151
 
1152
        <tgroup cols="2">
1153
          <tbody>
1154
            <row>
1155
              <entry>Encoding number:</entry>
1156
              <entry>1</entry>
1157
            </row>
1158
          </tbody>
1159
        </tgroup>
1160
      </informaltable>
1161
 
1162
      <programlisting>
1163
          <varname>token_value</varname>:     TOKEN
1164
          <varname>token_args</varname>:      BITSTREAM
1165
                     -&gt; FILENAME
1166
      </programlisting>
1167
 
1168
      <para>The token is applied to the arguments to give a
1169
        <code>FILENAME</code>.  If there is a definition for
1170
        <varname>token_value</varname> in the <code>CAPSULE</code> then
1171
        <varname>token_args</varname> is a <code>BITSTREAM</code> encoding of
1172
        the <code>SORT</code>s of its parameters, in the order
1173
        specified.</para>
1174
    </sect2>
1175
 
1176
    <sect2 id="make_filename">
1177
      <title>make_filename</title>
1178
 
1179
      <informaltable frame="none">
1180
        <textobject>
1181
          <phrase>make_filename</phrase>
1182
        </textobject>
1183
 
1184
        <tgroup cols="2">
1185
          <tbody>
1186
            <row>
1187
              <entry>Encoding number:</entry>
1188
              <entry>2</entry>
1189
            </row>
1190
          </tbody>
1191
        </tgroup>
1192
      </informaltable>
1193
 
1194
      <programlisting>
1195
<varname>date</varname>:    NAT
1196
<varname>machine</varname>: TDFSTRING(k1, n1)
1197
<varname>file</varname>:    TDFSTRING(k2, n2)
1198
         -&gt; FILENAME
1199
      </programlisting>
1200
 
1201
      <para>Create a <code>FILENAME</code> for file <varname>file</varname>,
1202
        dated <varname>date</varname> (a UNIX timestamp; seconds since 1 Jan
1203
        1970) on machine <varname>machine</varname>.</para>
1204
    </sect2>
1205
  </sect1>
1206
 
1207
  <sect1 id="sourcemark">
1208
    <title>SOURCEMARK</title>
1209
 
1210
    <informaltable frame="none">
1211
      <textobject>
1212
        <phrase>SOURCEMARK encoding</phrase>
1213
      </textobject>
1214
 
1215
      <tgroup cols="2">
1216
        <tbody>
1217
          <row>
1218
            <entry>Number of encoding bits:</entry>
1219
            <entry>1</entry>
1220
          </row>
1221
 
1222
          <row>
1223
            <entry>Is coding extendable:</entry>
1224
            <entry>yes</entry>
1225
          </row>
1226
        </tbody>
1227
      </tgroup>
1228
    </informaltable>
1229
 
1230
    <para>A <code>SOURCEMARK</code> records a location in the source
1231
      program. Present <code>SOURCEMARK</code>s assume that a location can
1232
      be described by one or two numbers within a
1233
      <code>FILENAME</code>.</para>
1234
 
1235
      <sect2 id="make_sourcemark">
1236
        <title>make_sourcemark</title>
1237
 
1238
        <informaltable frame="none">
1239
          <textobject>
1240
            <phrase>make_sourcemark encoding</phrase>
1241
          </textobject>
1242
 
1243
          <tgroup cols="2">
1244
            <tbody>
1245
              <row>
1246
                <entry>Encoding number:</entry>
1247
                <entry>1</entry>
1248
              </row>
1249
            </tbody>
1250
          </tgroup>
1251
        </informaltable>
1252
 
1253
        <programlisting>
1254
<varname>file</varname>:            FILENAME
1255
<varname>line_no</varname>: NAT
1256
<varname>char_offset</varname>:     NAT
1257
           -&gt; SOURCEMARK
1258
        </programlisting>
1259
 
1260
        <para>Create a <code>SOURCEMARK</code> referencing the
1261
          <varname>char_offset</varname>'th character on line
1262
          <varname>line_no</varname> in file <varname> file</varname>.</para>
1263
 
1264
        <para><varname>char_offset</varname> is counted from 1, 0 meaning that
1265
          no character offset is available.</para>
1266
      </sect2>
1267
    </sect1>
1268
  </chapter>
1269
 
1270
  <chapter id="reserved-diagnostic-tokens">
1271
    <title>Reserved diagnostic TOKENs</title>
1272
 
1273
    <para>Reserved <code>TOKEN</code>s were used for diagnostic extensions
1274
      to <code>EXP</code>s, to avoid adding new constructs the contents of
1275
      an existing <code>UNIT</code>. All other parts of the diagnostic
1276
      system occur in other <code>UNIT</code>s.</para>
1277
 
1278
    <sect1 id="exp_to_source">
1279
      <title>~exp_to_source</title>
1280
 
1281
      <programlisting>
1282
        <varname>body</varname>:            EXP sh
1283
        <varname>from</varname>:            SOURCEMARK
1284
        <varname>to</varname>:              SOURCEMARK
1285
                   -&gt; EXP sh
1286
      </programlisting>
1287
 
1288
      <para>Records that the <code>EXP</code> <varname>body</varname> arose
1289
        from translating program between <code>SOURCEMARK</code>
1290
        <varname>from</varname> and <code>SOURCEMARK</code>
1291
        <varname>to</varname> (inclusive).  </para>
1292
    </sect1>
1293
 
1294
    <sect1 id="diag_id_source">
1295
      <title>~diag_id_source</title>
1296
 
1297
      <programlisting>
1298
        <varname>body</varname>:            EXP sh
1299
        <varname>name</varname>:            TDFSTRING(k, n)
1300
        <varname>access</varname>:          EXP POINTER(al)
1301
        <varname>type</varname>:            DIAG_TYPE
1302
                   -&gt; EXP sh
1303
      </programlisting>
1304
 
1305
      <para>Within the <code>EXP</code> <varname>body</varname> a variable
1306
        named <varname> name</varname> of <code>DIAG_TYPE</code>
1307
        <varname>type</varname> can be accessed via the <code>EXP</code>
1308
        <varname>access</varname>.</para>
1309
    </sect1>
1310
 
1311
    <sect1 id="diag_type_scope">
1312
      <title>~diag_type_scope</title>
1313
 
1314
      <programlisting>
1315
        <varname>body</varname>:            EXP sh
1316
        <varname>name</varname>:            TDFSTRING(k, n)
1317
        <varname>type</varname>:            DIAG_TYPE
1318
                   -&gt; EXP sh
1319
      </programlisting>
1320
 
1321
      <para>Within the <code>EXP</code> <varname>body</varname> a source
1322
        language type named <varname>name</varname> of <code>DIAG_TYPE</code>
1323
        <varname>type</varname> is valid.</para>
1324
    </sect1>
1325
 
1326
    <sect1 id="diag_tag_scope">
1327
      <title>~diag_tag_scope</title>
1328
 
1329
      <programlisting>
1330
        <varname>body</varname>:            EXP sh
1331
        <varname>name</varname>:            TDFSTRING(k, n)
1332
        <varname>type</varname>:            DIAG_TYPE
1333
                   -&gt; EXP sh
1334
      </programlisting>
1335
 
1336
      <para><note>This <code>TOKEN</code> is obsolete.</note></para>
1337
    </sect1>
1338
  </chapter>
1339
 
1340
  <chapter id="proposed-changes">
1341
    <title>Proposed changes</title>
1342
 
1343
    <para>It is thought likely that the new TDF entities described above
1344
      will eventually be incorporated into the main TDF
1345
      specification.</para>
1346
 
1347
    <para>In several places below the absence of "standardised methods" is
1348
      noted. These are cases where TDF can express some operation in several
1349
      ways, and the installer cannot be expected to spot all of them and
1350
      generate new diagnostic info.</para>
1351
 
1352
    <sect1 id="missing-features">
1353
      <title>Language features currently missing</title>
1354
 
1355
      <para>The following sections list some of the language features known
1356
        not to be supported by the current specification.  It is not intended
1357
        to be exhaustive.</para>
1358
 
1359
      <sect2 id="data-types">
1360
        <title>Data types</title>
1361
 
1362
        <itemizedlist>
1363
          <listitem>Complex numbers.</listitem>
1364
 
1365
          <listitem>Fortran alternate <token>RETURN</token>s.</listitem>
1366
        </itemizedlist>
1367
      </sect2>
1368
 
1369
      <sect2 id="cplusplus-requirements">
1370
        <title>C++ requirements</title>
1371
 
1372
        <itemizedlist>
1373
          <listitem>
1374
            <para>The <type>reference</type> type is not yet present.</para>
1375
          </listitem>
1376
 
1377
          <listitem>
1378
            <para>The accessibility attributes (<token>public</token>,
1379
              <token>private</token> and <token>protected</token>) are not yet
1380
              present.</para>
1381
          </listitem>
1382
 
1383
          <listitem>
1384
            <para>No <token>member</token> function information, and no
1385
              specification of how to deal with name mangling. Pointer to
1386
              <token>member</token> may need special recognition.</para>
1387
          </listitem>
1388
 
1389
          <listitem>No operations for describing <token>class</token>es and
1390
          inheritance.</listitem>
1391
        </itemizedlist>
1392
      </sect2>
1393
 
1394
      <sect2 id="fortran-requirements">
1395
        <title>FORTRAN requirements</title>
1396
 
1397
        <itemizedlist>
1398
          <listitem>Main <token>PROGRAM</token> attribute missing.</listitem>
1399
 
1400
          <listitem>
1401
            <para>Fortran optional parameters may need special
1402
              treatment</para>
1403
          </listitem>
1404
 
1405
          <listitem>Use of <token>COMMON</token> is not explicit in
1406
            TDF.</listitem>
1407
 
1408
          <listitem>Fortran77 etc. has a string type, which could be
1409
          implemented in several ways (other languages need this, but
1410
          they may differ on the same machine).</listitem>
1411
        </itemizedlist>
1412
      </sect2>
1413
 
1414
      <sect2 id="other-requirements">
1415
        <title>Other requirements</title>
1416
 
1417
        <itemizedlist>
1418
          <listitem>No standardised method for describing static link info.
1419
            TDF can express such programs, but the link could be stored in
1420
            several ways.</listitem>
1421
 
1422
          <listitem>No standardised method for describing arrays with either
1423
            non-constant bounds, and/or where the bounds are present in the
1424
            running image. (The <varname>upper_bound</varname> and
1425
            <varname>lower_bound</varname> <code>EXP</code>s are sufficiently
1426
            powerful, but needs some rules)</listitem>
1427
 
1428
          <listitem>No way to name a lexical block.</listitem>
1429
 
1430
          <listitem>Formal parameters with default values cannot have the
1431
          default made visible.</listitem>
1432
 
1433
          <listitem>Variables which are constant, and have been inlined
1434
          everywhere may be a problem.</listitem>
1435
 
1436
          <listitem>No standardised method of describing the discriminant part
1437
          of a discriminated union (in TDF probably represented by a
1438
          struct containing the discriminant and the union).</listitem>
1439
 
1440
          <listitem>The distinction between ANSI prototyped and non-prototyped
1441
          functions (this is a real problem for functions taking
1442
          <type>float</type>)</listitem>
1443
 
1444
          <listitem>No standardised method for PASCAL sets.</listitem>
1445
 
1446
          <listitem>No standardised method for subrange types.</listitem>
1447
 
1448
          <listitem>PASCAL and Modula have a <token>WITH</token> construct to
1449
            change semantics of record field lookup. No standardised method
1450
            for documenting this.</listitem>
1451
        </itemizedlist>
1452
      </sect2>
1453
    </sect1>
1454
 
1455
    <sect1 id="further-abstraction">
1456
      <title>Areas for further abstraction</title>
1457
 
1458
      <sect2 id="compilation-related">
1459
        <title>Compilation related</title>
1460
 
1461
        <para>How a running program has been created from several components
1462
          is of interest when debugging. The present system cannot record
1463
          all details of how a program has been created. In particular there
1464
          is no indication of the source language of any piece of TDF, nor
1465
          of the full name of any of the source files.</para>
1466
      </sect2>
1467
 
1468
      <sect2 id="c-related">
1469
        <title>C related</title>
1470
 
1471
        <para>At present there is no defined link between the fundamental C
1472
          types and the <code>VARIETY</code>s etc. used for them. Present
1473
          installers for 32 bit machines cannot distinguish between
1474
          <type>int</type> and <type>long</type> when generating diagnostics,
1475
          other than by means of the standard token names which form part of
1476
          the C producer language interface.</para>
1477
      </sect2>
1478
 
1479
      <sect2 id="naming-types">
1480
        <title>Naming of types</title>
1481
 
1482
        <para>At present various <code>DIAG_TYPE</code>s have names, some
1483
          don't. I suspect we should make a separate
1484
          <function>is_named</function> operation and remove the other
1485
          names.</para>
1486
      </sect2>
1487
    </sect1>
1488
 
1489
    <sect1 id="andf-de">
1490
      <title>Postscript - ANDF-DE</title>
1491
 
1492
      <para>As this section makes clear, the TDF Diagnostic Specification
1493
        was only ever really intended to deal with C. As of 1997, a more
1494
        extensive diagnostic extension to TDF, ANDF-DE, is under development
1495
        by DDC-I. This has been designed with the requirements of C, C++ and
1496
        Ada in mind. It is intended that eventually ANDF-DE will be
1497
        incorporated into the TDF specification, and the diagnostic format
1498
        described here will be denegrated.</para>
1499
    </sect1>
1500
  </chapter>
1501
 
1502
  <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
1503
    href="../common/colophon-dera.xml"/>
1504
</book>