名前有効範囲
TECSL CDL では用いる名前には、大域的な名前と局所的な名前とがあります。 局所的な名前は、単一の識別子です。 大域的な名前は、ネームスペース識別子です。
名前有効範囲(スコープ)は、単一の識別子によって一意に物を識別できる範囲のことです。 名前有効範囲には、属する物により、以下の 6 種類があります。
- 一般名前有効範囲
- シグニチャ関数名前有効範囲
- 仮引数名前有効範囲
- セル属性名前有効範囲
- タグ名前有効範囲
- フィールド名前有効範囲
同じ名前有効範囲では、名前として重複した識別子を与えることはできません。 同じ名前有効範囲で、異なる物に同一の識別子を名前として与えることを名前の衝突と呼びます。 ただし一般名前有効範囲においては、名前が有効となる境界を設けることができます。
一般名前有効範囲
以下の物は、一般名前有効範囲に属します。
- 定数
- 型定義
- シグニチャ
- セルタイプ
- 複合セルタイプ
- セル
- ネームスペース
- リージョン
一般名前有効範囲は、ネームスペースまたはリージョンにより境界を設けることができます。 ネームスペースやリージョンは、入れ子構造をとることができ、内側のネームスペースと外側のネームスペースでは異なる有効範囲となります。
ネームスペースには、シグニチャとセルタイプと複合セルタイプを置くことができます。 リージョンには、セルのみを置くことができます。 定数、型定義は、ネームスペースによる衝突回避を行うことはできません。
名前の有効範囲は、属するネームスペースおよびその内側のネームスペースです。 つまり内側のネームスペースから外側のネームスペースの物は直接参照できます。
この時、内側のネームスペースと外側のネームスペースで重複した識別子を用いられていても名前の衝突は生じません、内側の物から重複した名前を持つ外側の物を局所的な名前によっては参照することができません。 重複した名前を持つ外側の物は隠蔽されます。
シグニチャ関数名前有効範囲
シグニチャ内の関数名は、シグニチャ関数名前有効範囲に属し、それぞれのシグニチャごとに名前有効範囲が区切られます。
仮引数名前有効範囲
関数の仮引数は、仮引数名前有効範囲に属し、関数ごとに名前有効範囲がくぐられます。
セル属性名前有効範囲
以下の物は、セル属性名前有効範囲に属し、セルタイプごとに名前有効範囲が区切られます。
- 呼び口名
- 受け口名
- 属性名
タグ名前有効範囲
構造体のタグは、タグ名前有効範囲に属します。
【制限事項】タグ名前有効範囲は、ネームスペースごとに区切られていない(ネームスペース下に構造体定義を置くことはできない)。
フィールド名前有効範囲
構造体のフィールド名は、フィールド名前有効範囲に属し、構造体ごとに名前有効範囲が区切られます。