/[eiffelstudio]/FreeELKS/trunk/library/kernel/function.e
ViewVC logotype

Diff of /FreeELKS/trunk/library/kernel/function.e

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

revision 91476 by ericb, Fri Mar 3 10:19:32 2006 UTC revision 91477 by ericb, Sun Jan 14 09:47:13 2007 UTC
# Line 1  Line 1 
1  indexing  indexing
2          description: "[          description: "[
3                  Objects representing delayed calls to a function, with some arguments possibly still open.                  Objects representing delayed calls to a function,
4                            with some arguments possibly still open.
5                  Note: Features are the same as those of ROUTINE, with `apply' made effective, and the addition                  
6                  of `last_result' and `item'.                  Note: Features are the same as those of ROUTINE,
7                            with `apply' made effective, and the addition
8                            of `last_result' and `item'.
9                  ]"                  ]"
10          library: "Free implementation of ELKS library"          library: "Free implementation of ELKS library"
11          copyright: "Copyright (c) 1986-2004, Eiffel Software and others"          copyright: "Copyright (c) 1986-2004, Eiffel Software and others"
# Line 21  inherit Line 23  inherit
23                  end                  end
24    
25  feature -- Access  feature -- Access
26            
27          last_result: RESULT_TYPE          last_result: RESULT_TYPE
28                          -- Result of last call, if any.                          -- Result of last call, if any.
29    
30            call (args: OPEN_ARGS) is
31                    local
32                            l_closed_count: INTEGER
33                    do
34                            l_closed_count :=  closed_operands.count
35                            last_result := fast_item (encaps_rout_disp, calc_rout_addr, $closed_operands, $args, class_id, feature_id,
36                                    is_precompiled, is_basic, is_inline_agent, l_closed_count, open_count, $open_map)
37                    end
38    
39          item (args: OPEN_ARGS): RESULT_TYPE is          item (args: OPEN_ARGS): RESULT_TYPE is
40                          -- Result of calling function with `args' as operands.                          -- Result of calling function with `args' as operands.
41                  require                  require
42                          valid_operands: valid_operands (args)                          valid_operands: valid_operands (args)
43                          callable: callable                  local
44                            l_closed_count: INTEGER
45                  do                  do
46                          set_operands (args)                          l_closed_count :=  closed_operands.count
47                          clear_last_result                          Result := fast_item (encaps_rout_disp, calc_rout_addr, $closed_operands, $args, class_id, feature_id,
48                          Result := rout_obj_call_function (rout_disp, $internal_operands)                                  is_precompiled, is_basic, is_inline_agent, l_closed_count, open_count, $open_map)
49                          if is_cleanup_needed then                  end
50                                  remove_gc_reference  
51                          end          apply is
52                            -- Call function with `operands' as last set.
53                    local
54                            l_closed_count: INTEGER
55                    do
56                            l_closed_count :=  closed_operands.count
57                            last_result := fast_item (encaps_rout_disp, calc_rout_addr, $closed_operands, $operands, class_id, feature_id,
58                                    is_precompiled, is_basic, is_inline_agent, l_closed_count, open_count, $open_map)
59                  end                  end
60    
61  feature -- Comparison  feature -- Comparison
# Line 58  feature -- Duplication Line 77  feature -- Duplication
77                          last_result := other.last_result                          last_result := other.last_result
78                  end                  end
79    
 feature -- Basic operations  
   
         apply is  
                         -- Call function with `operands' as last set.  
                 do  
                         last_result := rout_obj_call_function (rout_disp, $internal_operands)  
                 end  
   
80  feature -- Obsolete  feature -- Obsolete
81    
82          eval (args: OPEN_ARGS): RESULT_TYPE is          eval (args: OPEN_ARGS): RESULT_TYPE is
# Line 74  feature -- Obsolete Line 85  feature -- Obsolete
85                          "Please use `item' instead"                          "Please use `item' instead"
86                  require                  require
87                          valid_operands: valid_operands (args)                          valid_operands: valid_operands (args)
                         callable: callable  
88                  do                  do
89                          Result := item (args)                          Result := item (args)
90                  end                  end
# Line 88  feature -- Removal Line 98  feature -- Removal
98                  do                  do
99                          last_result := l_result                          last_result := l_result
100                  end                  end
101                    
102  feature {NONE} -- Implementation  feature {NONE} -- Implementation
103    
104          rout_obj_call_function (rout, args: POINTER): RESULT_TYPE is          fast_item (a_rout_disp, a_calc_rout_addr: POINTER
105                          -- Perform call to `rout' with `args' as operands.                         a_closed_operands: POINTER; a_operands: POINTER
106                               a_class_id, a_feature_id: INTEGER; a_is_precompiled, a_is_basic, a_is_inline_agent: BOOLEAN
107                               a_closed_count, a_open_count: INTEGER; a_open_map: POINTER): RESULT_TYPE
108                  external                  external
109                          "C inline use %"eif_rout_obj.h%""                          "C inline use %"eif_rout_obj.h%""
110                  alias                  alias
111                          "rout_obj_call_agent($rout, $args, $$_result_type)"                          "[
112                            #ifdef WORKBENCH
113                                    $$_result_type result;
114                                    if ($a_rout_disp != 0) {
115                                            return (FUNCTION_CAST($$_result_type, (EIF_POINTER, EIF_REFERENCE, EIF_REFERENCE)) $a_rout_disp)(
116                                                    $a_calc_rout_addr, $a_closed_operands, $a_operands);
117                                    } else {
118                                            rout_obj_call_function_dynamic (
119                                                    $a_class_id,
120                                                    $a_feature_id,
121                                                    $a_is_precompiled,
122                                                    $a_is_basic,
123                                                    $a_is_inline_agent,
124                                                    $a_closed_operands,
125                                                    $a_closed_count,
126                                                    $a_operands,
127                                                    $a_open_count,
128                                                    $a_open_map,
129                                                    &result);
130                                            return result;
131                                    }
132                            #else
133                                    return (FUNCTION_CAST($$_result_type, (EIF_POINTER, EIF_REFERENCE, EIF_REFERENCE)) $a_rout_disp)(
134                                            $a_calc_rout_addr, $a_closed_operands, $a_operands);
135                            #endif
136                            ]"
137                  end                  end
138    
139  end  end

Legend:
Removed from v.91476  
changed lines
  Added in v.91477

  ViewVC Help
Powered by ViewVC 1.1.23