Class: AutoC::Function
- Inherits:
-
Object
show all
- Includes:
- Entity
- Defined in:
- lib/autoc/function.rb
Overview
Standalone C side function The generated function is meant to be the C89-compliant NOTE: This function does not track parameter and result types as its dependencies This can be done manually by appending to #dependencies property with <<
Defined Under Namespace
Classes: Parameters
Constant Summary
Constants included
from Entity
Entity::ReferenceSet
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods included from Entity
#<=>, #complexity, #dependencies, #forward_declarations, #implementation, #interface, #position, #references, #total_dependencies, #total_references
Constructor Details
#initialize(result, name, parameters, inline: false, visibility: :public, constraint: true, variadic: false, abstract: false) ⇒ Function
Returns a new instance of Function.
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
# File 'lib/autoc/function.rb', line 92
def initialize(result, name, parameters, inline: false, visibility: :public, constraint: true, variadic: false, abstract: false)
@name = name.to_s
@result = result
@inline = inline
@visibility = visibility
@constraint = constraint
@abstract = abstract
@variadic = variadic
@parameters = Parameters.new(self)
if parameters.is_a?(Hash)
parameters.each do |name, descriptor|
x = Parameter.new(descriptor, name)
@parameters[x.name] = x
end
else
i = -1
parameters.each do |descriptor|
x = Parameter.new(descriptor, "_#{i+=1}")
@parameters[x.name] = x
end
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args) ⇒ Object
This allows to call other functions with this function’s individual parameters as arguments A call to unknown method results in the method’s name being emitted
169
|
# File 'lib/autoc/function.rb', line 169
def method_missing(meth, *args) = parameters.has_key?(meth) ? parameters[meth] : meth
|
Instance Attribute Details
#inline=(value) ⇒ Object
Sets the attribute inline
90
91
92
|
# File 'lib/autoc/function.rb', line 90
def inline=(value)
@inline = value
end
|
#name ⇒ Object
Returns the value of attribute name.
82
83
84
|
# File 'lib/autoc/function.rb', line 82
def name
@name
end
|
#parameters ⇒ Object
Returns the value of attribute parameters.
86
87
88
|
# File 'lib/autoc/function.rb', line 86
def parameters
@parameters
end
|
#result ⇒ Object
Returns the value of attribute result.
84
85
86
|
# File 'lib/autoc/function.rb', line 84
def result
@result
end
|
#visibility ⇒ Object
Returns the value of attribute visibility.
88
89
90
|
# File 'lib/autoc/function.rb', line 88
def visibility
@visibility
end
|
Instance Method Details
#abstract? ⇒ Boolean
137
|
# File 'lib/autoc/function.rb', line 137
def abstract? = @abstract == true
|
#call(*arguments) ⇒ Object
151
152
153
154
155
156
157
158
159
160
|
# File 'lib/autoc/function.rb', line 151
def call(*arguments)
xs = []
ps = parameters.to_a
(0...arguments.size).each do |i|
a = arguments[i]
v = a.is_a?(Parameter) ? a.to_value_argument : a
xs << (i < ps.size ? ps[i].value.(v) : v)
end
'%s(%s)' % [name, xs.join(',')]
end
|
#code(code) ⇒ Object
129
|
# File 'lib/autoc/function.rb', line 129
def code(code) = @code = code
|
162
163
164
165
|
# File 'lib/autoc/function.rb', line 162
def configure(&block)
instance_eval(&block)
self
end
|
#definition ⇒ Object
147
|
# File 'lib/autoc/function.rb', line 147
def definition = '%s {%s}' % [prototype, @code]
|
#external_code(code) ⇒ Object
120
121
122
123
|
# File 'lib/autoc/function.rb', line 120
def external_code(code)
@inline = false
code(code)
end
|
127
|
# File 'lib/autoc/function.rb', line 127
def () = =
|
#inline? ⇒ Boolean
133
|
# File 'lib/autoc/function.rb', line 133
def inline? = @inline == true
|
#inline_code(code) ⇒ Object
115
116
117
118
|
# File 'lib/autoc/function.rb', line 115
def inline_code(code)
@inline = true
code(code)
end
|
#inspect ⇒ Object
131
|
# File 'lib/autoc/function.rb', line 131
def inspect = "#{prototype} <#{self.class}>"
|
#live? ⇒ Boolean
141
|
# File 'lib/autoc/function.rb', line 141
def live? = (@constraint.is_a?(Proc) ? @constraint.() : @constraint) == true
|
#parameter(name) ⇒ Object
149
|
# File 'lib/autoc/function.rb', line 149
def parameter(name) = @values[name]
|
#prototype ⇒ Object
145
|
# File 'lib/autoc/function.rb', line 145
def prototype = '%s %s(%s)' % [result.signature, name, (parameters.to_a.collect(&:declaration) << (variadic? ? '...' : nil)).compact.join(',')]
|
#public? ⇒ Boolean
135
|
# File 'lib/autoc/function.rb', line 135
def public? = @visibility == :public
|
#signature ⇒ Object
143
|
# File 'lib/autoc/function.rb', line 143
def signature = '%s(%s)' % [result.signature, (parameters.to_a.collect(&:signature) << (variadic? ? '...' : nil)).compact.join(',')]
|
#to_s ⇒ Object
125
|
# File 'lib/autoc/function.rb', line 125
def to_s = name
|
#variadic? ⇒ Boolean
139
|
# File 'lib/autoc/function.rb', line 139
def variadic? = @variadic == true
|