# File lib/ruby-vpi/vpi.rb, line 213
213:     def method_missing aMeth, *aArgs, &aBlockArg
214:       if child = vpi_handle_by_name(aMeth.to_s, self)
215:         # cache the child for future accesses, in order to cut down number of calls to method_missing
216:           (class << self; self; end).class_eval do
217:             define_method aMeth do
218:               child
219:             end
220:           end
221: 
222:         child
223: 
224:       else
225:         prop = @@propCache[aMeth]
226: 
227:         if prop.operation
228:           self.send(prop.operation, prop.type, *aArgs, &aBlockArg)
229: 
230:         else
231:           case prop.accessor
232:             when :d     # delay values
233:               raise NotImplementedError, 'processing of delay values is not yet implemented.'
234:               # TODO: vpi_put_delays
235:               # TODO: vpi_get_delays
236: 
237:             when :l     # logic values
238:               if prop.assignment
239:                 value = aArgs.shift
240:                 put_value(value, prop.type, *aArgs)
241:               else
242:                 get_value(prop.type)
243:               end
244: 
245:             when :i     # integer values
246:               vpi_get(prop.type, self) unless prop.assignment
247: 
248:             when :b # boolean values
249:               unless prop.assignment
250:                 value = vpi_get(prop, self)
251:                 value && (value != 0)   # zero is false in C
252:               end
253: 
254:             when :s     # string values
255:               vpi_get_str(prop.type, self) unless prop.assignment
256: 
257:             when :h     # handle values
258:               vpi_handle(prop.type, self) unless prop.assignment
259: 
260:             else
261:               raise NoMethodError, "unable to access VPI property #{prop.name.inspect} through method #{aMeth.inspect} with arguments #{aArgs.inspect} for handle #{self}"
262:           end
263:         end
264:       end
265:     end