  

<table class="width100" style="width:100%;" data-cellspacing="1">
<colgroup>
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
<col style="width: 16%" />
</colgroup>
<tbody>
<tr class="odd">
<td colspan="6" class="form-title"><div class="center">
ETSI's Bug Tracker - Part 01: TTCN-3 Core Language
</div></td>
</tr>
<tr class="even">
<td colspan="6" class="form-title">View Issue Details</td>
</tr>
<tr class="odd">
<td colspan="6" class="print-spacer"><hr /></td>
</tr>
<tr class="even print-category">
<td class="print" width="16%">ID</td>
<td class="print" width="16%">Project</td>
<td class="print" width="16%">Category</td>
<td class="print" width="16%">View Status</td>
<td class="print" width="16%">Date Submitted</td>
<td class="print" width="16%">Last Update</td>
</tr>
<tr class="odd print">
<td class="print">0005393</td>
<td class="print">Part 01: TTCN-3 Core Language</td>
<td class="print">Editorial</td>
<td class="print">public</td>
<td class="print">13-10-2009 16:01</td>
<td class="print">08-12-2009 18:28</td>
</tr>
<tr class="even">
<td colspan="6" class="print-spacer"><hr /></td>
</tr>
<tr class="odd print">
<td class="print-category">Reporter</td>
<td class="print">Philip Makedonski</td>
<td colspan="4" class="print"> </td>
</tr>
<tr class="even print">
<td class="print-category">Assigned To</td>
<td class="print">Ina Schieferdecker</td>
<td colspan="4" class="print"> </td>
</tr>
<tr class="odd print">
<td class="print-category">Priority</td>
<td class="print">normal</td>
<td class="print-category">Severity</td>
<td class="print">major</td>
<td class="print-category">Reproducibility</td>
<td class="print">always</td>
</tr>
<tr class="even print">
<td class="print-category">Status</td>
<td class="print">closed</td>
<td class="print-category">Resolution</td>
<td class="print">fixed</td>
<td colspan="2" class="print"> </td>
</tr>
<tr class="odd print">
<td class="print-category">Platform</td>
<td class="print"></td>
<td class="print-category">OS</td>
<td class="print"></td>
<td class="print-category">OS Version</td>
<td class="print"></td>
</tr>
<tr class="even print">
<td class="print-category">Product Version</td>
<td class="print">v4.1.1 (published 2009-06)</td>
<td colspan="4" class="print"> </td>
</tr>
<tr class="odd">
<td class="print-category">Target Version</td>
<td class="print">v4.2.1 (published 2010-07)</td>
<td class="print-category">Fixed in Version</td>
<td class="print">v4.2.1 (published 2010-07)</td>
<td colspan="2" class="print"> </td>
</tr>
<tr class="even print">
<td class="print-category">Clause Reference(s)</td>
<td colspan="4" class="print">A.1.6.1.0 General, Multiple</td>
<td></td>
</tr>
<tr class="odd print">
<td class="print-category">Source (company - Author)</td>
<td colspan="4" class="print">University of GÃ¶ttingen</td>
<td></td>
</tr>
<tr class="even">
<td colspan="6" class="print-spacer"><hr /></td>
</tr>
<tr class="odd print">
<td class="print-category">Summary</td>
<td colspan="5" class="print">0005393: Follow-up: 0005291: BNF - friend
definitions should have no visibility</td>
</tr>
<tr class="even print">
<td class="print-category">Description</td>
<td colspan="5" class="print">Since I cannot reopen a closed issue, this
issue is related to issue <a href="/mantis/view.php?id=5291"
class="resolved"
title="[closed] BNF - friend definitions should have no visibility">0005291</a>
and the visibility problems with friend modules, import statements and
groups:<br />
<br />
<br />
(original text by Gyorgy Rethy, my comments in the bottom)<br />
<br />
The current BNF allows visibility for friend definitions, while the
textual part (clause 8.2.4) does not:<br />
8.2.4 Definition of friend modules<br />
  Syntactical Structure<br />
  friend module ModuleIdentifier { "," ModuleIdentifier } ";"<br />
<br />
On the other hand side clause 8.2.5 says "(top level definitions) They
are by default public except for imported definitions which are by
default private."<br />
<br />
Thus friend definitions, according to $8.2.5, should be public. But, in
fact, they have meaning for the given module only and they are not
importable; hence, as a matter of fact, they are always private.<br />
-------------------<br />
Two solutions are possible:<br />
1) (preferred) Make the private keyword mandatory in $8.2.4:<br />
Syntactical Structure<br />
  private friend module ModuleIdentifier { "," ModuleIdentifier }
";"<br />
<br />
2) Modify the text in $8.2.5:<br />
"They are by default public except for imported definitions and friend
definitions which are by default private.<br />
...<br />
The visibility of imported definitions and friend definitions are by
default always private. All other module definitions are by default
public."<br />
-------------<br />
Solution 1), though would introduce a mandatory syntax, which is
optional for other definitions, is the preferred one, as solution 2)
would introduce a new exception; users looking at a friend definitions
without a visibility keyword could think that friend lists are also
imported.<br />
<br />
======================================================<br />
<br />
(commment by Ina Schieferdecker)<br />
<br />
In analogy to groups, which can be public only, a solution can be:<br />
<br />
[ private ] friend module ModuleIdentifier { "," ModuleIdentifier }
";"<br />
<br />
Adding a restriction:<br />
<br />
In addition to the general static rules of TTCN 3 given in clause 5, the
following restrictions apply:<br />
<br />
a) Only private visibility can be defined for friend definitions as they
are always private.<br />
<br />
And extending 8.2.5 accordingly:<br />
<br />
Top-level module definitions and import statements have a visibility,
which can be explicitly set. They are by default public except for
imported and friend definitions. Import definitions are by default
private. Friend definitions are private only. Group definitions are
public only.<br />
<br />
======================================================<br />
<br />
(my comments)<br />
<br />
...and confusion ensues...<br />
<br />
Why does the description as "by default" keep being brought up in the
context of import and friend definitions? The standard currently says
"private only" and "always private" for imports and "public only" and
"always public" for groups. What would "private by default" suggest in
this context? That they can eventually be made friend or public?!<br />
<br />
I'd keep the wording consistent to avoid further confusion - either
"public only" or "always public" in all instances, but adding "by
default" to the mix is going to far if by that one of the former
expressions is meant.. that is if I am not missing some part of the
discussion..<br />
<br />
So to spell it out: Multiple adaptations will be necessary in text, to
cover all the instances, but briefly:<br />
<br />
"Import and friend definitions cannot be imported and thus can be
private only, group definitions can be public only. All other importable
definitions are public by default."<br />
<br />
This would reflect the default visibility settings (in the case that the
syntax is not changed so as to require that imports and friends are
explicitly declared as private, although it will be necessary sooner or
later).<br />
<br />
In any case, one proposal for the syntax will therefore be:<br />
<br />
{<br />
 (<br />
  ( [ "private" ]<br />
    ( ImportDef |<br />
      FriendDef<br />
    )<br />
  )<br />
 |<br />
  ( [ "public" ]<br />
    GroupDef<br />
  )<br />
 |<br />
  ( [ Visibility ] (<br />
      TypeDef |<br />
      ConstDef |<br />
      TemplateDef |<br />
      ModuleParDef |<br />
      FunctionDef |<br />
      SignatureDef |<br />
      TestcaseDef |<br />
      AltstepDef |<br />
      ExtFunctionDef<br />
  )<br />
 )<br />
 [ WithStatement ]<br />
 [ ";" ]<br />
}+<br />
<br />
, where the optionality of the "private" and "public" visibility
modifiers may be dropped.<br />
<br />
Changes have to be propagated accordingly to all the relevant
sections.<br />
</td>
</tr>
<tr class="odd print">
<td class="print-category">Steps To Reproduce</td>
<td colspan="5" class="print"></td>
</tr>
<tr class="even print">
<td class="print-category">Additional Information</td>
<td colspan="5" class="print"></td>
</tr>
<tr class="odd print">
<td class="print-category">Tags</td>
<td colspan="5" class="print">No tags attached.</td>
</tr>
<tr class="even print">
<td class="print-category">Relationships</td>
<td colspan="5" class="print"></td>
</tr>
<tr class="odd print">
<td class="print-category">Attached Files</td>
<td colspan="5" class="print"></td>
</tr>
<tr class="even">
<td colspan="6" class="print-spacer"><hr /></td>
</tr>
<tr class="odd">
<td class="form-title">Issue History</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr class="even print-category">
<td class="row-category-history">Date Modified</td>
<td class="row-category-history">Username</td>
<td class="row-category-history">Field</td>
<td class="row-category-history">Change</td>
<td></td>
<td></td>
</tr>
<tr class="odd print">
<td class="print">13-10-2009 16:01</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=520">Philip
Makedonski</a></td>
<td class="print">New Issue</td>
<td class="print"></td>
<td></td>
<td></td>
</tr>
<tr class="even print">
<td class="print">13-10-2009 16:01</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=520">Philip
Makedonski</a></td>
<td class="print">Status</td>
<td class="print">new =&gt; assigned</td>
<td></td>
<td></td>
</tr>
<tr class="odd print">
<td class="print">13-10-2009 16:01</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=520">Philip
Makedonski</a></td>
<td class="print">Assigned To</td>
<td class="print">=&gt; Ina Schieferdecker</td>
<td></td>
<td></td>
</tr>
<tr class="even print">
<td class="print">13-10-2009 16:01</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=520">Philip
Makedonski</a></td>
<td class="print">Clause Reference(s)</td>
<td class="print">=&gt; A.1.6.1.0 General, Multiple</td>
<td></td>
<td></td>
</tr>
<tr class="odd print">
<td class="print">13-10-2009 16:01</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=520">Philip
Makedonski</a></td>
<td class="print">Source (company - Author)</td>
<td class="print">=&gt; University of GÃ¶ttingen</td>
<td></td>
<td></td>
</tr>
<tr class="even print">
<td class="print">07-12-2009 14:04</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a></td>
<td class="print">Target Version</td>
<td class="print">=&gt; Edition 4.2.1 (not yet published)</td>
<td></td>
<td></td>
</tr>
<tr class="odd print">
<td class="print">08-12-2009 18:04</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a></td>
<td class="print">Note Added: 0009107</td>
<td class="print"></td>
<td></td>
<td></td>
</tr>
<tr class="even print">
<td class="print">08-12-2009 18:12</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a></td>
<td class="print">Note Added: 0009108</td>
<td class="print"></td>
<td></td>
<td></td>
</tr>
<tr class="odd print">
<td class="print">08-12-2009 18:28</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a></td>
<td class="print">Status</td>
<td class="print">assigned =&gt; resolved</td>
<td></td>
<td></td>
</tr>
<tr class="even print">
<td class="print">08-12-2009 18:28</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a></td>
<td class="print">Resolution</td>
<td class="print">open =&gt; fixed</td>
<td></td>
<td></td>
</tr>
<tr class="odd print">
<td class="print">08-12-2009 18:28</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a></td>
<td class="print">Fixed in Version</td>
<td class="print">=&gt; Edition 4.2.1 (not yet published)</td>
<td></td>
<td></td>
</tr>
<tr class="even print">
<td class="print">08-12-2009 18:28</td>
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a></td>
<td class="print">Status</td>
<td class="print">resolved =&gt; closed</td>
<td></td>
<td></td>
</tr>
</tbody>
</table>

  

<table class="width100" data-cellspacing="1">
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td colspan="2" class="form-title">Notes</td>
</tr>
<tr class="even">
<td colspan="2" class="print-spacer"><hr /></td>
</tr>
<tr class="odd">
<td class="nopad" data-valign="top" width="20%"><table class="hide"
data-cellspacing="1">
<tbody>
<tr class="odd">
<td class="print">(0009107)</td>
</tr>
<tr class="even">
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a>   </td>
</tr>
<tr class="odd">
<td class="print">08-12-2009 18:04   </td>
</tr>
</tbody>
</table></td>
<td class="nopad" data-valign="top" width="85%"><table class="hide"
data-cellspacing="1">
<tbody>
<tr class="odd">
<td class="print">In version 4.1.3, the import of imports has been
introduced. Therefore it is required that import statements can be made
visible - in order to enable their imports. They are private by default,
which means that whenever no visibility is given the import statement is
a private one. By giving a visibility explicitly, the visibility of
imports can be overwritten.</td>
</tr>
</tbody>
</table></td>
</tr>
<tr class="even">
<td colspan="2" class="print-spacer"><hr /></td>
</tr>
<tr class="odd">
<td class="nopad" data-valign="top" width="20%"><table class="hide"
data-cellspacing="1">
<tbody>
<tr class="odd">
<td class="print">(0009108)</td>
</tr>
<tr class="even">
<td class="print"><a
href="http://oldforge.etsi.org/mantis/view_user_page.php?id=81">Ina
Schieferdecker</a>   </td>
</tr>
<tr class="odd">
<td class="print">08-12-2009 18:12   </td>
</tr>
</tbody>
</table></td>
<td class="nopad" data-valign="top" width="85%"><table class="hide"
data-cellspacing="1">
<colgroup>
<col style="width: 100%" />
</colgroup>
<tbody>
<tr class="odd">
<td class="print">It was agreed to make the various cases for visibility
explicit in the BNF:<br />
<br />
ModuleDefinition ::= ( ([Visibility]<br />
                         ( TypeDef |<br />
                           ConstDef |<br />
                           TemplateDef |<br />
                           ModuleParDef |<br />
                           FunctionDef |<br />
                           SignatureDef |<br />
                           TestcaseDef |<br />
                           AltstepDef |<br />
                           ImportDef |<br />
                           ExtFunctionDef |<br />
                           ExtConstDef )<br />
                         ) |<br />
                         (["public"] GroupDef ) |<br />
                         (["private"] FriendModuleDef )<br />
                      ) [WithStatement]</td>
</tr>
</tbody>
</table></td>
</tr>
</tbody>
</table>
