/[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 35544 by manus, Fri Jan 24 06:26:36 2003 UTC revision 35665 by manus, Fri Jan 31 00:53:19 2003 UTC
# Line 25  inherit Line 25  inherit
25                          make_gen_type_byte_code,                          make_gen_type_byte_code,
26                          generate_cid_array,                          generate_cid_array,
27                          generate_cid_init,                          generate_cid_init,
28                          generate_gen_type_il                          generate_gen_type_il,
29                            generate_expanded_creation
30                  end                  end
31                    
32          DEBUG_OUTPUT          DEBUG_OUTPUT
# Line 38  inherit Line 39  inherit
39                          {NONE} all                          {NONE} all
40                  end                  end
41    
42            SHARED_GENERATION
43                    export
44                            {NONE} all
45                    end
46    
47            SHARED_DECLARATIONS
48                    export
49                            {NONE} all
50                    end
51    
52  create  create
53          make          make
54                    
# Line 191  feature -- Access Line 202  feature -- Access
202                          Result := associated_class_type.type_id                          Result := associated_class_type.type_id
203                  end                  end
204    
         expanded_type_id: INTEGER is  
                         -- Type id of the corresponding expanded class type  
                 do  
                         is_true_expanded := False  
                         Result := base_class.types.search_item (Current).type_id  
                         is_true_expanded := True  
                 end  
   
205          sk_value: INTEGER is          sk_value: INTEGER is
206                          -- Generate SK value associated to the current type.                          -- Generate SK value associated to the current type.
207                  do                  do
# Line 377  feature -- Formatting Line 380  feature -- Formatting
380    
381  feature -- C generation  feature -- C generation
382    
383            generate_expanded_creation (byte_code: BYTE_CODE; reg: REGISTRABLE; workbench_mode: BOOLEAN) is
384                            -- Generate creation of expanded object associated to Current.
385                    local
386                            gen_type: GEN_TYPE_I
387                            written_class: CLASS_C
388                            class_type, written_type: CLASS_TYPE
389                            creation_feature: FEATURE_I
390                            c_name: STRING
391                            buffer: GENERATION_BUFFER
392                    do
393                            buffer := byte_code.buffer
394    
395                            gen_type  ?= Current
396    
397                            if gen_type /= Void then
398                                    byte_code.generate_block_open
399                                    byte_code.generate_gen_type_conversion (gen_type)
400                            end
401                            reg.print_register
402                            if workbench_mode then
403                                            -- RTLX is a macro used to create
404                                            -- expanded types
405                                    if gen_type /= Void then
406                                            buffer.putstring (" = RTLX(typres")
407                                    else
408                                            buffer.putstring (" = RTLX(RTUD(")
409                                            buffer.generate_type_id (associated_class_type.static_type_id)
410                                            buffer.putchar (')')
411                                    end
412                            else
413                                    if gen_type /= Void then
414                                            buffer.putstring (" = RTLN(typres")
415                                    else
416                                            buffer.putstring (" = RTLN(")
417                                            buffer.putint (type_id - 1)
418                                    end
419                                    class_type := associated_class_type
420                                    creation_feature := class_type.associated_class.creation_feature
421                                    if creation_feature /= Void then
422                                            written_class := System.class_of_id (creation_feature.written_in)
423                                            if written_class.generics = Void then
424                                                    written_type := written_class.types.first
425                                            else
426                                                    written_type :=
427                                                            written_class.meta_type (class_type.type).associated_class_type
428                                            end
429                                            c_name := Encoder.feature_name (written_type.static_type_id,
430                                                    creation_feature.body_index)
431                                            buffer.putstring (");%N%T")
432                                            buffer.putstring (c_name)
433                                            buffer.putchar ('(')
434                                            reg.print_register
435                                            Extern_declarations.add_routine_with_signature (Void_c_type,
436                                                    c_name, <<"EIF_REFERENCE">>)
437                                    end
438                            end
439                            buffer.putchar (')')
440                            buffer.putchar (';')
441    
442                            if gen_type /= Void then
443                                    byte_code.generate_block_close
444                            end
445                            buffer.new_line
446                    end
447    
448          generate_cecil_value (buffer: GENERATION_BUFFER) is          generate_cecil_value (buffer: GENERATION_BUFFER) is
449                          -- Generate cecil value                          -- Generate cecil value
450                  do                  do

Legend:
Removed from v.35544  
changed lines
  Added in v.35665

  ViewVC Help
Powered by ViewVC 1.1.23