home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / tolkit45.zip / os2tk45 / som / include / somcls.sc < prev    next >
Text File  |  1999-02-22  |  23KB  |  484 lines

  1.  
  2. /*
  3.  * This file was generated by the SOM Compiler.
  4.  * FileName: somcls.sc.
  5.  * Generated using:
  6.  *     SOM Precompiler somipc: 2.29.1.17
  7.  *     SOM Emitter emitsc: 2.47
  8.  */
  9. #include <somobj.sc>
  10.  
  11. class: SOMClass, 
  12.     externalstem = sommc, majorversion = 1, 
  13.     minorversion = 5, filestem = somcls;
  14.  
  15.     --   This is the SOM metaclass.  That is, the instances of this class
  16.     --   are class objects.  When the SOM environment is created an instance
  17.     --   of SOMClass is created and a pointer to it is placed in the external
  18.     --   data location (SOMClassClassData.classObject). Bindings provide the
  19.     --   macro _SOMClass for this expression. _SOMClass is unique in that it
  20.     --   is its own class object. I.e., _SOMClass == _somGetClass(_SOMClass).
  21.     --   SOMClass can be subclassed just like any SOM class. The subclasses
  22.     --   of SOMClass are new metaclasses and can generate class objects with
  23.     --   different implementations than those produced by _SOMClass.
  24.     -- 
  25.     --   An important rule for metaclass programming is that no methods
  26.     --   introduced by SOMClass should ever be overridden. While this
  27.     --   limits the utility of metaclass programming in SOM, it guarantees
  28.     --   that SOM will operate correctly. Special class frameworks may be
  29.     --   available from IBM to alleviate this restriction. Also, the
  30.     --   restriction may be lifted in the future.
  31.     -- 
  32.  
  33.  
  34. parent class: SOMObject;
  35.  
  36.  
  37. release order:
  38.     somNew, somRenew, 
  39.     somInitClass, somClassReady, 
  40.     somGetName, somGetParent, 
  41.     somDescendedFrom, somCheckVersion, 
  42.     somFindMethod, somFindMethodOk, 
  43.     somSupportsMethod, somGetNumMethods, 
  44.     somGetInstanceSize, somGetInstanceOffset, 
  45.     somGetInstancePartSize, somGetMethodIndex, 
  46.     somGetNumStaticMethods, somGetPClsMtab, 
  47.     somGetClassMtab, somAddStaticMethod, 
  48.     somOverrideSMethod, somAddDynamicMethod, 
  49.     somcPrivate0, somGetApplyStub, 
  50.     somFindSMethod, somFindSMethodOk, 
  51.     somGetMethodDescriptor, somGetNthMethodInfo, 
  52.     somSetClassData, somGetClassData, 
  53.     somNewNoInit, somRenewNoInit, 
  54.     somGetInstanceToken, somGetMemberToken, 
  55.     somcPrivate1, somGetMethodData, 
  56.     somOverrideMtab, somGetMethodToken, 
  57.     somGetParents, somGetPClsMtabs, 
  58.     somInitMIClass, somGetVersionNumbers, 
  59.     somLookupMethod, _get_somInstanceDataOffsets, 
  60.     somRenewNoZero, somRenewNoInitNoZero, 
  61.     somAllocate, somDeallocate, 
  62.     somGetRdStub, somGetNthMethodData, 
  63.     somcPrivate2, somcPrivate3, 
  64.     _get_somDirectInitClasses, somcPrivate5, 
  65.     somcPrivate6, somcPrivate7, 
  66.     somcPrivate8, somcPrivate9, 
  67.     somcPrivate10, somcPrivate11, 
  68.     somcPrivate12, somDefinedMethod, 
  69.     somcPrivate13, somcPrivate14, 
  70.     somcPrivate15, somcPrivate16, 
  71.     somcPrivate17, somcPrivate18, 
  72.     somcPrivate19, somcPrivate20, 
  73.     _get_somDataAlignment, somcPrivate21, 
  74.     somcPrivate22, somcPrivate23, 
  75.     somcPrivate24, somcPrivate25;
  76.  
  77. methods:
  78. group: somDataAlignment;
  79.  
  80.     long   _get_somDataAlignment(), attribute, descriptor = ::SOMClass::_get_somDataAlignment;
  81.  
  82.     --  The alignment required for the instance data structure
  83.     --  introduced by the receiving class.
  84.  
  85. group: somInstanceDataOffsets, nodata, nonstatic;
  86.  
  87.     SOMClass_somOffsets   _get_somInstanceDataOffsets(), attribute, nodata, 
  88.     nonstatic, descriptor = ::SOMClass::_get_somInstanceDataOffsets;
  89.  
  90.     --  A sequence of the instance data offsets for all classes used in
  91.     --  the derivation of the receiving class (including the receiver).
  92.  
  93. group: somDirectInitClasses, nonstatic;
  94.  
  95.     SOMClass_SOMClassSequence   _get_somDirectInitClasses(), attribute, nonstatic, 
  96.     descriptor = ::SOMClass::_get_somDirectInitClasses;
  97.  
  98.     --  The ancestors whose initializers the receiving
  99.     --  class wants to directly invoke.
  100.  
  101. methods:
  102.  
  103.  
  104.     SOMObject*   somNew(), descriptor = ::SOMClass::somNew;
  105.  
  106.     --  Uses SOMMalloc to allocate storage for a new instance of the
  107.     --  receiving class, and then calls somRenewNoInitNoZero to load the
  108.     --  new object's method table pointer. Then somDefaultInit is called to
  109.     --  initialize the new object.  Note: If the instance is a class object,
  110.     --  somInitMIClass must then be invoked to declare parents and
  111.     --  initialize the class's instance method table. Upon failure, NULL
  112.     --  is returned.
  113.  
  114.     SOMObject*   somNewNoInit(), descriptor = ::SOMClass::somNewNoInit;
  115.  
  116.     --  Equivalent to somNew except that somDefaultInit is not called.
  117.  
  118.     SOMObject*   somRenew(void* obj), descriptor = ::SOMClass::somRenew;
  119.  
  120.     --  Equivalent to somNew except that storage is not allocated.
  121.     --  <obj> is taken as the address of the new object.
  122.  
  123.     SOMObject*   somRenewNoInit(void* obj), descriptor = ::SOMClass::somRenewNoInit;
  124.  
  125.     --  Equivalent to somRenew except that somDefaultInit is not called.
  126.  
  127.     SOMObject*   somRenewNoZero(void* obj), descriptor = ::SOMClass::somRenewNoZero;
  128.  
  129.     --  Equivalent to somRenew except that memory is not zeroed out.
  130.  
  131.     SOMObject*   somRenewNoInitNoZero(void* obj), descriptor = ::SOMClass::somRenewNoInitNoZero;
  132.  
  133.     --  The purpose of this method is to load an object's method table.
  134.     --  The SOM API requires that somRenewNoInitNoZero always be
  135.     --  called when creating a new object whose metaclass is not SOMClass.
  136.     --  This is because metaclasses must be guaranteed that they can use
  137.     --  somRenewNoInitNoZero to track object creation if this is desired.
  138.  
  139.     somToken   somAllocate(long size), descriptor = ::SOMClass::somAllocate, nonstatic;
  140.  
  141.     --  Allocates memory to hold an object and returns a pointer to this memory.
  142.     --  This is a nonstatic method, and cannot be overridden. The default
  143.     --  implementation calls SOMMalloc, but a class designer can specify a
  144.     --  different implementation using the somallocate modifier in IDL. The
  145.     --  allocator takes the same parameters as this method.
  146.  
  147.     void   somDeallocate(somToken memptr), descriptor = ::SOMClass::somDeallocate, nonstatic;
  148.  
  149.     --  Zeros out the method table pointer stored in the word pointed to by
  150.     --  memptr, and then deallocates the block of memory pointed to by memptr.
  151.     --  This is a nonstatic method and cannot be overridden. The default
  152.     --  deallocator called is SOMFree, but a class designer can specify a
  153.     --  different deallocator using the somdeallocate modifier in IDL. The
  154.     --  deallocator takes a char* (memptr) and a long (size) as arguments.
  155.  
  156.     void   somInitClass(string className,
  157.         SOMClass* parentClass,
  158.         long dataSize,
  159.         long maxStaticMethods,
  160.         long majorVersion,
  161.         long minorVersion), descriptor = ::SOMClass::somInitClass;
  162.  
  163.     --  somInitClass is obsolete, and should no longer be used. The SOM 2.0
  164.     --  kernel provides special handling for redispatch stubs in the case
  165.     --  of SOM 1.0 classes, and use of this method is what tells the kernel
  166.     --  that old-style redispatch stubs will be registered.
  167.  
  168.     void   somInitMIClass(long inherit_vars,
  169.         string className,
  170.         SOMClass_SOMClassSequence* parentClasses,
  171.         long dataSize,
  172.         long dataAlignment,
  173.         long maxStaticMethods,
  174.         long majorVersion,
  175.         long minorVersion), descriptor = ::SOMClass::somInitMIClass, caller_owns_parameters = className, parentClasses;
  176.  
  177.     --  somInitMIClass implements the second phase of dynamic class creation:
  178.     --  inheritance of interface and possibly implementation (instance
  179.     --  variables) by suitable initialization of <self> (a class object).
  180.     -- 
  181.     --  For somInitMIClass, the inherit_vars argument controls whether abstract
  182.     --  or implementation inheritance is used. Inherit_vars is a 32 bit
  183.     --  bit-vector. Implementation is inherited from parent i iff the bit
  184.     --  1<<i is on, or i>=32.
  185.     --  On a class-by-class basis, for each class ancestor, implementation
  186.     --  inheritance always takes precidence over abstract inheritance. This is
  187.     --  necessary to guarantee that procedures supporting parent method calls
  188.     --  (available on non-abstract parents) are always supported by parent
  189.     --  instance variables.
  190.     -- 
  191.     --  <className> is a string containing the class name. A copy is made, so
  192.     --  the string may be freed upon return to the caller if this is desired.
  193.     -- 
  194.     --  <parentClasses> is a SOMClassSequence containing pointers to the
  195.     --  parent classes. somInitMIClass makes a copy of this, so it may
  196.     --  be freed upon return to the caller if this is desired.
  197.     -- 
  198.     --  <dataSize> is the space needed for the instance variables
  199.     --  introduced by this class.
  200.     -- 
  201.     --  <dataAlignment> specifies the desired byte alignment for instance
  202.     --  data introduced by this class. A value of 0 selects a system-wide default;
  203.     --  any other argument is taken as the desired byte alignment multiple. Thus,
  204.     --  for example, even if a byte multiple of 8 is needed for double precision
  205.     --  values on a given system (so 8 is the default), a class whose instance data
  206.     --  doesn't require this can indicate otherwise. If A is the next memory
  207.     --  address available for holding instance data, the address that will be
  208.     --  used is A + (A mod byte-alignment).
  209.     -- 
  210.     --  <maxStaticMethods> is the maximum number of static methods that will be
  211.     --  added to the initialized class using addStaticMethod.
  212.     -- 
  213.     --  <majorVersion> indicates the major version number for this
  214.     --  implementation of the class definition, and <minorVersion>
  215.     --  indicates the minor version number.
  216.  
  217.     somMToken   somAddStaticMethod(somId methodId,
  218.         somId methodDescriptor,
  219.         somMethodPtr method,
  220.         somMethodPtr redispatchStub,
  221.         somMethodPtr applyStub), descriptor = ::SOMClass::somAddStaticMethod, caller_owns_parameters = methodId;
  222.  
  223.     --  Adds the indicated method, creating and returning a new method token.
  224.     -- 
  225.     --  <methodDescriptor> is the somId for an identifier that can be used
  226.     --  to access signature information about the method from an interface
  227.     --  repository.
  228.     -- 
  229.     --  <method> is the actual method procedure for this method
  230.     -- 
  231.     --  <redispatchStub> is a procedure with the same calling sequence as
  232.     --  <method> that invokes somDispatch for the method.
  233.     -- 
  234.     --  <applyStub> is a procedure used to support somApply.
  235.  
  236.     void   somAddDynamicMethod(somId methodId,
  237.         somId methodDescriptor,
  238.         somMethodPtr method,
  239.         somMethodPtr applyStub), descriptor = ::SOMClass::somAddDynamicMethod, caller_owns_parameters = methodId;
  240.  
  241.     --  Adds the indicated method to the class's name lookup list.
  242.     --  If this happens to override a static method then this operation is
  243.     --  equivalent to <somOverrideSMethod> and the <methodDescriptor> and
  244.     --  <applyStub> arguments are ignored (the overridden method's values
  245.     --  will be used).
  246.     -- 
  247.     --  <methodDescriptor> is the somId for an identifier that can be used
  248.     --  to access signature information about the method from an interface
  249.     --  repository.
  250.     -- 
  251.     --  <method> is the actual method procedure for this method
  252.     -- 
  253.     --  <applyStub> is a procedure that takes a standard variable argument
  254.     --  list data structure applies it to its target object by calling
  255.     --  <method> with arguments derived from the data structure.  Its
  256.     --  calling sequence is the same as the calling sequence of the
  257.     --  dispatch methods defined in SOMObject.  This stub is used in the
  258.     --  support of the dispatch methods used in some classes.  In classes
  259.     --  where the dispatch functions do not need such a function this
  260.     --  parameter may be null.
  261.  
  262.     void   somOverrideSMethod(somId methodId,
  263.         somMethodPtr method), descriptor = ::SOMClass::somOverrideSMethod, caller_owns_parameters = methodId;
  264.  
  265.     --  This method can be used instead of <somAddStaticMethod> or
  266.     --  <somAddDynamicMethod> when it is known that the class' parent
  267.     --  class already supports this method.  This call does not require the
  268.     --  method descriptor and stub methods that the others do.
  269.  
  270.     void   somClassReady(), descriptor = ::SOMClass::somClassReady;
  271.  
  272.     --  This method is invoked when all of the static initialization for
  273.     --  the class has been finished.  The default implementation simply
  274.     --  registers the newly constructed class with the SOMClassMgr.
  275.  
  276.     somMethodPtr   somGetApplyStub(somId methodId), descriptor = ::SOMClass::somGetApplyStub, caller_owns_parameters = methodId;
  277.  
  278.     --  Returns the apply stub associated with the specified method,
  279.     --  if one exists; otherwise NULL is returned. This method is obsolete,
  280.     --  and retained for binary compatability. In SOMr2, users never access
  281.     --  apply stubs directly; The function somApply is used to invoke apply
  282.     --  stubs. See somApply documentation for further information on apply
  283.     --  stubs, and see somAddStaticMethod documentation for information
  284.     --  on how apply stubs are registered by class implementations.
  285.  
  286.     somClassDataStructure*   somGetClassData(), descriptor = ::SOMClass::somGetClassData;
  287.  
  288.     void   somSetClassData(somClassDataStructure* cds), descriptor = ::SOMClass::somSetClassData;
  289.  
  290.     --  The class' pointer to the static <className>ClassData structure.
  291.  
  292.     somMethodTab*   somGetClassMtab(), descriptor = ::SOMClass::somGetClassMtab;
  293.  
  294.     --  A pointer to the method table used by instances of this class. This
  295.     --  method was misnamed; it should have been called somGetInstanceMtab.
  296.  
  297.     long   somGetInstanceOffset(), descriptor = ::SOMClass::somGetInstanceOffset;
  298.  
  299.     --  Returns the offset of instance data introduced by the receiver in
  300.     --  an instance of the receiver. This method is obsolete and not useful in
  301.     --  multiple-inheritance situations. The attribute somInstanceDataOffsets
  302.     --  replaces this method.
  303.  
  304.     long   somGetInstancePartSize(), descriptor = ::SOMClass::somGetInstancePartSize;
  305.  
  306.     --  The size in bytes of the instance data introduced by the receiving
  307.     --  class.
  308.  
  309.     long   somGetInstanceSize(), descriptor = ::SOMClass::somGetInstanceSize;
  310.  
  311.     --  The total size of an instance of the receiving class.
  312.  
  313.     somDToken   somGetInstanceToken(), descriptor = ::SOMClass::somGetInstanceToken;
  314.  
  315.     --  A data token that identifies the introduced portion of this class
  316.     --  within itself or any derived class.  This token can be subsequently
  317.     --  passed to the run-time somDataResolve function to locate the instance
  318.     --  data introduced by this class in any object derived from this class.
  319.  
  320.     somDToken   somGetMemberToken(long memberOffset,
  321.         somDToken instanceToken), descriptor = ::SOMClass::somGetMemberToken, caller_owns_parameters = instanceToken, 
  322.     caller_owns_result;
  323.  
  324.     --  Returns a data token that for the data member at offset
  325.     --  "memberOffset" within the introduced portion of the class identified
  326.     --  by instanceToken.  The instance token must have been obtained from a
  327.     --  previous invocation of somGetInstanceToken.  The returned member
  328.     --  token can be subsequently passed to the run-time somDataResolve
  329.     --  function to locate the data member.
  330.  
  331.     boolean   somGetMethodData(somId methodId,
  332.         somMethodData* md), descriptor = ::SOMClass::somGetMethodData, caller_owns_parameters = methodId;
  333.  
  334.     --  If a method with id <methodId> is supported by the target class,
  335.     --  the structure pointed to by <md> is loaded with method information
  336.     --  and the value 1 is returned. In this case, if the method is not
  337.     --  dynamic, md->method is loaded with the result of somClassResolve on
  338.     --  the target class for the method. If the method is not supported,
  339.     --  md->id is loaded with 0, and the value 0 is returned.
  340.  
  341.     somMethodProc*   somGetRdStub(somId methodId), descriptor = ::SOMClass::somGetRdStub, caller_owns_parameters = methodId;
  342.  
  343.     --  Returns a redispatch stub for the indicated method, if possible.
  344.     --  If not possible (because a valid redispatch stub has not been
  345.     --  registered, and there is insufficient information to dynamically
  346.     --  construct one), then a NULL is returned.
  347.  
  348.     somId   somGetMethodDescriptor(somId methodId), descriptor = ::SOMClass::somGetMethodDescriptor, caller_owns_parameters = methodId;
  349.  
  350.     --  Returns the method descriptor for the indicated method.    If
  351.     --  this object does not support the indicated method then NULL is
  352.     --  returned.
  353.  
  354.     long   somGetMethodIndex(somId id), descriptor = ::SOMClass::somGetMethodIndex, caller_owns_parameters = id;
  355.  
  356.     --  Returns the index for the specified method. (A number that may
  357.     --  change if any methods are added or deleted to this class object or
  358.     --  any of its ancestors).  This number is the basis for other calls to
  359.     --  get info about the method. Indexes start at 0. A -1 is returned if
  360.     --  the method cannot be found.
  361.  
  362.     somMToken   somGetMethodToken(somId methodId), descriptor = ::SOMClass::somGetMethodToken, caller_owns_parameters = methodId;
  363.  
  364.     --  Returns the specified method's access token. This token can then
  365.     --  be passed to method resolution routines, which use the token
  366.     --  to select a method pointer from a method table.
  367.  
  368.     string   somGetName(), descriptor = ::SOMClass::somGetName;
  369.  
  370.     --  This object's class name as a NULL terminated string.
  371.  
  372.     boolean   somGetNthMethodData(long n,
  373.         somMethodData* md), descriptor = ::SOMClass::somGetNthMethodData;
  374.  
  375.     --  loads *md with the method data associated with the the nth method,
  376.     --  or NULL if there is no such method. Returns true is successful;
  377.     --  false otherwise.
  378.  
  379.     somId   somGetNthMethodInfo(long n,
  380.         somId* descriptor), descriptor = ::SOMClass::somGetNthMethodInfo;
  381.  
  382.     --  Returns the id of the <n>th method if one exists and NULL
  383.     --  otherwise.
  384.     -- 
  385.     --  The ordering of the methods is unpredictable, but will not change
  386.     --  unless some change is made to the class or one of its ancestor classes.
  387.     -- 
  388.     --  See CORBA documentation for info on method descriptors.
  389.  
  390.     long   somGetNumMethods(), descriptor = ::SOMClass::somGetNumMethods;
  391.  
  392.     --  The number of methods currently supported by this class,
  393.     --  including inherited methods (both static and dynamic).
  394.  
  395.     long   somGetNumStaticMethods(), descriptor = ::SOMClass::somGetNumStaticMethods;
  396.  
  397.     --  The number of static methods that this class has.  Can
  398.     --  be used by a child class when initializing its method table.
  399.  
  400.     SOMClass*   somGetParent(), descriptor = ::SOMClass::somGetParent;
  401.  
  402.     --  Returns the parent class of self (along its "left-hand" derivation
  403.     --  path), if one exists and NULL otherwise.
  404.  
  405.     SOMClass_SOMClassSequence   somGetParents(), descriptor = ::SOMClass::somGetParents, caller_owns_result;
  406.  
  407.     --  The parent classes of self.
  408.  
  409.     void   somGetVersionNumbers(long* majorVersion,
  410.         long* minorVersion), descriptor = ::SOMClass::somGetVersionNumbers;
  411.  
  412.     --  Returns the class' major and minor version numbers in the corresponding
  413.     --  output parameters.
  414.  
  415.     boolean   somFindMethod(somId methodId,
  416.         somMethodPtr* m), descriptor = ::SOMClass::somFindMethod, caller_owns_parameters = methodId;
  417.  
  418.     --  Finds the method procedure associated with <methodId> for this
  419.     --  class and sets <m> to it.  1 (true) is returned when the
  420.     --  method procedure is a static method and 0 (false) is returned
  421.     --  when the method procedure is dynamic method.
  422.     -- 
  423.     --  If the class does not support the specified method then
  424.     --  <m> is set to NULL and the return value is meaningless.
  425.     -- 
  426.  
  427.     boolean   somFindMethodOk(somId methodId,
  428.         somMethodPtr* m), descriptor = ::SOMClass::somFindMethodOk, caller_owns_parameters = methodId;
  429.  
  430.     --  Just like <somFindMethod> except that if the method is not
  431.     --  supported then an error is raised and execution is halted.
  432.  
  433.     somMethodPtr   somFindSMethod(somId methodId), descriptor = ::SOMClass::somFindSMethod, caller_owns_parameters = methodId;
  434.  
  435.     --  Finds the indicated method, which must be a static method supported
  436.     --  by this class, and returns a pointer to its method procedure.
  437.     --  If the method is not supported by the receiver (as a static method
  438.     --  or at all) then a NULL pointer is returned.
  439.  
  440.     somMethodPtr   somFindSMethodOk(somId methodId), descriptor = ::SOMClass::somFindSMethodOk, caller_owns_parameters = methodId;
  441.  
  442.     --  Uses <somFindSMethod>, and raises an error if the result is NULL.
  443.  
  444.     somMethodPtr   somLookupMethod(somId methodId), descriptor = ::SOMClass::somLookupMethod, caller_owns_parameters = methodId;
  445.  
  446.     --  Like <somFindSMethodOK>, but without restriction to static methods.
  447.  
  448.     boolean   somCheckVersion(long majorVersion,
  449.         long minorVersion), descriptor = ::SOMClass::somCheckVersion;
  450.  
  451.     --  Returns 1 (true) if the implementation of this class is
  452.     --  compatible with the specified major and minor version number and
  453.     --  false (0) otherwise.  An implementation is compatible with the
  454.     --  specified version numbers if it has the same major version number
  455.     --  and a minor version number that is equal to or greater than
  456.     --  <minorVersion>.    The major, minor version number pair (0,0) is
  457.     --  considered to match any version.  This method is usually called
  458.     --  immediately after creating the class object to verify that a
  459.     --  dynamically loaded class definition is compatible with a using
  460.     --  application.
  461.  
  462.     boolean   somDescendedFrom(SOMClass* aClassObj), descriptor = ::SOMClass::somDescendedFrom;
  463.  
  464.     --  Returns 1 (true) if <self> is a descendent class of <aClassObj> and
  465.     --  0 (false) otherwise.  Note: a class object is considered to be
  466.     --  descended itself for the purposes of this method.
  467.  
  468.     boolean   somSupportsMethod(somId mId), descriptor = ::SOMClass::somSupportsMethod, caller_owns_parameters = mId;
  469.  
  470.     --  Returns 1 (true) if the indicated method is supported by this
  471.     --  class and 0 (false) otherwise.
  472.  
  473.     somMethodPtr   somDefinedMethod(somMToken method), descriptor = ::SOMClass::somDefinedMethod, caller_owns_parameters = method;
  474.  
  475.     --  if the receiving class either introduces or overrides the
  476.     --  indicated method, then its somMethodPtr is returned, otherwise
  477.     --  NULL is returned.
  478.  
  479.     void   somOverrideMtab(), descriptor = ::SOMClass::somOverrideMtab;
  480.  
  481.     --  Overrides the method table pointers to point to the redispatch stubs.
  482.     --  All the methods except somDispatch methods are overriden.
  483.  
  484.