/[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 76431 by manus, Tue Dec 9 20:24:44 2008 UTC revision 76432 by manus, Mon Dec 29 23:41:59 2008 UTC
# Line 1  Line 1 
1  indexing  note
2          description:"Actual type like Current."          description:"Actual type like Current."
3          legal: "See notice at end of class."          legal: "See notice at end of class."
4          status: "See notice at end of class."          status: "See notice at end of class."
# Line 28  inherit Line 28  inherit
28    
29  feature -- Visitor  feature -- Visitor
30    
31          process (v: TYPE_A_VISITOR) is          process (v: TYPE_A_VISITOR)
32                          -- Process current element.                          -- Process current element.
33                  do                  do
34                          v.process_like_current (Current)                          v.process_like_current (Current)
# Line 39  feature -- Properties Line 39  feature -- Properties
39          actual_type: LIKE_CURRENT          actual_type: LIKE_CURRENT
40                          -- Actual type of the anchored type in a given class                          -- Actual type of the anchored type in a given class
41    
42          deep_actual_type: TYPE_A is          deep_actual_type: TYPE_A
43                          -- <Precursor>                          -- <Precursor>
44                  do                  do
45                          Result := conformance_type.deep_actual_type                          Result := conformance_type.deep_actual_type
46                  end                  end
47    
48          context_free_type: like Current is          context_free_type: like Current
49                          -- <Precursor>                          -- <Precursor>
50                  do                  do
51                          create Result                          create Result
# Line 55  feature -- Properties Line 55  feature -- Properties
55          conformance_type: TYPE_A          conformance_type: TYPE_A
56                          -- Type of the anchored type as specified in `set_actual_type'                          -- Type of the anchored type as specified in `set_actual_type'
57    
58          has_associated_class: BOOLEAN is          has_associated_class: BOOLEAN
59                          -- Does Current have an associated class?                          -- Does Current have an associated class?
60                  do                  do
61                          Result := conformance_type /= Void and then conformance_type.has_associated_class                          Result := conformance_type /= Void and then conformance_type.has_associated_class
62                  end                  end
63    
64          has_associated_class_type (a_context_type: TYPE_A): BOOLEAN is          has_associated_class_type (a_context_type: TYPE_A): BOOLEAN
65                          -- Does Current have an associated class?                          -- Does Current have an associated class?
66                  do                  do
67                          Result := conformance_type /= Void and then conformance_type.has_associated_class_type (a_context_type)                          Result := conformance_type /= Void and then conformance_type.has_associated_class_type (a_context_type)
68                  end                  end
69    
70          is_class_valid: BOOLEAN is          is_class_valid: BOOLEAN
71                  do                  do
72                          Result := conformance_type /= Void and then conformance_type.is_class_valid                          Result := conformance_type /= Void and then conformance_type.is_class_valid
73                  end                  end
74    
75          has_like_current, is_like_current: BOOLEAN is True          has_like_current, is_like_current: BOOLEAN = True
76                          -- Is the current type an anchored type on Current ?                          -- Is the current type an anchored type on Current ?
77    
78          is_explicit: BOOLEAN is False          is_explicit: BOOLEAN = False
79                          -- Is type fixed at compile time without anchors or formals?                          -- Is type fixed at compile time without anchors or formals?
80                          --| Ideally, it is explicit if at runtime there is no descendants and                          --| Ideally, it is explicit if at runtime there is no descendants and
81                          --| that conformance_type is also explicit (to prevent case                          --| that conformance_type is also explicit (to prevent case
# Line 87  feature -- Properties Line 87  feature -- Properties
87                          --| generating `dftype' instead which cannot be used in static array                          --| generating `dftype' instead which cannot be used in static array
88                          --| type initialization.                          --| type initialization.
89    
90          is_expanded: BOOLEAN is          is_expanded: BOOLEAN
91                          -- Is type expanded?                          -- Is type expanded?
92                  do                  do
93                          if conformance_type /= Void then                          if conformance_type /= Void then
# Line 95  feature -- Properties Line 95  feature -- Properties
95                          end                          end
96                  end                  end
97    
98          is_reference: BOOLEAN is          is_reference: BOOLEAN
99                          -- Is type reference?                          -- Is type reference?
100                  do                  do
101                          if conformance_type /= Void then                          if conformance_type /= Void then
# Line 103  feature -- Properties Line 103  feature -- Properties
103                          end                          end
104                  end                  end
105    
106          is_tuple: BOOLEAN is          is_tuple: BOOLEAN
107                          -- Is type reference?                          -- Is type reference?
108                  do                  do
109                          if conformance_type /= Void then                          if conformance_type /= Void then
# Line 111  feature -- Properties Line 111  feature -- Properties
111                          end                          end
112                  end                  end
113    
114          is_external: BOOLEAN is False          is_external: BOOLEAN = False
115                          -- Is type external?                          -- Is type external?
116    
117          is_none: BOOLEAN is False          is_none: BOOLEAN = False
118                          -- Is current actual type NONE?                          -- Is current actual type NONE?
119    
120          is_type_set: BOOLEAN is          is_type_set: BOOLEAN
121                          -- <Precursor>                          -- <Precursor>
122                  do                  do
123                          Result := conformance_type /= Void and then conformance_type.is_type_set                          Result := conformance_type /= Void and then conformance_type.is_type_set
124                  end                  end
125    
126          is_basic: BOOLEAN is          is_basic: BOOLEAN
127                          -- Is the current actual type a basic one?                          -- Is the current actual type a basic one?
128                  do                  do
129                          if conformance_type /= Void then                          if conformance_type /= Void then
# Line 131  feature -- Properties Line 131  feature -- Properties
131                          end                          end
132                  end                  end
133    
134          same_as (other: TYPE_A): BOOLEAN is          same_as (other: TYPE_A): BOOLEAN
135                          -- Is the current type the same as `other' ?                          -- Is the current type the same as `other' ?
136                  local                  local
137                          l: LIKE_CURRENT                          l: LIKE_CURRENT
# Line 142  feature -- Properties Line 142  feature -- Properties
142                          end                          end
143                  end                  end
144    
145          good_generics: BOOLEAN is True          good_generics: BOOLEAN = True
146                          --| A current type always has the right number of generic parameter.                          --| A current type always has the right number of generic parameter.
147    
148  feature -- Access  feature -- Access
149    
150          hash_code: INTEGER is          hash_code: INTEGER
151                  do                  do
152                          Result := {SHARED_HASH_CODE}.other_code                          Result := {SHARED_HASH_CODE}.other_code
153                  end                  end
154    
155          associated_class: CLASS_C is          associated_class: CLASS_C
156                          -- Associated class                          -- Associated class
157                  do                  do
158                          Result := conformance_type.associated_class                          Result := conformance_type.associated_class
159                  end                  end
160    
161          associated_class_type (a_context_type: TYPE_A): CLASS_TYPE is          associated_class_type (a_context_type: TYPE_A): CLASS_TYPE
162                          -- Associated class                          -- Associated class
163                  do                  do
164                          Result := conformance_type.associated_class_type (a_context_type)                          Result := conformance_type.associated_class_type (a_context_type)
165                  end                  end
166    
167          generics: ARRAY [TYPE_A] is          generics: ARRAY [TYPE_A]
168                          -- Actual generic types                          -- Actual generic types
169                  do                  do
170                          if conformance_type /= Void then                          if conformance_type /= Void then
# Line 172  feature -- Access Line 172  feature -- Access
172                          end                          end
173                  end                  end
174    
175          description: GENERIC_DESC is          description: GENERIC_DESC
176                  do                  do
177                          create Result                          create Result
178                          Result.set_type_i (Current)                          Result.set_type_i (Current)
179                  end                  end
180    
181          c_type: TYPE_C is          c_type: TYPE_C
182                  do                  do
183                          if conformance_type /= Void then                          if conformance_type /= Void then
184                                  Result := conformance_type.c_type                                  Result := conformance_type.c_type
# Line 189  feature -- Access Line 189  feature -- Access
189    
190  feature -- Comparison  feature -- Comparison
191    
192          is_equivalent (other: like Current): BOOLEAN is          is_equivalent (other: like Current): BOOLEAN
193                          -- Is `other' equivalent to the current object ?                          -- Is `other' equivalent to the current object ?
194                  do                  do
195                          Result := same_as (other)                          Result := same_as (other)
# Line 197  feature -- Comparison Line 197  feature -- Comparison
197    
198  feature -- Output  feature -- Output
199    
200          dump: STRING is          dump: STRING
201                          -- Dumped trace                          -- Dumped trace
202                  local                  local
203                          actual_dump: STRING                          actual_dump: STRING
# Line 214  feature -- Output Line 214  feature -- Output
214                          Result.append (actual_dump)                          Result.append (actual_dump)
215                  end                  end
216    
217          ext_append_to (st: TEXT_FORMATTER; c: CLASS_C) is          ext_append_to (st: TEXT_FORMATTER; c: CLASS_C)
218                  do                  do
219                          st.process_symbol_text ({SHARED_TEXT_ITEMS}.ti_L_bracket)                          st.process_symbol_text ({SHARED_TEXT_ITEMS}.ti_L_bracket)
220                          if has_attached_mark then                          if has_attached_mark then
# Line 232  feature -- Output Line 232  feature -- Output
232    
233  feature -- IL code generation  feature -- IL code generation
234    
235          minimum_interval_value: INTERVAL_VAL_B is          minimum_interval_value: INTERVAL_VAL_B
236                  require else                  require else
237                          valid_type: conformance_type.is_integer or conformance_type.is_natural or conformance_type.is_character                          valid_type: conformance_type.is_integer or conformance_type.is_natural or conformance_type.is_character
238                  do                  do
239                          Result := conformance_type.minimum_interval_value                          Result := conformance_type.minimum_interval_value
240                  end                  end
241    
242          maximum_interval_value: INTERVAL_VAL_B is          maximum_interval_value: INTERVAL_VAL_B
243                  require else                  require else
244                          valid_type: conformance_type.is_integer or conformance_type.is_natural or conformance_type.is_character                          valid_type: conformance_type.is_integer or conformance_type.is_natural or conformance_type.is_character
245                  do                  do
# Line 251  feature -- IL code generation Line 251  feature -- IL code generation
251                          Result := conformance_type.heaviest (other)                          Result := conformance_type.heaviest (other)
252                  end                  end
253    
254          is_optimized_as_frozen: BOOLEAN is          is_optimized_as_frozen: BOOLEAN
255                  do                  do
256                          Result := conformance_type.is_optimized_as_frozen                          Result := conformance_type.is_optimized_as_frozen
257                  end                  end
258    
259          is_generated_as_single_type: BOOLEAN is          is_generated_as_single_type: BOOLEAN
260                          -- Is associated type generated as a single type or as an interface type and                          -- Is associated type generated as a single type or as an interface type and
261                          -- an implementation type.                          -- an implementation type.
262                  do                  do
# Line 265  feature -- IL code generation Line 265  feature -- IL code generation
265    
266  feature -- Generic conformance  feature -- Generic conformance
267    
268          generated_id (final_mode: BOOLEAN; a_context_type: TYPE_A): NATURAL_16 is          generated_id (final_mode: BOOLEAN; a_context_type: TYPE_A): NATURAL_16
269                          -- Id of a `like xxx'.                          -- Id of a `like xxx'.
270                  do                  do
271                          Result := {SHARED_GEN_CONF_LEVEL}.like_current_type                          Result := {SHARED_GEN_CONF_LEVEL}.like_current_type
272                  end                  end
273    
274          generate_cid (buffer: GENERATION_BUFFER; final_mode, use_info: BOOLEAN; a_context_type: TYPE_A) is          generate_cid (buffer: GENERATION_BUFFER; final_mode, use_info: BOOLEAN; a_context_type: TYPE_A)
275                          -- Generate mode dependent sequence of type id's                          -- Generate mode dependent sequence of type id's
276                          -- separated by commas. `use_info' is true iff                          -- separated by commas. `use_info' is true iff
277                          -- we generate code for a creation instruction.                          -- we generate code for a creation instruction.
# Line 283  feature -- Generic conformance Line 283  feature -- Generic conformance
283                          end                          end
284                  end                  end
285    
286          generate_cid_array (buffer: GENERATION_BUFFER; final_mode, use_info: BOOLEAN; idx_cnt: COUNTER; a_context_type: TYPE_A) is          generate_cid_array (buffer: GENERATION_BUFFER; final_mode, use_info: BOOLEAN; idx_cnt: COUNTER; a_context_type: TYPE_A)
287                  do                  do
288                          if use_info then                          if use_info then
289                                  create_info.generate_cid_array (buffer, final_mode, idx_cnt)                                  create_info.generate_cid_array (buffer, final_mode, idx_cnt)
# Line 292  feature -- Generic conformance Line 292  feature -- Generic conformance
292                          end                          end
293                  end                  end
294    
295          generate_cid_init (buffer: GENERATION_BUFFER; final_mode, use_info: BOOLEAN; idx_cnt: COUNTER; a_level: NATURAL) is          generate_cid_init (buffer: GENERATION_BUFFER; final_mode, use_info: BOOLEAN; idx_cnt: COUNTER; a_level: NATURAL)
296                  do                  do
297                          if use_info then                          if use_info then
298                                  create_info.generate_cid_init (buffer, final_mode, idx_cnt, a_level)                                  create_info.generate_cid_init (buffer, final_mode, idx_cnt, a_level)
# Line 301  feature -- Generic conformance Line 301  feature -- Generic conformance
301                          end                          end
302                  end                  end
303    
304          make_type_byte_code (ba: BYTE_ARRAY; use_info: BOOLEAN; a_context_type: TYPE_A) is          make_type_byte_code (ba: BYTE_ARRAY; use_info: BOOLEAN; a_context_type: TYPE_A)
305                  do                  do
306                          if use_info then                          if use_info then
307                                  create_info.make_type_byte_code (ba)                                  create_info.make_type_byte_code (ba)
# Line 310  feature -- Generic conformance Line 310  feature -- Generic conformance
310                          end                          end
311                  end                  end
312    
313          generate_gen_type_il (il_generator: IL_CODE_GENERATOR; use_info: BOOLEAN) is          generate_gen_type_il (il_generator: IL_CODE_GENERATOR; use_info: BOOLEAN)
314                          -- `use_info' is true iff we generate code for a                          -- `use_info' is true iff we generate code for a
315                          -- creation instruction.                          -- creation instruction.
316                  do                  do
# Line 320  feature -- Generic conformance Line 320  feature -- Generic conformance
320    
321  feature {TYPE_A} -- Helpers  feature {TYPE_A} -- Helpers
322    
323          internal_is_valid_for_class (a_class: CLASS_C): BOOLEAN is          internal_is_valid_for_class (a_class: CLASS_C): BOOLEAN
324                          -- Is current type valid?                          -- Is current type valid?
325                  do                  do
326                                  -- If no `conformance_type' is specified, then `like Current' makes sense.                                  -- If no `conformance_type' is specified, then `like Current' makes sense.
# Line 328  feature {TYPE_A} -- Helpers Line 328  feature {TYPE_A} -- Helpers
328                          Result := conformance_type = Void or else conformance_type.internal_is_valid_for_class (a_class)                          Result := conformance_type = Void or else conformance_type.internal_is_valid_for_class (a_class)
329                  end                  end
330    
331          internal_generic_derivation (a_level: INTEGER_32): TYPE_A is          internal_generic_derivation (a_level: INTEGER_32): TYPE_A
332                  do                  do
333                                  -- We keep the same level since we are merely forwarding the call.                                  -- We keep the same level since we are merely forwarding the call.
334                          Result := conformance_type.internal_generic_derivation (a_level)                          Result := conformance_type.internal_generic_derivation (a_level)
335                  end                  end
336    
337          internal_same_generic_derivation_as (current_type, other: TYPE_A; a_level: INTEGER_32): BOOLEAN is          internal_same_generic_derivation_as (current_type, other: TYPE_A; a_level: INTEGER_32): BOOLEAN
338                  do                  do
339                                  -- We keep the same level since we are merely forwarding the call.                                  -- We keep the same level since we are merely forwarding the call.
340                          Result := conformance_type.internal_same_generic_derivation_as (current_type, other, a_level)                          Result := conformance_type.internal_same_generic_derivation_as (current_type, other, a_level)
# Line 342  feature {TYPE_A} -- Helpers Line 342  feature {TYPE_A} -- Helpers
342    
343  feature {COMPILER_EXPORTER} -- Modification  feature {COMPILER_EXPORTER} -- Modification
344    
345          set_actual_type (a: TYPE_A) is          set_actual_type (a: TYPE_A)
346                          -- Assign `a' to `conformance_type'.                          -- Assign `a' to `conformance_type'.
347                  do                  do
348                          conformance_type := a.to_other_immediate_attachment (Current)                          conformance_type := a.to_other_immediate_attachment (Current)
349                          actual_type := Current                          actual_type := Current
350                  end                  end
351    
352          set_attached_mark is          set_attached_mark
353                          -- Mark type declaration as having an explicit attached mark.                          -- Mark type declaration as having an explicit attached mark.
354                  do                  do
355                          Precursor                          Precursor
356                          conformance_type := conformance_type.to_other_immediate_attachment (Current)                          conformance_type := conformance_type.to_other_immediate_attachment (Current)
357                  end                  end
358    
359          set_detachable_mark is          set_detachable_mark
360                          -- Set class type declaration as having an explicit detachable mark.                          -- Set class type declaration as having an explicit detachable mark.
361                  do                  do
362                          Precursor                          Precursor
# Line 398  feature {COMPILER_EXPORTER} -- Duplicati Line 398  feature {COMPILER_EXPORTER} -- Duplicati
398    
399  feature {COMPILER_EXPORTER} -- Primitives  feature {COMPILER_EXPORTER} -- Primitives
400    
401          instantiation_in (type: TYPE_A; written_id: INTEGER): TYPE_A is          instantiation_in (type: TYPE_A; written_id: INTEGER): TYPE_A
402                          -- Instantiation of Current in the context of `class_type',                          -- Instantiation of Current in the context of `class_type',
403                          -- assuming that Current is written in class of id `written_id'.                          -- assuming that Current is written in class of id `written_id'.
404                  do                  do
# Line 422  feature {COMPILER_EXPORTER} -- Primitive Line 422  feature {COMPILER_EXPORTER} -- Primitive
422                          Result := type.intrinsic_type.to_other_attachment (Current)                          Result := type.intrinsic_type.to_other_attachment (Current)
423                  end                  end
424    
425          adapted_in, skeleton_adapted_in (a_class_type: CLASS_TYPE): CL_TYPE_A is          adapted_in, skeleton_adapted_in (a_class_type: CLASS_TYPE): CL_TYPE_A
426                          -- Instantiation of Current in context of `other'.                          -- Instantiation of Current in context of `other'.
427                  do                  do
428                          Result := a_class_type.type                          Result := a_class_type.type
429                  end                  end
430    
431          instantiated_in (class_type: TYPE_A): TYPE_A is          instantiated_in (class_type: TYPE_A): TYPE_A
432                          -- Instantiation of Current in the context of `class_type'                          -- Instantiation of Current in the context of `class_type'
433                          -- assuming that Current is written in the associated class                          -- assuming that Current is written in the associated class
434                          -- of `class_type'.                          -- of `class_type'.
# Line 447  feature {COMPILER_EXPORTER} -- Primitive Line 447  feature {COMPILER_EXPORTER} -- Primitive
447                          Result := Result.to_other_attachment (Current)                          Result := Result.to_other_attachment (Current)
448                  end                  end
449    
450          evaluated_type_in_descendant (a_ancestor, a_descendant: CLASS_C; a_feature: FEATURE_I): LIKE_CURRENT is          evaluated_type_in_descendant (a_ancestor, a_descendant: CLASS_C; a_feature: FEATURE_I): LIKE_CURRENT
451                  do                  do
452                          if a_ancestor /= a_descendant then                          if a_ancestor /= a_descendant then
453                                  create Result                                  create Result
# Line 458  feature {COMPILER_EXPORTER} -- Primitive Line 458  feature {COMPILER_EXPORTER} -- Primitive
458                          end                          end
459                  end                  end
460    
461          create_info, shared_create_info: CREATE_CURRENT is          create_info, shared_create_info: CREATE_CURRENT
462                          -- Byte code information for entity type creation                          -- Byte code information for entity type creation
463                  once                  once
464                          create Result                          create Result
465                  end                  end
466    
467          conform_to (a_context_class: CLASS_C; other: TYPE_A): BOOLEAN is          conform_to (a_context_class: CLASS_C; other: TYPE_A): BOOLEAN
468                          -- Does `Current' conform to `other'?                          -- Does `Current' conform to `other'?
469                  do                  do
470                          Result := other.is_like_current or else conformance_type.conform_to (a_context_class, other.conformance_type)                          Result := other.is_like_current or else conformance_type.conform_to (a_context_class, other.conformance_type)
471                  end                  end
472    
473          convert_to (a_context_class: CLASS_C; a_target_type: TYPE_A): BOOLEAN is          convert_to (a_context_class: CLASS_C; a_target_type: TYPE_A): BOOLEAN
474                          -- Does current convert to `a_target_type' in `a_context_class'?                          -- Does current convert to `a_target_type' in `a_context_class'?
475                          -- Update `last_conversion_info' of AST_CONTEXT.                          -- Update `last_conversion_info' of AST_CONTEXT.
476                  do                  do
477                          Result := conformance_type.convert_to (a_context_class, a_target_type)                          Result := conformance_type.convert_to (a_context_class, a_target_type)
478                  end                  end
479    
480          meta_type: LIKE_CURRENT is          meta_type: LIKE_CURRENT
481                          -- Meta type.                          -- Meta type.
482                  do                  do
483                                  -- Because `like Current' could possibly means a basic type                                  -- Because `like Current' could possibly means a basic type
# Line 488  feature {COMPILER_EXPORTER} -- Primitive Line 488  feature {COMPILER_EXPORTER} -- Primitive
488                          Result.set_actual_type (conformance_type.meta_type)                          Result.set_actual_type (conformance_type.meta_type)
489                  end                  end
490    
491  indexing  note
492          copyright:      "Copyright (c) 1984-2007, Eiffel Software"          copyright:      "Copyright (c) 1984-2007, Eiffel Software"
493          license:        "GPL version 2 (see http://www.eiffel.com/licensing/gpl.txt)"          license:        "GPL version 2 (see http://www.eiffel.com/licensing/gpl.txt)"
494          licensing_options:      "http://www.eiffel.com/licensing"          licensing_options:      "http://www.eiffel.com/licensing"

Legend:
Removed from v.76431  
changed lines
  Added in v.76432

  ViewVC Help
Powered by ViewVC 1.1.23