Class: Rbind::GeneratorC::OperationsHelper::OperationHelper

Inherits:
SimpleDelegator
  • Object
show all
Defined in:
lib/rbind/generator_c.rb

Instance Method Summary collapse

Instance Method Details

#bindingObject



232
233
234
# File 'lib/rbind/generator_c.rb', line 232

def binding
    Kernel.binding
end

#wrap_callObject



176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/rbind/generator_c.rb', line 176

def wrap_call
    paras = parameters.map do |arg|
        "#{"*" if (!arg.type.ptr? && !arg.type.basic_type?)}#{arg.name}#{"_" if !arg.type.basic_type?}"
    end.join(", ")
    fct = if attribute?
              if return_type.name == "void" && !return_type.ptr?
                  "rbind_obj_->#{attribute.name} = #{paras};"
              else
                  if return_type.basic_type?
                      "return rbind_obj_->#{attribute.name};"
                  elsif return_type.ptr?
                      "return toC(rbind_obj_->#{attribute.name},false);"
                  else
                      "return toC(&rbind_obj_->#{attribute.name},false);"
                  end
              end
          else
              fct = if !constructor? && (return_type.name != "void" || return_type.ptr?)
                        if operator? && parameters.size == 1
                            if return_type.basic_type?
                                "return *rbind_obj_ #{operator} #{paras};"
                            else
                                "return toC(new #{return_type.full_name}(*rbind_obj_ #{operator} #{paras}));"
                            end
                        elsif return_type.basic_type?
                            "return #{full_name}(#{paras});"
                        elsif return_type.ptr?
                            "return toC(#{full_name}(#{paras}));"
                        else
                            "return toC(new #{return_type.full_name}(#{full_name}(#{paras})));"
                        end
                    else
                        if constructor?
                            "return toC(new #{namespace}(#{paras}));"
                        else
                            if operator?
                                "*rbind_obj_ #{operator} #{paras};"
                            else
                                "#{full_name}(#{paras});"
                            end
                        end
                    end
              #convert call to member call 
              if instance_method?
                  #add base class name space
                  if((inherit? && !abstract?) || ambiguous_name?)
                      fct.gsub(full_name,"rbind_obj_->#{base_class.name}::#{name}")
                  else
                      fct.gsub(full_name,"rbind_obj_->#{name}")
                  end
              else
                  fct
              end
          end
end

#wrap_parametersObject



169
170
171
172
173
174
# File 'lib/rbind/generator_c.rb', line 169

def wrap_parameters
    cparameters.map do |arg|
        next if arg.type.basic_type?
        "#{"const " if arg.read_only?}#{arg.type.full_name} *#{arg.name}_ = fromC(#{arg.name});\n\t"
    end.compact.join("")
end