diff --git a/documentation/current/eiffelstudio/eiffelstudio-how-tos/browsing/viewing-information-about-component/viewing-information-about-feature.wiki b/documentation/current/eiffelstudio/eiffelstudio-how-tos/browsing/viewing-information-about-component/viewing-information-about-feature.wiki
index 7fb964e1..70d23daa 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-how-tos/browsing/viewing-information-about-component/viewing-information-about-feature.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-how-tos/browsing/viewing-information-about-component/viewing-information-about-feature.wiki
@@ -1,7 +1,7 @@
[[Property:title|Viewing information about a feature]]
[[Property:weight|3]]
[[Property:uuid|0151eab9-ee25-210a-bed9-b2709e9fa5f0]]
-Once you [[Centering tools on a component|centered the editor]] on a feature, you have access to its text. The feature tab in the context tool can display more information. To have access to it, you have first to center the context tool on the wanted class and select the feature tab. You can then consult the different views of the text of the feature ([[Feature formatters: Basic text view|basic text]] or [[Feature formatters: Flat view|flat]]) and other information such as its [[Callers|callers]] or its [[Descendant versions|descendant]] versions.
+Once you [[Centering tools on a component|centered the editor]] on a feature, you have access to its text. The feature tab in the context tool can display more information. To have access to it, you have first to center the context tool on the wanted class and select the feature tab. You can then consult the different views of the text of the feature ([[Feature formatters: Basic text view|basic text]] or [[Feature formatters: Flat view|flat]]) and other information such as its [[Feature formatters: Callers|callers]] or its [[Descendant versions|descendant]] versions.
The [[Metrics tool|metric tool]] provides another kind of data. It enables you to compute some [[How to analyze a project|measures]] on your feature.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/command-line/eiffelstudio-using-command-line-options.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/command-line/eiffelstudio-using-command-line-options.wiki
index 5b1247e6..0f1511d7 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/command-line/eiffelstudio-using-command-line-options.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/compiler/command-line/eiffelstudio-using-command-line-options.wiki
@@ -2,6 +2,8 @@
[[Property:link_title|Using command line options]]
[[Property:weight|1]]
[[Property:uuid|a6b6a676-8660-ce2d-6f37-03de7f23a78e]]
+==Compiling and viewing==
+
You may start ec through a command of the following form:
:'''ec''' ''option'' ... [''class_name''][''feature_name'']
@@ -181,6 +183,57 @@ You must now run "finish_freezing" in:
with | replaced by \ if your platform is Windows, / if it is Unix. To execute the C compilation and linking part of the finalization, change directory to ''your_project_path''|EIFGENs|''target_name''|F_code as indicated and execute '''finish_freezing'''.
+===Usage of finish_freezing===
+
+
+finish_freezing [-location ] [-generate_only] [-nproc ] [-low]
+[-x86] [-silent [-silent...]] [-library [-library...]] [-version] [-nologo]
+
+
+OPTIONS:
+:Options should be prefixed with: '-' or '/'
+
+{| border="1"
+|-
+| '''OPTION'''
+| '''ARGUMENTS'''
+|-
+|-
+| -location
+| Alternative location to compile C code in. (Optional)
+: Location to compile C code in
+|-
+| -generate_only
+| Informs tool to only generate a Makefile. (Optional)
+|-
+| -nproc
+| Maximum number of processors to use (Optional)
+: Number of processors
+|-
+| -low
+| Executes finish freezing in low-execution priority mode. (Optional)
+|-
+| -x86
+| Generate 32bit lib DLLs for .NET projects. (Optional)
+|-
+| -silent
+| Suppresses confirmation dialog (Optional)
+|-
+| -library
+| Compiles the C code of an Eiffel library (Optional)
+|-
+| -?
+| Display usage information. (Optional)
+|-
+| -version
+| Displays version information. (Optional)
+|-
+| -nologo
+| Supresses copyright information. (Optional)
+|}
+
+
+
{{seealso|
[[Batch compilation|Batch compilation]] }}
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/class-views/clients.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/class-views/clients.wiki
index 3c2a302f..ece4afe4 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/class-views/clients.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/class-views/clients.wiki
@@ -7,7 +7,7 @@ It is available through the '''Class''' tab of the [[EiffelStudio window overvie
{{seealso|
[[Suppliers|Suppliers]]
-[[Callers|Feature callers]] }}
+[[Feature formatters: Callers|Feature callers]] }}
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-ancestor-versions.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-ancestor-versions.wiki
index f35335f4..603ad29a 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-ancestor-versions.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-ancestor-versions.wiki
@@ -1,12 +1,11 @@
-[[Property:title|Ancestor versions]]
-[[Property:link_title|Feature formatters: Ancestor versions]]
+[[Property:title|Feature formatters: Ancestor versions]]
[[Property:weight|10]]
[[Property:uuid|ca7f840d-30fb-c1cb-8f2f-6b45aa244f95]]
-The ancestor view [[Image:feature-ancestors-icon]] displays all the features which the current feature is redefining.
+The '''ancestor versions''' view [[Image:feature-ancestors-icon]] displays all the features which the current feature is redefining.
{{seealso|
-[[Descendant versions|Descendant versions]] }}
+[[Feature formatters: Descendant versions|Descendant versions]] }}
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assignees.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assignees.wiki
index 1db41278..f7faf28d 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assignees.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assignees.wiki
@@ -1,7 +1,7 @@
[[Property:title|Feature formatters: Assignees]]
[[Property:weight|7]]
[[Property:uuid|98b4c8f2-272f-c2b6-1f8f-bd86aadbddc2]]
-The '''assignees''' [[Image:feature-assignees-icon]] view lists all features which appear in the current feature as targets of assignments.
+The '''assignees''' view [[Image:feature-assignees-icon]] lists all features which appear in the current feature as targets of assignments.
As with [[Feature formatters: Assigners|assigners]], this includes true assignments to class features only, that is, it does not include "targets" of the assignment-like syntax of '''assignment commands'''.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assigners.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assigners.wiki
index 671d71e5..ffbf098d 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assigners.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-assigners.wiki
@@ -1,7 +1,7 @@
[[Property:title|Feature formatters: Assigners]]
[[Property:weight|4]]
[[Property:uuid|6fdc5d59-d63b-39f7-68f8-13777077cbd2]]
-The assigners view [[Image:feature-assigners-icon]] displays the features which assign to the current feature.
+The '''assigners''' view [[Image:feature-assigners-icon]] displays the features which assign to the current feature.
This means that unless the current feature is an attribute, assignment is not defined and this view will be empty.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-basic-text-view.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-basic-text-view.wiki
index e18efb8b..6e001b38 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-basic-text-view.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-basic-text-view.wiki
@@ -1,7 +1,7 @@
[[Property:title|Feature formatters: Basic text view]]
[[Property:weight|1]]
[[Property:uuid|ad171d9e-9d67-7fb9-10e5-db237b04e40e]]
-Basic text view [[Image:view-editor-feature-icon]] displays the text of the current feature as it is written in the enclosing class.
+The '''basic text''' view [[Image:view-editor-feature-icon]] displays the text of the current feature as it is written in the enclosing class.
It does not work with [[Breakpoints|breakpoints]]; in order to do this the [[Feature formatters: Flat view|flat view]] has to be used.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callees.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callees.wiki
index 07fbc8b7..6c24ee12 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callees.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callees.wiki
@@ -1,7 +1,7 @@
[[Property:title|Feature formatters: Callees]]
[[Property:weight|6]]
[[Property:uuid|0e81a9a8-9bce-91b3-3dce-b0c09186837e]]
-The callees view will list the names of all features used by the current feature. This includes those features called directly, and as appropriate, those features which are targets of assignments in the current feature (the feature's assignees [[Image:feature-assignees-icon]], those features which are the targets of creation instructions in the current feature (the feature's creations [[Image:feature-creations-icon]], and those features which are used by the current feature as arguments in calls to other features.
+The '''callees''' view [[Image:feature-callees-icon]] will list the names of all features used by the current feature. This includes those features called directly, and as appropriate, those features which are targets of assignments in the current feature (the feature's assignees [[Image:feature-assignees-icon]], those features which are the targets of creation instructions in the current feature (the feature's creations [[Image:feature-creations-icon]], and those features which are used by the current feature as arguments in calls to other features.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callers.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callers.wiki
index 95c661e3..0ba35a88 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callers.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-callers.wiki
@@ -1,8 +1,7 @@
-[[Property:title|Callers]]
-[[Property:link_title|Feature formatters: Callers]]
+[[Property:title|Feature formatters: Callers]]
[[Property:weight|3]]
[[Property:uuid|63b7a88c-86ff-7aef-bf31-05d0ed850e4e]]
-The callers view [[Image:feature-callers-icon]] displays all the features which use the current feature in any way.
+The '''callers''' view [[Image:feature-callers-icon]] displays all the features which use the current feature in any way.
So the callers view includes features which actually call the current feature.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creations.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creations.wiki
index f09db3b3..bb46d6a7 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creations.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creations.wiki
@@ -1,7 +1,7 @@
[[Property:title|Feature formatters: Creations]]
[[Property:weight|8]]
[[Property:uuid|97a25a8d-42c8-f968-fa66-1d270e82a8c8]]
-The feature '''creations''' [[Image:feature-creations-icon]] view displays the names of any features which appear in the current feature as targets of creation instructions.
+The feature '''creations''' view [[Image:feature-creations-icon]] displays the names of any features which appear in the current feature as targets of creation instructions.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creators.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creators.wiki
index 64dc3355..99fdc9b1 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creators.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-creators.wiki
@@ -1,7 +1,7 @@
[[Property:title|Feature formatters: Creators]]
[[Property:weight|5]]
[[Property:uuid|ece55aae-5922-b6ec-7b50-b4c97cba7cc0]]
-The creators [[Image:feature-creators-icon]] view shows all features in which the current feature appears as the target of a creation instruction. The creators view will be empty for any feature which is not an attribute.
+The '''creators''' view [[Image:feature-creators-icon]] shows all features in which the current feature appears as the target of a creation instruction. The creators view will be empty for any feature which is not an attribute.
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-descendant-versions.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-descendant-versions.wiki
index 316ecbba..cbd1a69c 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-descendant-versions.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-descendant-versions.wiki
@@ -1,12 +1,11 @@
-[[Property:title|Descendant versions]]
-[[Property:link_title|Feature formatters: Descendant versions]]
+[[Property:title|Feature formatters: Descendant versions]]
[[Property:weight|11]]
[[Property:uuid|c232a74a-7264-c8e1-4613-a65d75302602]]
-The descendant view [[Image:feature-descendents-icon]] displays all the features that redefine the current feature.
+The '''descendant versions''' view [[Image:feature-descendents-icon]] displays all the features that redefine the current feature.
{{seealso|
-[[Ancestor versions|Ancestor versions]] }}
+[[Feature formatters: Ancestor versions|Ancestor versions]] }}
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-flat-view.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-flat-view.wiki
index 68da3d85..45bf478d 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-flat-view.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-flat-view.wiki
@@ -1,7 +1,7 @@
[[Property:title|Feature formatters: Flat view]]
[[Property:weight|2]]
[[Property:uuid|b325d97c-772d-8207-a901-a401c6a61376]]
-The flat view [[Image:view-clickable-feature-icon]] displays the feature body as it is seen at run-time (according to ancestor versions, if any). This is why it is possible to add or remove [[Breakpoints|breakpoints]] in this view.
+The '''flat''' view [[Image:view-clickable-feature-icon]] displays the feature body as it is seen at run-time (according to ancestor versions, if any). This is why it is possible to add or remove [[Breakpoints|breakpoints]] in this view.
{{seealso|
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-homonyms.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-homonyms.wiki
index a8923d06..649e3cd3 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-homonyms.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-homonyms.wiki
@@ -1,15 +1,14 @@
-[[Property:title|Homonyms]]
-[[Property:link_title|Feature formatters: Homonyms]]
+[[Property:title|Feature formatters: Homonyms]]
[[Property:weight|12]]
[[Property:uuid|933b22f0-c181-fd65-9b52-be20270b00af]]
-The homonyms view [[Image:feature-homonyms-icon]] displays all the features in the system which have the same name as the current feature.
+The '''homonyms''' view [[Image:feature-homonyms-icon]] displays all the features in the system which have the same name as the current feature.
{{warning|: This operation may take a long time if the system has a lot of classes. }}
{{seealso|
-[[Implementers|Implementers]] }}
+[[Feature formatters: Implementers|Implementers]] }}
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-implementers.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-implementers.wiki
index 4d40e397..e336549d 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-implementers.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/feature-formatters-implementers.wiki
@@ -1,13 +1,12 @@
-[[Property:title|Implementers]]
-[[Property:link_title|Feature formatters: Implementers]]
+[[Property:title|Feature formatters: Implementers]]
[[Property:weight|9]]
[[Property:uuid|4032bef0-39e5-5fa6-0ffe-156392c0234e]]
-The implementers view [[Image:feature-implementers-icon]] displays all the different versions of the current feature by exploring the [[Ancestor versions|ancestor versions]] and the [[Descendant versions|descendant versions]], and selecting among those the ones which are not inherited.
+The '''implementers''' view [[Image:feature-implementers-icon]] displays all the different versions of the current feature by exploring the [[Feature formatters: Ancestor versions|ancestor versions]] and the [[Feature formatters: Descendant versions|descendant versions]], and selecting among those the ones which are not inherited.
{{seealso|
-[[Ancestor versions|Ancestor versions]]
-[[Descendant versions|Descendant versions]] }}
+[[Feature formatters: Ancestor versions|Ancestor versions]]
+[[Feature formatters: Descendant versions|Descendant versions]] }}
diff --git a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/index.wiki b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/index.wiki
index a4bcaea8..a2a1742b 100644
--- a/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/index.wiki
+++ b/documentation/current/eiffelstudio/eiffelstudio-reference/formatted-information-about-compiled-classes-and-features/feature-views/index.wiki
@@ -7,16 +7,16 @@ Feature views are all available through the '''Feature''' tab of the [[EiffelStu
These views (and their associated icon) are:
* [[Image:view-editor-feature-icon]] [[Feature formatters: Basic text view|Basic text view]]
* [[Image:view-clickable-feature-icon]] [[Feature formatters: Flat view|Flat view]]
-* [[Image:feature-callers-icon]] [[Callers|Callers]]
+* [[Image:feature-callers-icon]] [[Feature formatters: Callers|Callers]]
* [[Image:feature-assigners-icon]] [[Feature formatters: Assigners|Assigners]]
* [[Image:feature-creators-icon]] [[Feature formatters: Creators|Creators]]
* [[Image:feature-callees-icon]] [[Feature formatters: Callees|Callees]]
* [[Image:feature-assignees-icon]] [[Feature formatters: Assignees|Assignees]]
-* [[Image:feature-creations-icon]] Creations
-* [[Image:feature-implementers-icon]] [[Implementers|Implementers]]
-* [[Image:feature-ancestors-icon]] [[Ancestor versions|Ancestor versions]]
-* [[Image:feature-descendents-icon]] [[Descendant versions|Descendant versions]]
-* [[Image:feature-homonyms-icon]] [[Homonyms|Homonyms]]
+* [[Image:feature-creations-icon]] [[Feature formatters: Creations|Creations]]
+* [[Image:feature-implementers-icon]] [[Feature formatters: Implementers|Implementers]]
+* [[Image:feature-ancestors-icon]] [[Feature formatters: Ancestor versions|Ancestor versions]]
+* [[Image:feature-descendents-icon]] [[Feature formatters: Descendant versions|Descendant versions]]
+* [[Image:feature-homonyms-icon]] [[Feature formatters: Homonyms|Homonyms]]
diff --git a/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki b/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki
index 7329f7eb..4c912f46 100644
--- a/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki
+++ b/documentation/current/method/eiffel-tutorial-et/et-dynamic-structure-execution-model.wiki
@@ -599,20 +599,52 @@ The only exception to the last rule is termination of the original root procedur
==Abstraction==
+===Restriction of assignment targets===
+
The description of assignments stated that in x := y the target x must be an entity. More precisely it must be a '''writable''' entity. This notion excludes formal routine arguments: as noted, a routine r (arg: SOME_TYPE) may not assign to arg (reattaching it to a different object), although it can change the attached objects through calls of the form arg.procedure (...) .
-Restricting assignment targets to entities precludes assignments of the form obj.some_attribute := some_value , since the left-hand side obj.some_attribute is an expression (a feature call), not an entity: you may no more assign to obj.some_attribute than to, say, b + a -- another expression that is also, formally, a feature call.
-
-To obtain the intended effect of such an assignment you may use a procedure call of the form obj.set_attribute (some_value) , where the base class of obj's type has defined the procedure
+Restricting the targets of assignments to entities precludes assignments of the form
- set_attribute (v: VALUE_TYPE)
- -- Set value of attribute to v.
+ obj.some_attribute := some_value
+ -- This syntax is disallowed (except in the presence of an `assigner command', see below)
+
+This is because the left-hand side obj.some_attribute is an expression (a feature call), not an entity: you may no more assign to obj.some_attribute than to, say, b + a -- another expression that is also, formally, a feature call.
+
+To obtain the intended effect of such an assignment you may use a procedure call, where the base class of obj's type has defined the procedure
+
+ set_some_attribute (v: VALUE_TYPE)
+ -- Set value of some_attribute to `v'.
do
- attribute := v
+ some_attribute := v
end
-This rule is essential to enforcing the method. Permitting direct assignments to an object's fields -- as in C++ and Java -- would violate all the tenets of information hiding by letting clients circumvent the interface carefully crafted by the author of a supplier class. It is the responsibility of each class author to define the exact privileges that the class gives to each of its clients, in particular field modification rights. Building a class is like building a machine: you design the internals, to give yourself the appropriate mechanisms; and you design the control panel, letting users (clients) access the desired subset of these mechanisms, safely and conveniently.
+So instead of the disallowed assignment shown above, you would code:
+
+ obj.set_some_attribute (some_value)
+
+
+This rule is essential to enforcing the method. Permitting direct assignments to an object's fields -- as in C++ and Java -- would violate all the tenets of information hiding by letting clients circumvent the interface carefully crafted by the author of a supplier class.
+
+===Assigner commands===
+
+However, many developers have become accustomed to reading and writing code in other languages which do allow assignments of the form:
+
+ obj.some_attribute := some_value
+
+For this reason, it is possible in Eiffel to allow such a syntax without actually enabling an end-run around the constraints of the class. It is done by using a facility called an '''assigner command'''. In the example shown in the previous section, we might expect some_attribute to be declared something like this:
+
+ some_attribute: SOME_TYPE
+
+If this were the case the assignment above would cause a syntax error at compile time. But if the declaration included the specification of an assigner command, as shown below, then the assignment syntax would be valid.
+
+ some_attribute: SOME_TYPE assign set_some_attribute
+
+The assigner command then is the procedure set_some_attribute coded as shown in the previous section. In the presence of the assigner command, the previously invalid assignment syntax is now valid. But it is translated by the compiler as a call to set_some_attribute, using the source of the assignment as an argument.
+
+===Controlling modification of class fields===
+
+It is the responsibility of each class author to define the exact privileges that the class gives to each of its clients, in particular field modification rights. Building a class is like building a machine: you design the internals, to give yourself the appropriate mechanisms; and you design the control panel, letting users (clients) access the desired subset of these mechanisms, safely and conveniently.
The levels of privilege available to the class author include, for any field:
* Hide the field completely from clients, by exporting the corresponding attribute to NONE.
diff --git a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/eiffelcom-wizard-guided-tour/accessing-com-component.wiki b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/eiffelcom-wizard-guided-tour/accessing-com-component.wiki
index 0c56106c..6c5670bf 100644
--- a/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/eiffelcom-wizard-guided-tour/accessing-com-component.wiki
+++ b/documentation/current/platform-specifics/microsoft-windows/com/eiffelcom-wizard/eiffelcom-wizard-guided-tour/accessing-com-component.wiki
@@ -24,7 +24,7 @@ To implement a client of the StringManipulator component open a
{{note|If a COM component should be added to an existing client, the generated ecf file can be added as a library. }}
==Contracts==
-Contracts can be broken directly on the proxy in which case you will get a standard contract violation in the client. If contracts are broken on the server then the exception will be forwarded by the EiffelCOM runtime to the client. The feature replace_substring_user_precondition in MY_STRING_MANIPULATOR includes has some assertions.: Comment them out. Now the contract of the [[ref:libraries/base/reference/string_8_chart|replace_substring ]] feature is wrong and erroneous calls can be made. Quick melt the changes and run the client. Enter some invalid numbers in the fields used to call this feature. After you click '''Replace''' you will see an error message box warning you that a precondition was violated on the server side. This demonstrates contracts `over the wire'. The precondition was violated in the server; this exception was caught by the EiffelCOM runtime and sent back to the client.
+Contracts can be broken directly on the proxy in which case you will get a standard contract violation in the client. If contracts are broken on the server then the exception will be forwarded by the EiffelCOM runtime to the client. The feature replace_substring_user_precondition in MY_STRING_MANIPULATOR includes has some assertions. Comment them out. Now the contract of the [[ref:libraries/base/reference/string_8_chart|replace_substring ]] feature is wrong and erroneous calls can be made. Quick melt the changes and run the client. Enter some invalid numbers in the fields used to call this feature. After you click '''Replace''' you will see an error message box warning you that a precondition was violated on the server side. This demonstrates contracts `over the wire'. The precondition was violated in the server; this exception was caught by the EiffelCOM runtime and sent back to the client.
{{seealso|
[[Creating a new COM component|Creating a new COM component]]
[[Creating a new component from an Eiffel project|Creating a new component from an Eiffel Project]] }}