/[eiffelstudio]/branches/eth/eve/Src/Eiffel/API/evaluated_type/like_current.e
ViewVC logotype

Diff of /branches/eth/eve/Src/Eiffel/API/evaluated_type/like_current.e

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

revision 55790 by manus, Tue Apr 19 04:53:21 2005 UTC revision 55791 by alexk, Fri Nov 18 08:31:20 2005 UTC
# Line 9  class Line 9  class
9  inherit  inherit
10          LIKE_TYPE_A          LIKE_TYPE_A
11                  redefine                  redefine
12                          has_associated_class, is_like_current, instantiated_in                          actual_type, associated_class, conform_to, conformance_type, convert_to,
13                            generics, has_associated_class, instantiated_in,
14                            is_basic, is_expanded, is_like_current, is_none, is_reference,
15                            meta_type, set_actual_type, type_i
16                  end                  end
17    
18  feature -- Properties  feature -- Properties
19    
20            actual_type: LIKE_CURRENT
21                            -- Actual type of the anchored type in a given class
22    
23            conformance_type: TYPE_A
24                            -- Type of the anchored type as specified in `set_actual_type'
25    
26          is_like_current: BOOLEAN is True          is_like_current: BOOLEAN is True
27                          -- Is the current type an anchored type on Current ?                          -- Is the current type an anchored type on Current ?
28    
29            is_expanded: BOOLEAN is False
30                            -- Is type expanded?
31    
32            is_reference: BOOLEAN is False
33                            -- Is type reference?
34    
35            is_none: BOOLEAN is False
36                            -- Is current actual type NONE?
37    
38            is_basic: BOOLEAN is False
39                            -- Is the current actual type a basic one?
40    
41  feature -- Access  feature -- Access
42    
43          same_as (other: TYPE_A): BOOLEAN is          same_as (other: TYPE_A): BOOLEAN is
# Line 28  feature -- Access Line 49  feature -- Access
49          has_associated_class: BOOLEAN is          has_associated_class: BOOLEAN is
50                          -- Does Current have an associated class?                          -- Does Current have an associated class?
51                  do                  do
52                          Result := actual_type /= Void                          Result :=
53                                    conformance_type /= Void and then
54                                    conformance_type.has_associated_class
55                    end
56    
57            associated_class: CLASS_C is
58                            -- Associated class
59                    do
60                            Result := conformance_type.associated_class
61                    end
62    
63            generics: ARRAY [TYPE_A] is
64                            -- Actual generic types
65                    do
66                            if conformance_type /= Void then
67                                    Result := conformance_type.generics
68                            end
69                  end                  end
70    
71  feature -- Comparison  feature -- Comparison
# Line 36  feature -- Comparison Line 73  feature -- Comparison
73          is_equivalent (other: like Current): BOOLEAN is          is_equivalent (other: like Current): BOOLEAN is
74                          -- Is `other' equivalent to the current object ?                          -- Is `other' equivalent to the current object ?
75                  do                  do
76                          Result := equivalent (actual_type, other.actual_type)                          Result := same_as (other)
77                  end                  end
78    
79  feature -- Output  feature -- Output
# Line 46  feature -- Output Line 83  feature -- Output
83                  local                  local
84                          actual_dump: STRING                          actual_dump: STRING
85                  do                  do
86                          actual_dump := actual_type.dump                          actual_dump := conformance_type.dump
87                          create Result.make (15 + actual_dump.count)                          create Result.make (15 + actual_dump.count)
88                          Result.append ("[like Current] ")                          Result.append ("[like Current] ")
89                          Result.append (actual_dump)                          Result.append (actual_dump)
# Line 60  feature -- Output Line 97  feature -- Output
97                          st.add (ti_Current)                          st.add (ti_Current)
98                          st.add (ti_R_bracket)                          st.add (ti_R_bracket)
99                          st.add_space                          st.add_space
100                          actual_type.ext_append_to (st, f)                          conformance_type.ext_append_to (st, f)
101                  end                  end
102    
103  feature {COMPILER_EXPORTER} -- Primitives  feature {COMPILER_EXPORTER} -- Primitives
104    
105            set_actual_type (a: TYPE_A) is
106                            -- Assign `a' to `original_actual_type'.
107                    do
108                            conformance_type := a
109                            actual_type := Current
110                    end
111    
112          solved_type (feat_table: FEATURE_TABLE; f: FEATURE_I): LIKE_CURRENT is          solved_type (feat_table: FEATURE_TABLE; f: FEATURE_I): LIKE_CURRENT is
113                          -- Calculated type in function of the feature `f' which has                          -- Calculated type in function of the feature `f' which has
114                          -- the type Current and the feautre table `feat_table'                          -- the type Current and the feautre table `feat_table'
# Line 73  feature {COMPILER_EXPORTER} -- Primitive Line 117  feature {COMPILER_EXPORTER} -- Primitive
117                          Result.set_actual_type (feat_table.associated_class.actual_type)                          Result.set_actual_type (feat_table.associated_class.actual_type)
118                  end                  end
119    
120          instantiation_in (type: TYPE_A; written_id: INTEGER): LIKE_CURRENT is          instantiation_in (type: TYPE_A; written_id: INTEGER): TYPE_A is
121                          -- Instantiation of Current in the context of `class_type',                          -- Instantiation of Current in the context of `class_type',
122                          -- assuming that Current is written in class of id `written_id'.                          -- assuming that Current is written in class of id `written_id'.
123                  do                  do
                         create Result  
124                                  -- Special cases for calls on a target which is a manifest integer                                  -- Special cases for calls on a target which is a manifest integer
125                                  -- that might be compatible with _8 or _16. The returned                                  -- that might be compatible with _8 or _16. The returned
126                                  -- `actual_type' should not take into consideration the                                  -- `actual_type' should not take into consideration the
# Line 95  feature {COMPILER_EXPORTER} -- Primitive Line 138  feature {COMPILER_EXPORTER} -- Primitive
138                                  -- i16 := (0x00FF).to_integer_16 & i8                                  -- i16 := (0x00FF).to_integer_16 & i8
139                                  -- or                                  -- or
140                                  -- i16 := (0x00FF & i8).to_integer_16                                  -- i16 := (0x00FF & i8).to_integer_16
141                          Result.set_actual_type (type.intrinsic_type)                          Result := type.intrinsic_type
142                  end                  end
143    
144          instantiated_in (class_type: CL_TYPE_A): like Current is          instantiated_in (class_type: TYPE_A): TYPE_A is
145                          -- Instantiation of Current in the context of `class_type'                          -- Instantiation of Current in the context of `class_type'
146                          -- assuming that Current is written in the associated class                          -- assuming that Current is written in the associated class
147                          -- of `class_type'.                          -- of `class_type'.
148                  do                  do
149                          create Result                          Result := class_type
                         Result.set_actual_type (class_type)  
150                  end                  end
151    
152          create_info: CREATE_CURRENT is          create_info: CREATE_CURRENT is
# Line 113  feature {COMPILER_EXPORTER} -- Primitive Line 155  feature {COMPILER_EXPORTER} -- Primitive
155                          create Result                          create Result
156                  end                  end
157    
158  end -- class LIKE_CURRENT          conform_to (other: TYPE_A): BOOLEAN is
159                            -- Does `Current' conform to `other'?
160                    do
161                            Result := other.is_like_current or else conformance_type.conform_to (other.conformance_type)
162                    end
163    
164            convert_to (a_context_class: CLASS_C; a_target_type: TYPE_A): BOOLEAN is
165                            -- Does current convert to `a_target_type' in `a_context_class'?
166                            -- Update `last_conversion_info' of AST_CONTEXT.
167                    do
168                            Result := conformance_type.convert_to (a_context_class, a_target_type)
169                    end
170    
171            type_i: TYPE_I is
172                            -- C type.
173                    local
174                            cl_type : CL_TYPE_I
175                    do
176                            Result := conformance_type.type_i
177                            cl_type ?= Result
178    
179                            if cl_type /= Void and then not cl_type.is_expanded then
180                                            -- Remember that it's an anchored type, not needed
181                                            -- when handling expanded types.
182                                    cl_type.set_cr_info (create_info)
183                            end
184                    end
185    
186            meta_type: TYPE_I is
187                            -- Meta type.
188                    do
189                            Result := conformance_type.meta_type
190                    end
191    
192    end

Legend:
Removed from v.55790  
changed lines
  Added in v.55791

  ViewVC Help
Powered by ViewVC 1.1.23