/[eiffelstudio]/branches/CAT_mono/Src/Eiffel/eiffel/genericity/cl_type_i.e
ViewVC logotype

Diff of /branches/CAT_mono/Src/Eiffel/eiffel/genericity/cl_type_i.e

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

revision 43301 by manus, Fri May 28 06:29:04 2004 UTC revision 43364 by manus, Sat May 29 22:49:07 2004 UTC
# Line 24  inherit Line 24  inherit
24                          generate_cid_init,                          generate_cid_init,
25                          generate_gen_type_il,                          generate_gen_type_il,
26                          generate_expanded_creation,                          generate_expanded_creation,
27                            generate_expanded_initialization,
28                          instantiation_in,                          instantiation_in,
29                          generic_derivation,                          generic_derivation,
30                          is_generated_as_single_type                          is_generated_as_single_type
# Line 377  feature -- Setting Line 378  feature -- Setting
378    
379  feature -- C generation  feature -- C generation
380    
381          generate_expanded_creation (byte_code: BYTE_CODE; reg: REGISTRABLE; workbench_mode: BOOLEAN) is          generate_expanded_creation (buffer: GENERATION_BUFFER; target_name: STRING) is
382                          -- Generate creation of expanded object associated to Current.                          -- Generate creation of expanded object associated to Current.
383                  local                  do
384                          gen_type: GEN_TYPE_I                          associated_class_type.generate_expanded_creation (buffer, target_name)
385                          written_class: CLASS_C                  end
                         class_type, written_type: CLASS_TYPE  
                         creation_feature: FEATURE_I  
                         c_name: STRING  
                         buffer: GENERATION_BUFFER  
                 do  
                         buffer := byte_code.buffer  
   
                         gen_type  ?= Current  
   
                         if gen_type /= Void then  
                                 byte_code.generate_block_open  
                                 byte_code.generate_gen_type_conversion (gen_type)  
                         end  
                         reg.print_register  
                         if workbench_mode then  
                                         -- RTLX is a macro used to create  
                                         -- expanded types  
                                 if gen_type /= Void then  
                                         buffer.put_string (" = RTLX(typres")  
                                 else  
                                         buffer.put_string (" = RTLX(RTUD(")  
                                         buffer.put_static_type_id (associated_class_type.static_type_id)  
                                         buffer.put_character (')')  
                                 end  
                         else  
                                 if gen_type /= Void then  
                                         buffer.put_string (" = RTLN(typres")  
                                 else  
                                         buffer.put_string (" = RTLN(")  
                                         buffer.put_type_id (type_id)  
                                 end  
                                 class_type := associated_class_type  
                                 creation_feature := class_type.associated_class.creation_feature  
                                 if creation_feature /= Void then  
                                         written_class := System.class_of_id (creation_feature.written_in)  
                                         if written_class.generics = Void then  
                                                 written_type := written_class.types.first  
                                         else  
                                                 written_type :=  
                                                         written_class.meta_type (class_type.type).associated_class_type  
                                         end  
                                         c_name := Encoder.feature_name (written_type.static_type_id,  
                                                 creation_feature.body_index)  
                                         buffer.put_string (");")  
                                         buffer.put_new_line  
                                         buffer.put_string (c_name)  
                                         buffer.put_character ('(')  
                                         reg.print_register  
                                         Extern_declarations.add_routine_with_signature (Void_c_type,  
                                                 c_name, <<"EIF_REFERENCE">>)  
                                 end  
                         end  
                         buffer.put_character (')')  
                         buffer.put_character (';')  
386    
387                          if gen_type /= Void then          generate_expanded_initialization (buffer: GENERATION_BUFFER; target_name: STRING) is
388                                  byte_code.generate_block_close                          -- Generate creation of expanded object associated to Current.
389                          end                  do
390                          buffer.put_new_line                          associated_class_type.generate_expanded_initialization (buffer, target_name, target_name, True)
391                  end                  end
392    
393          generate_cecil_value (buffer: GENERATION_BUFFER) is          generate_cecil_value (buffer: GENERATION_BUFFER) is

Legend:
Removed from v.43301  
changed lines
  Added in v.43364

  ViewVC Help
Powered by ViewVC 1.1.23