/[eiffelstudio]/vendor/gobosoft.com/gobo/4.0d/library/tools/src/eiffel/ast/type/et_formal_parameter_type.e
ViewVC logotype

Diff of /vendor/gobosoft.com/gobo/4.0d/library/tools/src/eiffel/ast/type/et_formal_parameter_type.e

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 98697 by manus, Sat May 7 16:18:26 2016 UTC revision 98698 by manus, Mon May 9 13:53:54 2016 UTC
# Line 24  inherit Line 24  inherit
24                          is_type_reference_with_type_mark,                          is_type_reference_with_type_mark,
25                          is_type_detachable_with_type_mark,                          is_type_detachable_with_type_mark,
26                          has_formal_types,                          has_formal_types,
                         same_syntactical_bit_type_with_type_marks,  
27                          same_syntactical_class_type_with_type_marks,                          same_syntactical_class_type_with_type_marks,
28                          same_syntactical_formal_parameter_type_with_type_marks,                          same_syntactical_formal_parameter_type_with_type_marks,
29                          same_syntactical_like_current_with_type_marks,                          same_syntactical_like_current_with_type_marks,
30                          same_syntactical_like_feature_with_type_marks,                          same_syntactical_like_feature_with_type_marks,
31                          same_syntactical_qualified_like_identifier_with_type_marks,                          same_syntactical_qualified_like_identifier_with_type_marks,
32                          same_syntactical_tuple_type_with_type_marks,                          same_syntactical_tuple_type_with_type_marks,
                         same_named_bit_type_with_type_marks,  
33                          same_named_class_type_with_type_marks,                          same_named_class_type_with_type_marks,
34                          same_named_formal_parameter_type_with_type_marks,                          same_named_formal_parameter_type_with_type_marks,
35                          same_named_tuple_type_with_type_marks,                          same_named_tuple_type_with_type_marks,
                         same_base_bit_type_with_type_marks,  
36                          same_base_class_type_with_type_marks,                          same_base_class_type_with_type_marks,
37                          same_base_formal_parameter_type_with_type_marks,                          same_base_formal_parameter_type_with_type_marks,
38                          same_base_tuple_type_with_type_marks,                          same_base_tuple_type_with_type_marks,
                         conforms_from_bit_type_with_type_marks,  
39                          conforms_from_class_type_with_type_marks,                          conforms_from_class_type_with_type_marks,
40                          conforms_from_formal_parameter_type_with_type_marks,                          conforms_from_formal_parameter_type_with_type_marks,
41                          conforms_from_tuple_type_with_type_marks,                          conforms_from_tuple_type_with_type_marks,
# Line 1268  feature -- Comparison Line 1264  feature -- Comparison
1264    
1265  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Comparison  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Comparison
1266    
         same_syntactical_bit_type_with_type_marks (other: ET_BIT_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN  
                         -- Are current type appearing in `a_context' and `other'  
                         -- type appearing in `other_context' the same type?  
                         -- (Note: We are NOT comparing the base types here!  
                         -- Therefore anchored types are considered the same  
                         -- only if they have the same anchor. An anchor type  
                         -- is not considered the same as any other type even  
                         -- if they have the same base type.)  
                         -- Note that the type mark status of `Current' and `other' is  
                         -- overridden by `a_type_mark' and `other_type_mark', if not Void  
                 local  
                         an_actual: ET_NAMED_TYPE  
                         l_context_base_class: ET_CLASS  
                         l_root_context: ET_NESTED_TYPE_CONTEXT  
                 do  
                         l_context_base_class := a_context.base_class  
                         if l_context_base_class /= implementation_class then  
                                 if attached l_context_base_class.ancestor (implementation_class) as l_ancestor and then attached l_ancestor.actual_parameters as l_actual_parameters and then index <= l_actual_parameters.count then  
                                         Result := l_actual_parameters.type (index).same_syntactical_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                 else  
                                                 -- Internal error: `l_context_base_class' is a descendant of `implementation_class'.  
                                                 -- So `l_ancestor' should not be Void. Furthermore `implementation_class' is the  
                                                 -- base class of `l_ancestor'. So there is a mismatch between the number of  
                                                 -- actual and formal generic parameters in `l_ancestor'.  
                                         Result := False  
                                 end  
                         elseif index <= a_context.base_type_actual_count then  
                                 an_actual := a_context.base_type_actual (index)  
                                 if attached {ET_FORMAL_PARAMETER_TYPE} an_actual then  
                                                 -- The actual parameter associated with current  
                                                 -- type is itself a formal generic parameter.  
                                         Result := False  
                                 else  
                                         if a_context.is_root_context then  
                                                 Result := an_actual.same_syntactical_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                         elseif a_context /= other_context then  
                                                 l_root_context := a_context.as_nested_type_context  
                                                 l_root_context.force_last (tokens.like_0)  
                                                 Result := an_actual.same_syntactical_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), l_root_context)  
                                                 l_root_context.remove_last  
                                         else  
                                                 Result := an_actual.same_syntactical_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context.root_context)  
                                         end  
                                 end  
                         else  
                                         -- Internal error: does current type really appear in `a_context'?  
                                 Result := False  
                         end  
                 end  
   
1267          same_syntactical_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN          same_syntactical_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN
1268                          -- Are current type appearing in `a_context' and `other'                          -- Are current type appearing in `a_context' and `other'
1269                          -- type appearing in `other_context' the same type?                          -- type appearing in `other_context' the same type?
# Line 1626  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Co Line 1572  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Co
1572                          end                          end
1573                  end                  end
1574    
         same_named_bit_type_with_type_marks (other: ET_BIT_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN  
                         -- Do current type appearing in `a_context' and `other' type  
                         -- appearing in `other_context' have the same named type?  
                         -- Note that the type mark status of `Current' and `other' is  
                         -- overridden by `a_type_mark' and `other_type_mark', if not Void  
                 local  
                         an_actual: ET_NAMED_TYPE  
                         l_context_base_class: ET_CLASS  
                         l_root_context: ET_NESTED_TYPE_CONTEXT  
                 do  
                         l_context_base_class := a_context.base_class  
                         if l_context_base_class /= implementation_class then  
                                 if attached l_context_base_class.ancestor (implementation_class) as l_ancestor and then attached l_ancestor.actual_parameters as l_actual_parameters and then index <= l_actual_parameters.count then  
                                         Result := l_actual_parameters.type (index).same_named_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                 else  
                                                 -- Internal error: `l_context_base_class' is a descendant of `implementation_class'.  
                                                 -- So `l_ancestor' should not be Void. Furthermore `implementation_class' is the  
                                                 -- base class of `l_ancestor'. So there is a mismatch between the number of  
                                                 -- actual and formal generic parameters in `l_ancestor'.  
                                         Result := False  
                                 end  
                         elseif index <= a_context.base_type_actual_count then  
                                 an_actual := a_context.base_type_actual (index)  
                                 if attached {ET_FORMAL_PARAMETER_TYPE} an_actual then  
                                                 -- The actual parameter associated with current  
                                                 -- type is itself a formal generic parameter.  
                                         Result := False  
                                 else  
                                         if a_context.is_root_context then  
                                                 Result := an_actual.same_named_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                         elseif a_context /= other_context then  
                                                 l_root_context := a_context.as_nested_type_context  
                                                 l_root_context.force_last (tokens.like_0)  
                                                 Result := an_actual.same_named_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), l_root_context)  
                                                 l_root_context.remove_last  
                                         else  
                                                 Result := an_actual.same_named_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context.root_context)  
                                         end  
                                 end  
                         else  
                                         -- Internal error: does current type really appear in `a_context'?  
                                 Result := False  
                         end  
                 end  
   
1575          same_named_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN          same_named_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN
1576                          -- Do current type appearing in `a_context' and `other' type                          -- Do current type appearing in `a_context' and `other' type
1577                          -- appearing in `other_context' have the same named type?                          -- appearing in `other_context' have the same named type?
# Line 1813  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Co Line 1714  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Co
1714                          end                          end
1715                  end                  end
1716    
         same_base_bit_type_with_type_marks (other: ET_BIT_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN  
                         -- Do current type appearing in `a_context' and `other' type  
                         -- appearing in `other_context' have the same base type?  
                         -- Note that the type mark status of `Current' and `other' is  
                         -- overridden by `a_type_mark' and `other_type_mark', if not Void  
                 local  
                         an_actual: ET_NAMED_TYPE  
                         l_context_base_class: ET_CLASS  
                         l_root_context: ET_NESTED_TYPE_CONTEXT  
                 do  
                         l_context_base_class := a_context.base_class  
                         if l_context_base_class /= implementation_class then  
                                 if attached l_context_base_class.ancestor (implementation_class) as l_ancestor and then attached l_ancestor.actual_parameters as l_actual_parameters and then index <= l_actual_parameters.count then  
                                         Result := l_actual_parameters.type (index).same_base_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                 else  
                                                 -- Internal error: `l_context_base_class' is a descendant of `implementation_class'.  
                                                 -- So `l_ancestor' should not be Void. Furthermore `implementation_class' is the  
                                                 -- base class of `l_ancestor'. So there is a mismatch between the number of  
                                                 -- actual and formal generic parameters in `l_ancestor'.  
                                         Result := False  
                                 end  
                         elseif index <= a_context.base_type_actual_count then  
                                 an_actual := a_context.base_type_actual (index)  
                                 if attached {ET_FORMAL_PARAMETER_TYPE} an_actual then  
                                                 -- The actual parameter associated with current  
                                                 -- type is itself a formal generic parameter.  
                                         Result := False  
                                 else  
                                         if a_context.is_root_context then  
                                                 Result := an_actual.same_base_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                         elseif a_context /= other_context then  
                                                 l_root_context := a_context.as_nested_type_context  
                                                 l_root_context.force_last (tokens.like_0)  
                                                 Result := an_actual.same_base_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), l_root_context)  
                                                 l_root_context.remove_last  
                                         else  
                                                 Result := an_actual.same_base_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context.root_context)  
                                         end  
                                 end  
                         else  
                                         -- Internal error: does current type really appear in `a_context'?  
                                 Result := False  
                         end  
                 end  
   
1717          same_base_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN          same_base_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN
1718                          -- Do current type appearing in `a_context' and `other' type                          -- Do current type appearing in `a_context' and `other' type
1719                          -- appearing in `other_context' have the same base type?                          -- appearing in `other_context' have the same base type?
# Line 2056  feature -- Conformance Line 1912  feature -- Conformance
1912    
1913  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Conformance  feature {ET_TYPE, ET_TYPE_CONTEXT} -- Conformance
1914    
         conforms_from_bit_type_with_type_marks (other: ET_BIT_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN  
                         -- Does `other' type appearing in `other_context' conform  
                         -- to current type appearing in `a_context'?  
                         -- Note that the type mark status of `Current' and `other' is  
                         -- overridden by `a_type_mark' and `other_type_mark', if not Void  
                         -- (Note: 'current_system.ancestor_builder' is used on the classes  
                         -- whose ancestors need to be built in order to check for conformance.)  
                 local  
                         an_actual: ET_NAMED_TYPE  
                         l_context_base_class: ET_CLASS  
                         l_root_context: ET_NESTED_TYPE_CONTEXT  
                 do  
                         l_context_base_class := a_context.base_class  
                         if l_context_base_class /= implementation_class then  
                                 if attached l_context_base_class.ancestor (implementation_class) as l_ancestor and then attached l_ancestor.actual_parameters as l_actual_parameters and then index <= l_actual_parameters.count then  
                                         Result := l_actual_parameters.type (index).conforms_from_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                 else  
                                                 -- Internal error: `l_context_base_class' is a descendant of `implementation_class'.  
                                                 -- So `l_ancestor' should not be Void. Furthermore `implementation_class' is the  
                                                 -- base class of `l_ancestor'. So there is a mismatch between the number of  
                                                 -- actual and formal generic parameters in `l_ancestor'.  
                                         Result := False  
                                 end  
                         elseif index <= a_context.base_type_actual_count then  
                                 an_actual := a_context.base_type_actual (index)  
                                 if attached {ET_FORMAL_PARAMETER_TYPE} an_actual then  
                                                 -- The actual parameter associated with current  
                                                 -- type is itself a formal generic parameter.  
                                                 -- No type other than itself conforms to a formal generic type.  
                                         Result := False  
                                 else  
                                         if a_context.is_root_context then  
                                                 Result := an_actual.conforms_from_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context)  
                                         elseif a_context /= other_context then  
                                                 l_root_context := a_context.as_nested_type_context  
                                                 l_root_context.force_last (tokens.like_0)  
                                                 Result := an_actual.conforms_from_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), l_root_context)  
                                                 l_root_context.remove_last  
                                         else  
                                                 Result := an_actual.conforms_from_bit_type_with_type_marks (other, other_type_mark, other_context, overridden_type_mark (a_type_mark), a_context.root_context)  
                                         end  
                                 end  
                         else  
                                         -- Internal error: does current type really appear in `a_context'?  
                                 Result := False  
                         end  
                 end  
   
1915          conforms_from_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN          conforms_from_class_type_with_type_marks (other: ET_CLASS_TYPE; other_type_mark: detachable ET_TYPE_MARK; other_context: ET_TYPE_CONTEXT; a_type_mark: detachable ET_TYPE_MARK; a_context: ET_TYPE_CONTEXT): BOOLEAN
1916                          -- Does `other' type appearing in `other_context' conform                          -- Does `other' type appearing in `other_context' conform
1917                          -- to current type appearing in `a_context'?                          -- to current type appearing in `a_context'?

Legend:
Removed from v.98697  
changed lines
  Added in v.98698

  ViewVC Help
Powered by ViewVC 1.1.23