# 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
