summaryrefslogtreecommitdiff
path: root/src/common/typespec.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/typespec.txt')
-rw-r--r--src/common/typespec.txt87
1 files changed, 87 insertions, 0 deletions
diff --git a/src/common/typespec.txt b/src/common/typespec.txt
new file mode 100644
index 0000000..6fdd726
--- /dev/null
+++ b/src/common/typespec.txt
@@ -0,0 +1,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