ridl 2.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +49 -0
- data/README.rdoc +42 -0
- data/lib/idl/BiDirPolicy.pidl +28 -0
- data/lib/idl/CosNaming.idl +260 -0
- data/lib/idl/IOP.pidl +98 -0
- data/lib/idl/Messaging.pidl +152 -0
- data/lib/idl/PortableServer.pidl +371 -0
- data/lib/idl/TimeBase.pidl +40 -0
- data/lib/idl/orb.idl +200 -0
- data/lib/ridl/backend.rb +124 -0
- data/lib/ridl/delegate.rb +740 -0
- data/lib/ridl/expression.rb +276 -0
- data/lib/ridl/genfile.rb +220 -0
- data/lib/ridl/node.rb +2818 -0
- data/lib/ridl/optparse_ext.rb +357 -0
- data/lib/ridl/parser.diff +42 -0
- data/lib/ridl/parser.rb +3836 -0
- data/lib/ridl/parser.ry +933 -0
- data/lib/ridl/require.rb +18 -0
- data/lib/ridl/ridl.rb +44 -0
- data/lib/ridl/runner.rb +304 -0
- data/lib/ridl/scanner.rb +1238 -0
- data/lib/ridl/type.rb +507 -0
- data/lib/ridl/version.rb +22 -0
- metadata +74 -0
data/lib/ridl/type.rb
ADDED
@@ -0,0 +1,507 @@
|
|
1
|
+
#--------------------------------------------------------------------
|
2
|
+
# type.rb - IDL types
|
3
|
+
#
|
4
|
+
# Author: Martin Corino
|
5
|
+
#
|
6
|
+
# This program is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the RIDL LICENSE which is
|
8
|
+
# included with this program.
|
9
|
+
#
|
10
|
+
# Copyright (c) Remedy IT Expertise BV
|
11
|
+
# Chamber of commerce Rotterdam nr.276339, The Netherlands
|
12
|
+
#--------------------------------------------------------------------
|
13
|
+
module IDL
|
14
|
+
class Type
|
15
|
+
def typename
|
16
|
+
self.class.name
|
17
|
+
end
|
18
|
+
def typeerror(val)
|
19
|
+
raise RuntimeError, "#{val.inspect} cannot narrow to #{self.typename}"
|
20
|
+
end
|
21
|
+
def narrow(obj)
|
22
|
+
obj
|
23
|
+
end
|
24
|
+
def resolved_type
|
25
|
+
self
|
26
|
+
end
|
27
|
+
def is_complete?
|
28
|
+
true
|
29
|
+
end
|
30
|
+
def is_local?(recurstk = nil)
|
31
|
+
false
|
32
|
+
end
|
33
|
+
def is_anonymous?
|
34
|
+
false
|
35
|
+
end
|
36
|
+
def is_node?(node_class)
|
37
|
+
false
|
38
|
+
end
|
39
|
+
def resolved_node
|
40
|
+
nil
|
41
|
+
end
|
42
|
+
def is_template?
|
43
|
+
false
|
44
|
+
end
|
45
|
+
|
46
|
+
def instantiate(_context)
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
class UndefinedType
|
51
|
+
def initialize(*args)
|
52
|
+
raise RuntimeError, "#{self.class.name}'s not implemented yet."
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class Void < Type
|
57
|
+
def narrow(obj)
|
58
|
+
typeerror(obj) unless obj.nil?
|
59
|
+
obj
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class NodeType < Type
|
64
|
+
attr_reader :node
|
65
|
+
def initialize(node)
|
66
|
+
@node = node
|
67
|
+
end
|
68
|
+
def is_local?(recurstk = nil)
|
69
|
+
@node.is_local?
|
70
|
+
end
|
71
|
+
def is_node?(node_class)
|
72
|
+
@node.is_a?(node_class)
|
73
|
+
end
|
74
|
+
def resolved_node
|
75
|
+
@node
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class ScopedName < NodeType
|
80
|
+
def typename
|
81
|
+
@node.name
|
82
|
+
end
|
83
|
+
def narrow(obj)
|
84
|
+
@node.idltype.narrow(obj)
|
85
|
+
end
|
86
|
+
def resolved_type
|
87
|
+
@node.idltype.resolved_type
|
88
|
+
end
|
89
|
+
def is_complete?
|
90
|
+
resolved_type.is_complete?
|
91
|
+
end
|
92
|
+
def is_local?(recurstk = [])
|
93
|
+
resolved_type.is_local?(recurstk)
|
94
|
+
end
|
95
|
+
def is_node?(node_class)
|
96
|
+
@node.is_a?(IDL::AST::Typedef) ? @node.idltype.is_node?(node_class) : @node.is_a?(node_class)
|
97
|
+
end
|
98
|
+
def resolved_node
|
99
|
+
@node.is_a?(IDL::AST::Typedef) ? @node.idltype.resolved_node : @node
|
100
|
+
end
|
101
|
+
def is_template?
|
102
|
+
@node.is_template?
|
103
|
+
end
|
104
|
+
def instantiate(_context)
|
105
|
+
if self.is_template?
|
106
|
+
cp = IDL::AST::TemplateParam.concrete_param(_context, @node)
|
107
|
+
cp.is_a?(Type) ? cp : ScopedName.new(cp)
|
108
|
+
else
|
109
|
+
self
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
class Integer < Type
|
115
|
+
def narrow(obj)
|
116
|
+
typeerror(obj) unless ::Integer === obj
|
117
|
+
typeerror(obj) unless self.class::Range === obj
|
118
|
+
obj
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.is_unsigned?
|
122
|
+
self::Range.first == 0
|
123
|
+
end
|
124
|
+
|
125
|
+
def self.bits
|
126
|
+
self::BITS
|
127
|
+
end
|
128
|
+
|
129
|
+
def range_length
|
130
|
+
1 + (self.class::Range.last - self.class::Range.first)
|
131
|
+
end
|
132
|
+
|
133
|
+
def min
|
134
|
+
self.class::Range.first
|
135
|
+
end
|
136
|
+
|
137
|
+
def max
|
138
|
+
self.class::Range.last
|
139
|
+
end
|
140
|
+
|
141
|
+
def in_range?(val)
|
142
|
+
val >= self.min && val <= self.max
|
143
|
+
end
|
144
|
+
|
145
|
+
def next(val)
|
146
|
+
val < self.max ? val + 1 : self.min
|
147
|
+
end
|
148
|
+
|
149
|
+
def Integer.newclass(range, bits)
|
150
|
+
k = Class.new(self)
|
151
|
+
k.const_set('Range', range)
|
152
|
+
k.const_set('BITS', bits)
|
153
|
+
k
|
154
|
+
end
|
155
|
+
end
|
156
|
+
Octet = Integer.newclass(0..0xFF, 8)
|
157
|
+
UShort = Integer.newclass(0..0xFFFF, 16)
|
158
|
+
ULong = Integer.newclass(0..0xFFFFFFFF, 32)
|
159
|
+
ULongLong = Integer.newclass(0..0xFFFFFFFFFFFFFFFF, 64)
|
160
|
+
Short = Integer.newclass(-0x8000...0x8000, 16)
|
161
|
+
Long = Integer.newclass(-0x80000000...0x80000000, 32)
|
162
|
+
LongLong = Integer.newclass(-0x8000000000000000...0x8000000000000000, 64)
|
163
|
+
|
164
|
+
class Boolean < Type
|
165
|
+
Range = [true, false]
|
166
|
+
def narrow(obj)
|
167
|
+
typeerror(obj) unless [TrueClass, FalseClass].include? obj.class
|
168
|
+
obj
|
169
|
+
end
|
170
|
+
def range_length
|
171
|
+
2
|
172
|
+
end
|
173
|
+
def min
|
174
|
+
false
|
175
|
+
end
|
176
|
+
def max
|
177
|
+
true
|
178
|
+
end
|
179
|
+
def in_range?(val)
|
180
|
+
Range.include?(val)
|
181
|
+
end
|
182
|
+
def next(val)
|
183
|
+
!val
|
184
|
+
end
|
185
|
+
end
|
186
|
+
class Char < Type
|
187
|
+
def narrow(obj)
|
188
|
+
typeerror(obj) unless ::Integer === obj
|
189
|
+
typeerror(obj) unless (0..255) === obj
|
190
|
+
obj
|
191
|
+
end
|
192
|
+
def range_length
|
193
|
+
256
|
194
|
+
end
|
195
|
+
def min
|
196
|
+
0
|
197
|
+
end
|
198
|
+
def in_range?(val)
|
199
|
+
val >= self.min && val <= self.max
|
200
|
+
end
|
201
|
+
def max
|
202
|
+
255
|
203
|
+
end
|
204
|
+
|
205
|
+
def next(val)
|
206
|
+
val < self.max ? val + 1 : self.min
|
207
|
+
end
|
208
|
+
end
|
209
|
+
class Float < Type
|
210
|
+
def narrow(obj)
|
211
|
+
typeerror(obj) unless ::Float === obj
|
212
|
+
obj
|
213
|
+
end
|
214
|
+
end
|
215
|
+
class Double < Float; end
|
216
|
+
class LongDouble < Float; end
|
217
|
+
class Fixed < Type
|
218
|
+
attr_reader :digits, :scale
|
219
|
+
def initialize(digits=nil, scale=nil)
|
220
|
+
raise RuntimeError, "significant digits for Fixed should be in the range 0-31" unless digits.nil? || (0..31) === digits.to_i
|
221
|
+
@digits = digits.nil? ? digits : digits.to_i
|
222
|
+
@scale = scale.nil? ? scale : scale.to_i
|
223
|
+
end
|
224
|
+
def narrow(obj)
|
225
|
+
#typeerror(obj)
|
226
|
+
obj
|
227
|
+
end
|
228
|
+
def is_anonymous?
|
229
|
+
false
|
230
|
+
end
|
231
|
+
def is_template?
|
232
|
+
(@size && @size.is_a?(IDL::Expression) && @size.is_template?)
|
233
|
+
end
|
234
|
+
def instantiate(_context)
|
235
|
+
self.is_template? ? (Type::Fixed.new(@size.instantiate(_context).value)) : self
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
class String < Type
|
240
|
+
attr_reader :size
|
241
|
+
def length; @size; end
|
242
|
+
|
243
|
+
def initialize(size = nil)
|
244
|
+
@size = size
|
245
|
+
end
|
246
|
+
def narrow(obj)
|
247
|
+
typeerror(obj) unless ::String === obj
|
248
|
+
if @size.nil?
|
249
|
+
obj
|
250
|
+
elsif @size < obj.size
|
251
|
+
typeerror(obj)
|
252
|
+
else
|
253
|
+
obj
|
254
|
+
end
|
255
|
+
end
|
256
|
+
def is_anonymous?
|
257
|
+
@size ? true : false
|
258
|
+
end
|
259
|
+
def is_template?
|
260
|
+
(@size && @size.is_a?(IDL::Expression) && @size.is_template?)
|
261
|
+
end
|
262
|
+
def instantiate(_context)
|
263
|
+
self.is_template? ? (Type::String.new(@size.instantiate(_context).value)) : self
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
class Sequence < Type
|
268
|
+
attr_reader :size, :basetype
|
269
|
+
attr_accessor :recursive
|
270
|
+
def length; @size; end
|
271
|
+
def initialize(t, size)
|
272
|
+
raise RuntimeError, "Anonymous type definitions are not allowed!" if t.is_anonymous?
|
273
|
+
@basetype = t
|
274
|
+
@size = size
|
275
|
+
@typename = format("sequence<%s%s>", t.typename,
|
276
|
+
if @size.nil? then
|
277
|
+
""
|
278
|
+
else
|
279
|
+
", #{IDL::Expression::ScopedName === size ? size.node.name : size.to_s}"
|
280
|
+
end)
|
281
|
+
@recursive = false
|
282
|
+
end
|
283
|
+
def typename
|
284
|
+
@typename
|
285
|
+
end
|
286
|
+
def narrow(obj)
|
287
|
+
typeerror(obj)
|
288
|
+
end
|
289
|
+
def is_complete?
|
290
|
+
@basetype.resolved_type.is_complete?
|
291
|
+
end
|
292
|
+
def is_local?(recurstk = [])
|
293
|
+
@basetype.resolved_type.is_local?(recurstk)
|
294
|
+
end
|
295
|
+
def is_recursive?
|
296
|
+
@recursive
|
297
|
+
end
|
298
|
+
def is_anonymous?
|
299
|
+
true
|
300
|
+
end
|
301
|
+
def is_template?
|
302
|
+
(@size && @size.is_a?(IDL::Expression::ScopedName) && @size.node.is_a?(IDL::AST::TemplateParam)) || @basetype.is_template?
|
303
|
+
end
|
304
|
+
def instantiate(_context)
|
305
|
+
self.is_template? ? Type::Sequence.new(@basetype.instantiate(_context), @size.instantiate(_context).value) : self
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
class Array < Type
|
310
|
+
attr_reader :basetype
|
311
|
+
attr_reader :sizes
|
312
|
+
def initialize(t, sizes)
|
313
|
+
raise RuntimeError, "Anonymous type definitions are not allowed!" if t.is_anonymous?
|
314
|
+
@basetype = t
|
315
|
+
if sizes.nil?
|
316
|
+
@sizes = []
|
317
|
+
@typename = t.typename + "[]"
|
318
|
+
else
|
319
|
+
@sizes = sizes
|
320
|
+
@typename = t.typename + sizes.collect { |s| "[#{IDL::Expression::ScopedName === s ? s.node.name : s.to_s}]" }.join
|
321
|
+
end
|
322
|
+
end
|
323
|
+
def typename
|
324
|
+
@typename
|
325
|
+
end
|
326
|
+
def narrow(obj)
|
327
|
+
typeerror(obj)
|
328
|
+
end
|
329
|
+
def is_complete?
|
330
|
+
@basetype.resolved_type.is_complete?
|
331
|
+
end
|
332
|
+
def is_local?(recurstk = [])
|
333
|
+
@basetype.resolved_type.is_local?(recurstk)
|
334
|
+
end
|
335
|
+
def is_anonymous?
|
336
|
+
true
|
337
|
+
end
|
338
|
+
def is_template?
|
339
|
+
@sizes.any? { |sz| (sz.is_a?(IDL::Expression::ScopedName) && sz.node.is_a?(IDL::AST::TemplateParam)) } || @basetype.is_template?
|
340
|
+
end
|
341
|
+
def instantiate(_context)
|
342
|
+
self.is_template? ? Type::Array.new(@basetype.instantiate(_context), @sizes.collect { |sz| sz.instantiate(_context).value }) : self
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
class WString < Type
|
347
|
+
attr_reader :size
|
348
|
+
def length; @size; end
|
349
|
+
|
350
|
+
def initialize(size = nil)
|
351
|
+
@size = size
|
352
|
+
end
|
353
|
+
def narrow(obj)
|
354
|
+
typeerror(obj) unless ::Array === obj
|
355
|
+
if @size.nil?
|
356
|
+
obj
|
357
|
+
elsif @size < obj.size
|
358
|
+
typeerror(obj)
|
359
|
+
else
|
360
|
+
obj
|
361
|
+
end
|
362
|
+
end
|
363
|
+
def is_anonymous?
|
364
|
+
@size ? true : false
|
365
|
+
end
|
366
|
+
def is_template?
|
367
|
+
(@size && @size.is_a?(IDL::Expression::ScopedName) && @size.node.is_a?(IDL::AST::TemplateParam))
|
368
|
+
end
|
369
|
+
def instantiate(_context)
|
370
|
+
self.is_template? ? Type::WString.new(@size.instantiate(_context).value) : self
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
class WChar < Type
|
375
|
+
def narrow(obj)
|
376
|
+
typeerror(obj) unless ::Array === obj
|
377
|
+
typeerror(obj) unless obj.size == 2
|
378
|
+
obj
|
379
|
+
end
|
380
|
+
end
|
381
|
+
|
382
|
+
class Any < Type
|
383
|
+
end
|
384
|
+
|
385
|
+
class Object < Type
|
386
|
+
end
|
387
|
+
|
388
|
+
class ValueBase < Type
|
389
|
+
end
|
390
|
+
|
391
|
+
class Native < Type
|
392
|
+
end
|
393
|
+
|
394
|
+
class TemplateModule < NodeType
|
395
|
+
end
|
396
|
+
|
397
|
+
class Interface < NodeType
|
398
|
+
end
|
399
|
+
|
400
|
+
class Home < NodeType
|
401
|
+
end
|
402
|
+
|
403
|
+
class Component < NodeType
|
404
|
+
end
|
405
|
+
|
406
|
+
class Porttype < NodeType
|
407
|
+
end
|
408
|
+
|
409
|
+
class Valuebox < NodeType
|
410
|
+
def is_local?(recurstk = [])
|
411
|
+
node.is_local?(recurstk)
|
412
|
+
end
|
413
|
+
end
|
414
|
+
|
415
|
+
class Valuetype < NodeType
|
416
|
+
def is_complete?
|
417
|
+
node.is_defined?
|
418
|
+
end
|
419
|
+
def is_local?(recurstk = [])
|
420
|
+
node.is_local?(recurstk)
|
421
|
+
end
|
422
|
+
end
|
423
|
+
|
424
|
+
class Eventtype < Valuetype
|
425
|
+
end
|
426
|
+
|
427
|
+
class Struct < NodeType
|
428
|
+
def is_complete?
|
429
|
+
node.is_defined?
|
430
|
+
end
|
431
|
+
def is_local?(recurstk = [])
|
432
|
+
node.is_local?(recurstk)
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
436
|
+
class Exception < Struct
|
437
|
+
end
|
438
|
+
|
439
|
+
class Union < NodeType
|
440
|
+
def is_complete?
|
441
|
+
node.is_defined?
|
442
|
+
end
|
443
|
+
def is_local?(recurstk = [])
|
444
|
+
node.is_local?(recurstk)
|
445
|
+
end
|
446
|
+
end
|
447
|
+
|
448
|
+
class Enum < NodeType
|
449
|
+
def narrow(obj)
|
450
|
+
typeerror(obj) unless ::Integer === obj
|
451
|
+
typeerror(obj) unless (0...@node.enumerators.length) === obj
|
452
|
+
obj
|
453
|
+
end
|
454
|
+
def range_length
|
455
|
+
@node.enumerators.length
|
456
|
+
end
|
457
|
+
def min
|
458
|
+
0
|
459
|
+
end
|
460
|
+
def max
|
461
|
+
@node.enumerators.length-1
|
462
|
+
end
|
463
|
+
def in_range?(val)
|
464
|
+
val >= self.min && val <= self.max
|
465
|
+
end
|
466
|
+
def next(val)
|
467
|
+
val < self.max ? val + 1 : self.min
|
468
|
+
end
|
469
|
+
end
|
470
|
+
|
471
|
+
class Const < Type
|
472
|
+
attr_reader :type
|
473
|
+
def initialize(t)
|
474
|
+
@type = t
|
475
|
+
@typename = "const #{t.typename}"
|
476
|
+
end
|
477
|
+
def typename
|
478
|
+
@typename
|
479
|
+
end
|
480
|
+
def narrow(obj)
|
481
|
+
@type.narrow(obj)
|
482
|
+
end
|
483
|
+
def is_complete?
|
484
|
+
@type.resolved_type.is_complete?
|
485
|
+
end
|
486
|
+
def is_local?(recurstk = [])
|
487
|
+
@type.resolved_type.is_local?(recurstk)
|
488
|
+
end
|
489
|
+
def is_anonymous?
|
490
|
+
t.resolved_type.is_anonymous?
|
491
|
+
end
|
492
|
+
def is_template?
|
493
|
+
@type.is_template?
|
494
|
+
end
|
495
|
+
def instantiate(_context)
|
496
|
+
self.is_template? ? Type::Const.new(@type.instantiate(_context)) : self
|
497
|
+
end
|
498
|
+
def is_node?(node_class)
|
499
|
+
@type.is_node?(node_class)
|
500
|
+
end
|
501
|
+
def resolved_node
|
502
|
+
@type.resolved_node
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
end
|
507
|
+
end
|