<eval>

Purpose The <eval> statement is used to perform object, attribute or member access and manipulation. It is the statement to be used to get an object, an attribute of an object or a member variable or array as well as to modify them. The <eval> statement can perform these operations on objects one at a time or across a set of multiple objects simultaneously-- the latter is known as simultaneous object and member access.

Single Object Access Access a single object
Format <eval object="{object name}" includepath="{boolVal}" />
{object name} the name of the object to be accessed
{boolVal} (optional) true means include the full object path in the XML always; false means only include the object's node as XML if it has multiple children but do not include any ancestral nodes that are in the path specified in {object name}
Example #1 <node name="MyNode">400</node>
<xout>
   <eval object="MyNode" />
</xout>

sends the following text to the output stream:
400

Example #2 <node name="MyNode">400</node>
<xout>
   <eval object="MyNode" includepath="true" />
</xout>

sends the following text to the output stream:
<MyNode>400</MyNode>

Example #3 <node name="MyNode">
   <MyVal>300</MyVal>
</node>
<xout>
   <eval object="MyNode/MyVal" includepath="true" />
</xout>

sends the following text to the output stream:
<MyNode>
   <MyVal>300</MyVal>
</MyNode>

Example #4 <node name="MyNode">
   <MyVal>
      <Val1>100</Val1>
      <Val2>200</Val2>
   </MyVal>
</node>
<xout>
   <eval object="MyNode/MyVal" includepath="true" />
</xout>

sends the following text to the output stream:
<MyNode>
   <MyVal>
      <Val1>100</Val1>
      <Val2>200</Val2>
   </MyVal>
</MyNode>

Example #5 <node name="MyNode">
   <MyVal>
      <Val1>100</Val1>
      <Val2>200</Val2>
   </MyVal>
</node>
<xout>
   <eval object="MyNode/MyVal" includepath="false" />
</xout>

sends the following text to the output stream:
<MyVal>
   <Val1>100</Val1>
   <Val2>200</Val2>
</MyVal>


Single Attribute Access Access a single attribute of an object
Format <eval object="{object name}" attribute="{attribute name}" />
{object name} the name of the object to be accessed
{attribute name} the name of the attribute whose value is to be found
Example #1 <node name="MyNode">400</node>
<attr object="MyNode" name="status">current</attr>
<xout>
   <eval object="MyNode" attribute="status" />
</xout>

sends the following text to the output stream:
current


Single Member Access Access a single member variable or array element in an object
Format <eval object="{object name}" member="{var name}" />

<eval object="{object name}" member="{arr name and index}" />

{object name} the name of the object to be accessed
{var name} the name of the member variable whose value is to be found
{arr name and index} the name of the member array and the index in square brackets of the specific element whose value is to be found
Example #1 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <var type="int" name="Size">200</var>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<xout>
   <eval object="MyNode" member="Size" />
</xout>

sends the following text to the output stream:
200

Example #2 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <arr type="int" name="Size[3]">{200,100,50}</arr>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<xout>
   <eval object="MyNode" member="Size[2]" />
</xout>

sends the following text to the output stream:
50


Single Method Invocation Invoke a single method of an object
Format <eval object="{object name}" executeclass="{ancestor class name}" member="{method name}">
   <parm type="{parm type}" name="{parm name}" pass="{pass convention}">
      {parm value}
   </parm>
</eval>
{object name} the name of the object whose method will be invoked
{ancestor class name} (optional) the name of the ancestor class whose implementation of the method will be invoked-- this is useful when a method has been overridden and you wish to invoke an ancestral implementation of it. Please note that you can invoke the method implementation at any level all the way up to the root class in the class ancestry.
{method name} the name of the method to be invoked
{parm type} the datatype of the parameter for the method
{parm name} the name of the parameter for the method
{pass convention} val means pass the parameter to the method by value; ref means pass the parameter by reference-- the default is val
{parm value} the value of the parameter for the method
Example #1 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
   </scope>
   <scope type="public">
      <var type="int" name="Size">200</var>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<xout>
   <eval object="MyNode" member="GetSize" />
</xout>

sends the following text to the output stream:
200

This example illustrates invoking a method which takes no parameters.

Example #2 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
      <func type="int" name="GetSize">
         <parm type="int" pass="ref" name="a_Val" />
         <body>
            <eval object="a_Val">
               <eval object="this" member="Size" />
            </eval>
         </body>
      </func>
   </scope>
   <scope type="public">
      <var type="int" name="Size">200</var>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<var type="int" name="MyVar" />
<eval object="MyNode" member="GetSize">
   <parm type="int" pass="ref" name="a_Val">
      <eval object="MyVar" />
   </parm>
</eval>
<xout>
   <eval object="MyVar" />
</xout>

sends the following text to the output stream:
200

This example illustrates invoking a method which takes a parameter by reference.

Example #3 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
      <func type="int" name="GetSize">
         <parm type="int" pass="ref" name="a_Val" />
         <body>
            <eval object="a_Val">
               <eval object="this" member="Size" />
            </eval>
         </body>
      </func>
      <func type="int" name="SetSize">
         <parm type="int" pass="val" name="a_Val" />
         <body>
            <eval object="this" member="Size">
               <eval object="a_Val" />
            </eval>
         </body>
      </func>
   </scope>
   <scope type="public">
      <var type="int" name="Size">200</var>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<var type="int" name="MyVar" />
<var type="int" name="MySize" />
<eval object="MyNode" member="GetSize">
   <parm type="int" pass="ref" name="a_Val">
      <eval object="MyVar" />
   </parm>
</eval>
<xout>MyVar = </xout>
<xout>
   <eval object="MyVar" />
</xout>
<eval object="MyNode" member="SetSize">
   <parm type="int" name="a_Val">333</parm>
</eval>
<eval object="MyNode" member="GetSize">
   <parm type="int" pass="ref" name="a_Val">
      <eval object="MySize" />
   </parm>
</eval>
<xout>\r\nMySize = </xout>
<xout>
   <eval object="MySize" />
</xout>

sends the following text to the output stream:
MyVar = 200
MySize = 333

This example illustrates invoking a method which takes a parameter by value and another by reference.


Single Object Manipulation Manipulating a single object
Format <eval object="{object name}">
   {object value}
</eval>
{object name} the name of the object to be manipulated
{object value} the value or child node to be assigned to the object
Example #1 <node name="MyNode">400</node>
<eval object="MyNode">777</eval>
<xout>
   <eval object="MyNode" />
</xout>

sends the following text to the output stream:
777

Example #2 <node name="MyNode">400</node>
<eval object="MyNode">
   <MyChildren>
      <Child1>100</Child1>
      <Child2>200</Child2>
   </MyChildren>
</eval>
<xout>
   <eval object="MyNode/MyChildren" />
</xout>

sends the following text to the output stream:
<MyChildren>
   <Child1>100</Child1>
   <Child2>200</Child2>
</MyChildren>

Example #3 <node name="MyNode">
   <MyVal>300</MyVal>
</node>
<eval object="MyNode/MyVal">
   <Child1>100</Child1>
</eval>
<xout>
   <eval object="MyNode/MyVal" includepath="false" />
</xout>

sends the following text to the output stream:
<MyVal>
   <Child1>100</Child1>
</MyVal>


Single Attribute Manipulation Manipulate a single attribute of an object
Format <eval object="{object name}" attribute="{attribute name}">
   {attribute value}
</eval>
{object name} the name of the object to be manipulated
{attribute name} the name of the attribute whose value is to be set
{attribute value} the value with which to set the attribute
Example #1 <node name="MyNode">400</node>
<attr object="MyNode" name="status">current</attr>
<eval object="MyNode" attribute="status">invalid</eval> <xout>
   <eval object="MyNode" attribute="status" />
</xout>

sends the following text to the output stream:
invalid


Single Member Manipulation Manipulate a single member variable or array element in an object
Format <eval object="{object name}" member="{var name}">
   {var value}
</eval>

<eval object="{object name}" member="{arr name and index}">
   {element value}
</eval>

{object name} the name of the object to be accessed
{var name} the name of the member variable whose value is to be found
{var value} the value with which to set the member variable
{arr name and index} the name of the member array and the index in square brackets of the specific element whose value is to be found
{element value} the value with which to set the member array element
Example #1 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <var type="int" name="Size">200</var>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<eval object="MyNode" member="Size">777</eval>
<xout>
   <eval object="MyNode" member="Size" />
</xout>

sends the following text to the output stream:
777

Example #2 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <arr type="int" name="Size[3]">{200,100,50}</arr>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<eval object="MyNode" member="Size[2]">888</eval>
<xout>
   <eval object="MyNode" member="Size[2]" />
</xout>

sends the following text to the output stream:
888


Multiple Object Access Access multiple objects simultaneously
Format <eval>
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
</eval>
{object name} the name of the object to be accessed
{parm type} (optional) the datatype of the parameter to be used in the <expr> clause
{parm name} (optional) the name of the parameter to be used in the <expr> clause
{parm value} (optional) the value of the parameter to be used in the <expr> clause
{finder expr} the expression determining which objects shall be found
Example #1 <node name="MyNode">400</node>
<node name="MyNode_2">500</node>
<node name="MyStudent">600</node>
<xout>
   <eval>
      <object>
         <parm type="string" name="Parm1">MyNode</parm>
         <parm type="string" name="Parm2">MyNode_2</parm>
         <expr>has node:Parm1 or has node:Parm2</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
<Result xppobject="MyNode">400</Result>
<Result xppobject="MyNode_2">500</Result>


Multiple Object Attribute Access Access the same attribute held in multiple objects simultaneously
Format <eval attribute="{attribute name}">
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
</eval>
{attribute name} the name of the attribute to be accessed
{object name} the name of the object containing the attribute to be accessed
{parm type} (optional) the datatype of the parameter to be used in the <expr> clause
{parm name} (optional) the name of the parameter to be used in the <expr> clause
{parm value} (optional) the value of the parameter to be used in the <expr> clause
{finder expr} the expression determining which objects shall be found
Example #1 <node name="MyNode">400</node>
<node name="MyNode_2">500</node>
<node name="MyStudent">600</node>
<attr object="MyStudent" name="status">current</attr>
<attr object="MyNode" name="status">invalid</attr>
<xout>
   <eval attribute="status">
      <object>
         <expr>has attr:status</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
<Result xppobject="MyNode">invalid</Result>
<Result xppobject="MyStudent">current</Result>


Multiple Object Member Access Access the same member held in multiple objects simultaneously
Format <eval member="{var name}">
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
</eval>

<eval member="{arr name and index}">
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
</eval>

{var name} the name of the member variable to be accessed
{arr name and index} the name of the member array and the index of the element to be accessed
{object name} the name of the object containing the member to be accessed
{parm type} (optional) the datatype of the parameter to be used in the <expr> clause
{parm name} (optional) the name of the parameter to be used in the <expr> clause
{parm value} (optional) the value of the parameter to be used in the <expr> clause
{finder expr} the expression determining which objects shall be found
Example #1 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
      <func type="int" name="GetSize">
         <parm type="int" pass="ref" name="a_Val" />
         <body>
            <eval object="a_Val">
               <eval object="this" member="Size" />
            </eval>
         </body>
      </func>
      <func type="int" name="SetSize">
         <parm type="int" pass="val" name="a_Val" />
         <body>
            <eval object="this" member="Size">
               <eval object="a_Val" />
            </eval>
         </body>
      </func>
   </scope>
   <scope type="public">
      <var type="int" name="Size">333</var>
      <arr type="int" name="SizeArr[3]">{200,150,100}</arr>
   </scope>
</class>
<node name="MyNode" class="XItem">400</node>
<node name="MyNode_2" class="XItem">500</node>
<node name="MyStudent" class="XItem">600</node>
<eval object="MyNode_2" member="Size">444</eval>
<eval object="MyNode" member="SizeArr[2]">777</eval>
<xout>Vars = \r\n</xout>
<xout>
   <eval member="Size">
      <object>
         <expr>has attr:class</expr>
      </object>
   </eval>
</xout>
<xout>\r\n\r\nArray Elements = \r\n</xout>
<xout>
   <eval member="SizeArr[2]">
      <object>
         <expr>has attr:class</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
Vars = <Result xppobject="MyNode">333</Result>
<Result xppobject="MyNode_2">444</Result>
<Result xppobject="MyStudent">333</Result>

Array Elements =
<Result xppobject="MyNode">777</Result>
<Result xppobject="MyNode_2">100</Result>
<Result xppobject="MyStudent">100</Result>


Multiple Object Method Invocation Invoke a single method on multiple objects
Format <eval executeclass="{ancestor class name}" member="{method name}">
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>
   </object>
   <parm type="{method parm type}" name="{method parm name}" pass="{pass convention}">
      {method parm value}
   </parm>
</eval>
{ancestor class name} (optional) the name of the ancestor class whose implementation of the method will be invoked-- this is useful when a method has been overridden and you wish to invoke an ancestral implementation of it. Please note that you can invoke the method implementation at any level all the way up to the root class in the class ancestry.
{method name} the name of the method to be invoked
{parm type} (optional) the datatype of the parameter for the <expr> clause
{parm name} (optional) the name of the parameter for the <expr> clause
{parm value} (optional) the value of the parameter for the <expr> clause
{finder expr} the expression determining which objects shall be found
{method parm type} the datatype of the parameter for the method
{method parm name} the name of the parameter for the method
{pass convention} val means pass the parameter to the method by value; ref means pass the parameter by reference-- the default is val
{method parm value} the value of the parameter for the method
Example #1 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
   </scope>
   <scope type="public">
      <var type="int" name="Size">200</var>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<node name="MyNode_2" class="XItem" />
<xout>
   <eval member="GetSize">
      <object>
         <expr>has attr:class</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
<Result xppobject="MyNode">200</Result>
<Result xppobject="MyNode_2">200</Result>

This example illustrates invoking a method which takes no parameters.

Example #2 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
      <func type="int" name="GetSize">
         <parm type="int" pass="ref" name="a_Val" />
         <body>
            <eval object="a_Val">
               <eval object="this" member="Size" />
            </eval>
         </body>
      </func>
      <func type="int" name="SetSize">
         <parm type="int" pass="val" name="a_Val" />
         <body>
            <eval object="this" member="Size">
               <eval object="a_Val" />
            </eval>
         </body>
      </func>
   </scope>
   <scope type="public">
      <var type="int" name="Size">200</var>
   </scope>
</class>
<node name="MyNode" class="XItem" />
<node name="MyNode_2" class="XItem" />
<var type="int" name="MyVar" />
<var type="int" name="MySize" />
<eval object="MyNode" member="GetSize">
   <parm type="int" pass="ref" name="a_Val">
      <eval object="MyVar" />
   </parm>
</eval>
<eval member="SetSize">
      <object>
         <expr>has attr:class</expr>
      </object>
   <parm type="int" name="a_Val">333</parm>
</eval>
<xout>
   <eval member="GetSize">
      <object>
         <expr>has attr:class</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
<Result xppobject="MyNode">333</Result>
<Result xppobject="MyNode_2">333</Result>

This example illustrates invoking a method which sets a member in multiple objects.


Multiple Object Manipulation Manipulate multiple objects simultaneously
Format <eval>
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
   <value>
      {object value}
   </value>
</eval>
{object name} the name of the object to be manipulated
{parm type} (optional) the datatype of the parameter to be used in the <expr> clause
{parm name} (optional) the name of the parameter to be used in the <expr> clause
{parm value} (optional) the value of the parameter to be used in the <expr> clause
{finder expr} the expression determining which objects shall be found
{object value} the value with which the object is to be set
Example #1 <node name="MyNode">400</node>
<node name="MyNode_2">500</node>
<node name="MyStudent">600</node>
<eval>
   <object>
      <parm type="string" name="Parm1">MyNode</parm>
      <parm type="string" name="Parm2">MyNode_2</parm>
      <expr>has node:Parm1 or has node:Parm2</expr>
   </object>
   <value>Great!</value>
</eval>
<xout>
   <eval>
      <object>
         <parm type="string" name="Parm1">MyNode</parm>
         <parm type="string" name="Parm2">MyNode_2</parm>
         <expr>has node:Parm1 or has node:Parm2</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
<Result xppobject="MyNode">Great!</Result>
<Result xppobject="MyNode_2">Great!</Result>


Multiple Object Attribute Manipulation Manipulate the same attribute held in multiple objects simultaneously
Format <eval attribute="{attribute name}">
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
   <value>
      {attribute value}
   </value>
</eval>
{attribute name} the name of the attribute to be manipulated
{object name} the name of the object containing the attribute to be manipulated
{parm type} (optional) the datatype of the parameter to be used in the <expr> clause
{parm name} (optional) the name of the parameter to be used in the <expr> clause
{parm value} (optional) the value of the parameter to be used in the <expr> clause
{finder expr} the expression determining which objects shall be found
{attribute value} the value with which the attribute is to be set
Example #1 <node name="MyNode">400</node>
<node name="MyNode_2">500</node>
<node name="MyStudent">600</node>
<attr object="MyStudent" name="status">current</attr>
<attr object="MyNode" name="status">invalid</attr>
<eval attribute="status">
   <object>
      <expr>has attr:status</expr>
   </object>
   <value>okay</value>
</eval>
<xout>
   <eval attribute="status">
      <object>
         <expr>has attr:status</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
<Result xppobject="MyNode">okay</Result>
<Result xppobject="MyStudent">okay</Result>


Multiple Object Member Manipulation Manipulate the same member held in multiple objects simultaneously
Format <eval member="{var name}">
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
   <value>
      {member value}
   </value>
</eval>

<eval member="{arr name and index}">
   <object>
      <parm type="{parm type} name="{parm name}">
         {parm value}
      </parm>
      <expr>{finder expr}</expr>    </object>
   <value>
      {member value}
   </value>
</eval>

{var name} the name of the member variable to be manipulated
{arr name and index} the name of the member array and the index of the element to be manipulated
{object name} the name of the object containing the member to be manipulated
{parm type} (optional) the datatype of the parameter to be used in the <expr> clause
{parm name} (optional) the name of the parameter to be used in the <expr> clause
{parm value} (optional) the value of the parameter to be used in the <expr> clause
{finder expr} the expression determining which objects shall be found
{member value} (optional) the value with which to set the member
Example #1 <class name="XItem" inherit="">
   <construct />
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
      <func type="int" name="GetSize">
         <parm type="int" pass="ref" name="a_Val" />
         <body>
            <eval object="a_Val">
               <eval object="this" member="Size" />
            </eval>
         </body>
      </func>
      <func type="int" name="SetSize">
         <parm type="int" pass="val" name="a_Val" />
         <body>
            <eval object="this" member="Size">
               <eval object="a_Val" />
            </eval>
         </body>
      </func>
   </scope>
   <scope type="public">
      <var type="int" name="Size">333</var>
      <arr type="int" name="SizeArr[3]">{200,150,100}</arr>
   </scope>
</class>
<node name="MyNode" class="XItem">400</node>
<node name="MyNode_2" class="XItem">500</node>
<node name="MyStudent" class="XItem">600</node>
<eval object="MyNode_2" member="Size">444</eval>
<eval object="MyNode" member="SizeArr[2]">777</eval>
<eval member="Size">
   <object>
      <expr>has attr:class</expr>
   </object>
   <value>1000</value>
</eval>
<eval member="SizeArr[2]">
   <object>
      <expr>has attr:class</expr>
   </object>
   <value>5000</value>
</eval>
<xout>Vars = \r\n</xout>
<xout>
   <eval member="Size">
      <object>
         <expr>has attr:class</expr>
      </object>
   </eval>
</xout>
<xout>\r\n\r\nArray Elements = \r\n</xout>
<xout>
   <eval member="SizeArr[2]">
      <object>
         <expr>has attr:class</expr>
      </object>
   </eval>
</xout>

sends the following text to the output stream:
Vars = <Result xppobject="MyNode">1000</Result>
<Result xppobject="MyNode_2">1000</Result>
<Result xppobject="MyStudent">1000</Result>

Array Elements =
<Result xppobject="MyNode">5000</Result>
<Result xppobject="MyNode_2">5000</Result>
<Result xppobject="MyStudent">5000</Result>


Object Reclassification Change an object's class from one or more classes to a different one or more classes
Example #1 <class name="XTree">
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>
               <eval object="this" member="Size" />
            </return>
         </body>
      </func>
      <var type="int" name="Size">200</var>
   </scope>
</class>
<class name="XTerm">
   <scope type="public">
      <func type="int" name="GetSize">
         <body>
            <return>-1</return>
         </body>
      </func>
   </scope>
</class>
<node name="MyObj" class="XTree" />
<xout>Class is </xout>
<xout>
   <eval object="MyObj" attribute="class" />
</xout>
<xout>\r\nValue is </xout>
<xout>
   <eval object="MyObj" member="GetSize" />
</xout>
<eval object="MyObj" attribute="class">XTerm</eval>
<xout>\r\nClass is </xout>
<xout>
   <eval object="MyObj" attribute="class" />
</xout>
<xout>\r\nValue is </xout>
<xout>
   <eval object="MyObj" member="GetSize" />
</xout>

This example shows the reclassification of the MyObj object and the calling of the attribute class and the method GetSize before and after the reclassification. The result is that the following text is sent to the output stream:
Class is XTree
Value is 200
Class is XTerm
Value is -1