summaryrefslogtreecommitdiff
path: root/src/common/typespec.txt
blob: 6fdd72624823f52e9b2b04cf174a53d51f603243 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# This file contains Icon type specifications.

#   The first group of types have special semantics that are not completely
#   captured by the specification system. 


    string{s}:    simple
                  # special form of descriptor
                  # has RLT return construct with two arguments

    integer{i}:   simple
                  # two kinds of dwords

    record{R}:    simple # really special aggregate
                  return block_pointer
                  # special semantics for allocating sub-types
                  # different sub-types have different components

    proc:         simple
                  return block_pointer
                  # special semantics for allocating sub-types
                
    coexpr{C}:    simple
                  return block_pointer
                  # special semantics for allocating sub-types

    # sub-string trapped variables
    tvsubs{sstv}: aggregate(str_var)
                  # has RTL return construct with three arguments
                  # variable type with special dereferencing semantics

    # table-element trapped variables
    tvtbl{tetv}:  aggregate(trpd_tbl)
                  return block_pointer
                  # variable type with special dereferencing semantics


#   The second group of types are required by iconc but have no special
#   semantics.

       null{n}:  simple

       cset{c}:  simple
                 return block_pointer

       real{r}:  simple
                 return block_pointer

       list{L}:  aggregate(var lst_elem{LE})
                 return block_pointer

       table{T}: aggregate(tbl_key, var tbl_val{TV}, tbl_dflt)
                 return block_pointer


#    The third group of types appear only in RTL code. They have no special
#    semantics nor any special uses by iconc.

       file{f}:  simple
                 return block_pointer

       set{S}:   aggregate(set_elem)
                 return block_pointer

       # integer keyword variables: &random, &trace, &error
       kywdint:  variable always integer
                 return descriptor_pointer

       # &subject
       kywdsubj: variable always string
                 return descriptor_pointer

       # &pos
       kywdpos:  variable always integer
                 return descriptor_pointer

       # &eventsource, &eventvalue, &eventcode
       kywdevent: variable always any_value
                 return descriptor_pointer

       # &window
       kywdwin: variable always file ++ null
                 return descriptor_pointer

       # &fg and friends
       kywdstr: variable always string
                 return descriptor_pointer