ridl 2.8.1 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +9 -3
- data/lib/ridl/backend.rb +11 -12
- data/lib/ridl/delegate.rb +89 -59
- data/lib/ridl/expression.rb +65 -27
- data/lib/ridl/genfile.rb +22 -16
- data/lib/ridl/node.rb +328 -189
- data/lib/ridl/options.rb +9 -11
- data/lib/ridl/optparse_ext.rb +32 -34
- data/lib/ridl/parser.rb +456 -236
- data/lib/ridl/runner.rb +33 -26
- data/lib/ridl/scanner.rb +171 -141
- data/lib/ridl/type.rb +113 -13
- data/lib/ridl/version.rb +2 -4
- metadata +4 -4
data/lib/ridl/type.rb
CHANGED
@@ -14,33 +14,43 @@ module IDL
|
|
14
14
|
def typename
|
15
15
|
self.class.name
|
16
16
|
end
|
17
|
+
|
17
18
|
def typeerror(val)
|
18
19
|
raise "#{val.inspect} cannot narrow to #{self.typename}"
|
19
20
|
end
|
21
|
+
|
20
22
|
def narrow(obj)
|
21
23
|
obj
|
22
24
|
end
|
25
|
+
|
23
26
|
def resolved_type
|
24
27
|
self
|
25
28
|
end
|
29
|
+
|
26
30
|
def is_complete?
|
27
31
|
true
|
28
32
|
end
|
29
|
-
|
33
|
+
|
34
|
+
def is_local?(_recurstk = nil)
|
30
35
|
false
|
31
36
|
end
|
37
|
+
|
32
38
|
def is_anonymous?
|
33
39
|
false
|
34
40
|
end
|
35
|
-
|
41
|
+
|
42
|
+
def is_node?(_node_class)
|
36
43
|
false
|
37
44
|
end
|
45
|
+
|
38
46
|
def resolved_node
|
39
47
|
nil
|
40
48
|
end
|
49
|
+
|
41
50
|
def is_template?
|
42
51
|
false
|
43
52
|
end
|
53
|
+
|
44
54
|
def matches?(idltype)
|
45
55
|
self.class == idltype.class
|
46
56
|
end
|
@@ -50,7 +60,7 @@ module IDL
|
|
50
60
|
end
|
51
61
|
|
52
62
|
class UndefinedType
|
53
|
-
def initialize(*
|
63
|
+
def initialize(*_args)
|
54
64
|
raise "#{self.class.name}'s not implemented yet."
|
55
65
|
end
|
56
66
|
end
|
@@ -64,19 +74,25 @@ module IDL
|
|
64
74
|
|
65
75
|
class NodeType < Type
|
66
76
|
attr_reader :node
|
77
|
+
|
67
78
|
def initialize(node)
|
68
79
|
raise node.inspect if node && !node.is_a?(IDL::AST::Leaf)
|
80
|
+
|
69
81
|
@node = node
|
70
82
|
end
|
71
|
-
|
83
|
+
|
84
|
+
def is_local?(_recurstk = nil)
|
72
85
|
@node.is_local?
|
73
86
|
end
|
87
|
+
|
74
88
|
def is_node?(node_class)
|
75
89
|
@node.is_a?(node_class)
|
76
90
|
end
|
91
|
+
|
77
92
|
def resolved_node
|
78
93
|
@node
|
79
94
|
end
|
95
|
+
|
80
96
|
def matches?(idltype)
|
81
97
|
super && self.resolved_node == idltype.resolved_node
|
82
98
|
end
|
@@ -86,27 +102,35 @@ module IDL
|
|
86
102
|
def typename
|
87
103
|
@node.name
|
88
104
|
end
|
105
|
+
|
89
106
|
def narrow(obj)
|
90
107
|
@node.idltype.narrow(obj)
|
91
108
|
end
|
109
|
+
|
92
110
|
def resolved_type
|
93
111
|
@node.idltype.resolved_type
|
94
112
|
end
|
113
|
+
|
95
114
|
def is_complete?
|
96
115
|
resolved_type.is_complete?
|
97
116
|
end
|
117
|
+
|
98
118
|
def is_local?(recurstk = [])
|
99
119
|
resolved_type.is_local?(recurstk)
|
100
120
|
end
|
121
|
+
|
101
122
|
def is_node?(node_class)
|
102
123
|
@node.is_a?(IDL::AST::Typedef) ? @node.idltype.is_node?(node_class) : @node.is_a?(node_class)
|
103
124
|
end
|
125
|
+
|
104
126
|
def resolved_node
|
105
127
|
@node.is_a?(IDL::AST::Typedef) ? @node.idltype.resolved_node : @node
|
106
128
|
end
|
129
|
+
|
107
130
|
def is_template?
|
108
131
|
@node.is_template?
|
109
132
|
end
|
133
|
+
|
110
134
|
def instantiate(instantiation_context)
|
111
135
|
if self.is_template?
|
112
136
|
cp = IDL::AST::TemplateParam.concrete_param(instantiation_context, @node)
|
@@ -125,7 +149,7 @@ module IDL
|
|
125
149
|
end
|
126
150
|
|
127
151
|
def self.is_unsigned?
|
128
|
-
self::Range.first
|
152
|
+
self::Range.first.zero?
|
129
153
|
end
|
130
154
|
|
131
155
|
def self.bits
|
@@ -173,37 +197,47 @@ module IDL
|
|
173
197
|
typeerror(obj) unless [TrueClass, FalseClass].include? obj.class
|
174
198
|
obj
|
175
199
|
end
|
200
|
+
|
176
201
|
def range_length
|
177
202
|
2
|
178
203
|
end
|
204
|
+
|
179
205
|
def min
|
180
206
|
false
|
181
207
|
end
|
208
|
+
|
182
209
|
def max
|
183
210
|
true
|
184
211
|
end
|
212
|
+
|
185
213
|
def in_range?(val)
|
186
214
|
Range.include?(val)
|
187
215
|
end
|
216
|
+
|
188
217
|
def next(val)
|
189
218
|
!val
|
190
219
|
end
|
191
220
|
end
|
221
|
+
|
192
222
|
class Char < Type
|
193
223
|
def narrow(obj)
|
194
224
|
typeerror(obj) unless ::Integer === obj
|
195
225
|
typeerror(obj) unless (0..255) === obj
|
196
226
|
obj
|
197
227
|
end
|
228
|
+
|
198
229
|
def range_length
|
199
230
|
256
|
200
231
|
end
|
232
|
+
|
201
233
|
def min
|
202
234
|
0
|
203
235
|
end
|
236
|
+
|
204
237
|
def in_range?(val)
|
205
238
|
val >= self.min && val <= self.max
|
206
239
|
end
|
240
|
+
|
207
241
|
def max
|
208
242
|
255
|
209
243
|
end
|
@@ -212,31 +246,40 @@ module IDL
|
|
212
246
|
val < self.max ? val + 1 : self.min
|
213
247
|
end
|
214
248
|
end
|
249
|
+
|
215
250
|
class Float < Type
|
216
251
|
def narrow(obj)
|
217
252
|
typeerror(obj) unless ::Float === obj
|
218
253
|
obj
|
219
254
|
end
|
220
255
|
end
|
256
|
+
|
221
257
|
class Double < Float; end
|
222
258
|
class LongDouble < Float; end
|
259
|
+
|
223
260
|
class Fixed < Type
|
224
261
|
attr_reader :digits, :scale
|
225
|
-
|
262
|
+
|
263
|
+
def initialize(digits = nil, scale = nil)
|
226
264
|
raise "significant digits for Fixed should be in the range 0-31" unless digits.nil? || (0..31) === digits.to_i
|
265
|
+
|
227
266
|
@digits = digits.nil? ? digits : digits.to_i
|
228
267
|
@scale = scale.nil? ? scale : scale.to_i
|
229
268
|
end
|
269
|
+
|
230
270
|
def narrow(obj)
|
231
|
-
#typeerror(obj)
|
271
|
+
# typeerror(obj)
|
232
272
|
obj
|
233
273
|
end
|
274
|
+
|
234
275
|
def is_anonymous?
|
235
276
|
false
|
236
277
|
end
|
278
|
+
|
237
279
|
def is_template?
|
238
280
|
(@size && @size.is_a?(IDL::Expression) && @size.is_template?)
|
239
281
|
end
|
282
|
+
|
240
283
|
def instantiate(instantiation_context)
|
241
284
|
self.is_template? ? (Type::Fixed.new(@size.instantiate(instantiation_context).value)) : self
|
242
285
|
end
|
@@ -244,11 +287,15 @@ module IDL
|
|
244
287
|
|
245
288
|
class String < Type
|
246
289
|
attr_reader :size
|
247
|
-
|
290
|
+
|
291
|
+
def length
|
292
|
+
@size
|
293
|
+
end
|
248
294
|
|
249
295
|
def initialize(size = nil)
|
250
296
|
@size = size
|
251
297
|
end
|
298
|
+
|
252
299
|
def narrow(obj)
|
253
300
|
typeerror(obj) unless ::String === obj
|
254
301
|
if @size.nil?
|
@@ -259,15 +306,19 @@ module IDL
|
|
259
306
|
obj
|
260
307
|
end
|
261
308
|
end
|
309
|
+
|
262
310
|
def is_anonymous?
|
263
311
|
@size ? true : false
|
264
312
|
end
|
313
|
+
|
265
314
|
def is_template?
|
266
315
|
(@size && @size.is_a?(IDL::Expression) && @size.is_template?)
|
267
316
|
end
|
317
|
+
|
268
318
|
def matches?(idltype)
|
269
319
|
super && self.size == idltype.size
|
270
320
|
end
|
321
|
+
|
271
322
|
def instantiate(instantiation_context)
|
272
323
|
self.is_template? ? (Type::String.new(@size.instantiate(instantiation_context).value)) : self
|
273
324
|
end
|
@@ -276,9 +327,14 @@ module IDL
|
|
276
327
|
class Sequence < Type
|
277
328
|
attr_reader :size, :basetype
|
278
329
|
attr_accessor :recursive
|
279
|
-
|
330
|
+
|
331
|
+
def length
|
332
|
+
@size
|
333
|
+
end
|
334
|
+
|
280
335
|
def initialize(t, size)
|
281
336
|
raise "Anonymous type definitions are not allowed!" if t.is_anonymous?
|
337
|
+
|
282
338
|
@basetype = t
|
283
339
|
@size = size
|
284
340
|
@typename = format("sequence<%s%s>", t.typename,
|
@@ -289,30 +345,39 @@ module IDL
|
|
289
345
|
end)
|
290
346
|
@recursive = false
|
291
347
|
end
|
348
|
+
|
292
349
|
def typename
|
293
350
|
@typename
|
294
351
|
end
|
352
|
+
|
295
353
|
def narrow(obj)
|
296
354
|
typeerror(obj)
|
297
355
|
end
|
356
|
+
|
298
357
|
def is_complete?
|
299
358
|
@basetype.resolved_type.is_complete?
|
300
359
|
end
|
360
|
+
|
301
361
|
def is_local?(recurstk = [])
|
302
362
|
@basetype.resolved_type.is_local?(recurstk)
|
303
363
|
end
|
364
|
+
|
304
365
|
def is_recursive?
|
305
366
|
@recursive
|
306
367
|
end
|
368
|
+
|
307
369
|
def is_anonymous?
|
308
370
|
true
|
309
371
|
end
|
372
|
+
|
310
373
|
def is_template?
|
311
374
|
(@size && @size.is_a?(IDL::Expression::ScopedName) && @size.node.is_a?(IDL::AST::TemplateParam)) || @basetype.is_template?
|
312
375
|
end
|
376
|
+
|
313
377
|
def matches?(idltype)
|
314
378
|
super && self.size == idltype.size && self.basetype.resolved_type.matches?(idltype.basetype.resolved_type)
|
315
379
|
end
|
380
|
+
|
316
381
|
def instantiate(instantiation_context)
|
317
382
|
if self.is_template?
|
318
383
|
Type::Sequence.new(@basetype.instantiate(instantiation_context), @size ? @size.instantiate(instantiation_context).value : nil)
|
@@ -323,10 +388,11 @@ module IDL
|
|
323
388
|
end
|
324
389
|
|
325
390
|
class Array < Type
|
326
|
-
attr_reader :basetype
|
327
|
-
|
391
|
+
attr_reader :basetype, :sizes
|
392
|
+
|
328
393
|
def initialize(t, sizes)
|
329
394
|
raise "Anonymous type definitions are not allowed!" if t.is_anonymous?
|
395
|
+
|
330
396
|
@basetype = t
|
331
397
|
if sizes.nil?
|
332
398
|
@sizes = []
|
@@ -336,27 +402,35 @@ module IDL
|
|
336
402
|
@typename = t.typename + sizes.collect { |s| "[#{IDL::Expression::ScopedName === s ? s.node.name : s.to_s}]" }.join
|
337
403
|
end
|
338
404
|
end
|
405
|
+
|
339
406
|
def typename
|
340
407
|
@typename
|
341
408
|
end
|
409
|
+
|
342
410
|
def narrow(obj)
|
343
411
|
typeerror(obj)
|
344
412
|
end
|
413
|
+
|
345
414
|
def is_complete?
|
346
415
|
@basetype.resolved_type.is_complete?
|
347
416
|
end
|
417
|
+
|
348
418
|
def is_local?(recurstk = [])
|
349
419
|
@basetype.resolved_type.is_local?(recurstk)
|
350
420
|
end
|
421
|
+
|
351
422
|
def is_anonymous?
|
352
423
|
true
|
353
424
|
end
|
425
|
+
|
354
426
|
def is_template?
|
355
427
|
@sizes.any? { |sz| (sz.is_a?(IDL::Expression::ScopedName) && sz.node.is_a?(IDL::AST::TemplateParam)) } || @basetype.is_template?
|
356
428
|
end
|
429
|
+
|
357
430
|
def matches?(idltype)
|
358
431
|
super && self.sizes == idltype.sizes && self.basetype.resolved_type.matches?(idltype.basetype.resolved_type)
|
359
432
|
end
|
433
|
+
|
360
434
|
def instantiate(instantiation_context)
|
361
435
|
self.is_template? ? Type::Array.new(@basetype.instantiate(instantiation_context), @sizes.collect { |sz| sz.instantiate(instantiation_context).value }) : self
|
362
436
|
end
|
@@ -364,11 +438,15 @@ module IDL
|
|
364
438
|
|
365
439
|
class WString < Type
|
366
440
|
attr_reader :size
|
367
|
-
|
441
|
+
|
442
|
+
def length
|
443
|
+
@size
|
444
|
+
end
|
368
445
|
|
369
446
|
def initialize(size = nil)
|
370
447
|
@size = size
|
371
448
|
end
|
449
|
+
|
372
450
|
def narrow(obj)
|
373
451
|
typeerror(obj) unless ::Array === obj
|
374
452
|
if @size.nil?
|
@@ -379,15 +457,19 @@ module IDL
|
|
379
457
|
obj
|
380
458
|
end
|
381
459
|
end
|
460
|
+
|
382
461
|
def is_anonymous?
|
383
462
|
@size ? true : false
|
384
463
|
end
|
464
|
+
|
385
465
|
def is_template?
|
386
466
|
(@size && @size.is_a?(IDL::Expression::ScopedName) && @size.node.is_a?(IDL::AST::TemplateParam))
|
387
467
|
end
|
468
|
+
|
388
469
|
def matches?(idltype)
|
389
470
|
super && self.size == idltype.size
|
390
471
|
end
|
472
|
+
|
391
473
|
def instantiate(instantiation_context)
|
392
474
|
self.is_template? ? Type::WString.new(@size.instantiate(instantiation_context).value) : self
|
393
475
|
end
|
@@ -438,6 +520,7 @@ module IDL
|
|
438
520
|
def is_complete?
|
439
521
|
node.is_defined?
|
440
522
|
end
|
523
|
+
|
441
524
|
def is_local?(recurstk = [])
|
442
525
|
node.is_local?(recurstk)
|
443
526
|
end
|
@@ -450,6 +533,7 @@ module IDL
|
|
450
533
|
def is_complete?
|
451
534
|
node.is_defined?
|
452
535
|
end
|
536
|
+
|
453
537
|
def is_local?(recurstk = [])
|
454
538
|
node.is_local?(recurstk)
|
455
539
|
end
|
@@ -462,6 +546,7 @@ module IDL
|
|
462
546
|
def is_complete?
|
463
547
|
node.is_defined?
|
464
548
|
end
|
549
|
+
|
465
550
|
def is_local?(recurstk = [])
|
466
551
|
node.is_local?(recurstk)
|
467
552
|
end
|
@@ -473,18 +558,23 @@ module IDL
|
|
473
558
|
typeerror(obj) unless (0...@node.enumerators.length) === obj
|
474
559
|
obj
|
475
560
|
end
|
561
|
+
|
476
562
|
def range_length
|
477
563
|
@node.enumerators.length
|
478
564
|
end
|
565
|
+
|
479
566
|
def min
|
480
567
|
0
|
481
568
|
end
|
569
|
+
|
482
570
|
def max
|
483
571
|
@node.enumerators.length - 1
|
484
572
|
end
|
573
|
+
|
485
574
|
def in_range?(val)
|
486
575
|
val >= self.min && val <= self.max
|
487
576
|
end
|
577
|
+
|
488
578
|
def next(val)
|
489
579
|
val < self.max ? val + 1 : self.min
|
490
580
|
end
|
@@ -492,41 +582,51 @@ module IDL
|
|
492
582
|
|
493
583
|
class Const < Type
|
494
584
|
attr_reader :type
|
585
|
+
|
495
586
|
def initialize(t)
|
496
587
|
@type = t
|
497
588
|
@typename = "const #{t.typename}"
|
498
589
|
end
|
590
|
+
|
499
591
|
def typename
|
500
592
|
@typename
|
501
593
|
end
|
594
|
+
|
502
595
|
def narrow(obj)
|
503
596
|
@type.narrow(obj)
|
504
597
|
end
|
598
|
+
|
505
599
|
def is_complete?
|
506
600
|
@type.resolved_type.is_complete?
|
507
601
|
end
|
602
|
+
|
508
603
|
def is_local?(recurstk = [])
|
509
604
|
@type.resolved_type.is_local?(recurstk)
|
510
605
|
end
|
606
|
+
|
511
607
|
def is_anonymous?
|
512
608
|
t.resolved_type.is_anonymous?
|
513
609
|
end
|
610
|
+
|
514
611
|
def is_template?
|
515
612
|
@type.is_template?
|
516
613
|
end
|
614
|
+
|
517
615
|
def instantiate(instantiation_context)
|
518
616
|
self.is_template? ? Type::Const.new(@type.instantiate(instantiation_context)) : self
|
519
617
|
end
|
618
|
+
|
520
619
|
def is_node?(node_class)
|
521
620
|
@type.is_node?(node_class)
|
522
621
|
end
|
622
|
+
|
523
623
|
def resolved_node
|
524
624
|
@type.resolved_node
|
525
625
|
end
|
626
|
+
|
526
627
|
def matches?(idltype)
|
527
628
|
super && self.type.resolved_type.matches?(idltype.type.resolved_type)
|
528
629
|
end
|
529
630
|
end
|
530
|
-
|
531
631
|
end
|
532
632
|
end
|
data/lib/ridl/version.rb
CHANGED
@@ -11,11 +11,9 @@
|
|
11
11
|
#--------------------------------------------------------------------
|
12
12
|
|
13
13
|
module IDL
|
14
|
-
|
15
14
|
RIDL_VERSION_MAJOR = 2
|
16
|
-
RIDL_VERSION_MINOR =
|
17
|
-
RIDL_VERSION_RELEASE =
|
15
|
+
RIDL_VERSION_MINOR = 9
|
16
|
+
RIDL_VERSION_RELEASE = 0
|
18
17
|
RIDL_VERSION = "#{RIDL_VERSION_MAJOR}.#{RIDL_VERSION_MINOR}.#{RIDL_VERSION_RELEASE}"
|
19
18
|
RIDL_COPYRIGHT = "Copyright (c) 2007-#{Time.now.year} Remedy IT Expertise BV, The Netherlands".freeze
|
20
|
-
|
21
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Corino
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-03-06 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: OMG v3.3 compliant native Ruby IDL compiler frontend with support for
|
15
15
|
pluggable (and stackable) backends.
|
16
|
-
email:
|
16
|
+
email: info@remedy.nl
|
17
17
|
executables: []
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files:
|
@@ -56,7 +56,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: '2.
|
59
|
+
version: '2.5'
|
60
60
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
62
|
- - ">="
|