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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25c3bce199d061c1831b488200a21eb0406c7b373d3343d07c9c30de95b75618
|
4
|
+
data.tar.gz: e69b6f0ae05819f53315ca9853b989c3710adb4a226d941d1f3905eaa8d4767c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffc5501446d39835035a8a88005daf4a9ada39c2edb6124cfabdc3645f0fa5b8327e6c7671c232f46e7aede73c4252ad784131da1222f70c8752dc90d127c648
|
7
|
+
data.tar.gz: d29f08458378ef6b36516984f8f6d67ff556fb4553c542848e932dc786c7c852e2b2ed91fff7e38684bbedf5e923d2f5a5314980418769e047967a08c8d1a2ac
|
data/README.rdoc
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
{
|
2
|
-
{
|
3
|
-
{
|
1
|
+
{rdoc-image:https://badge.fury.io/rb/ridl.svg}[https://badge.fury.io/rb/ridl]
|
2
|
+
{rdoc-image:https://github.com/RemedyIT/ridl/workflows/r2corba/badge.svg}[https://github.com/RemedyIT/ridl/actions?query=workflow%3Ar2corba]
|
3
|
+
{rdoc-image:https://github.com/RemedyIT/ridl/workflows/taox11/badge.svg}[https://github.com/RemedyIT/ridl/actions?query=workflow%3Ataox11]
|
4
|
+
{rdoc-image:https://github.com/RemedyIT/ridl/workflows/ciaox11/badge.svg}[https://github.com/RemedyIT/ridl/actions?query=workflow%3Aciaox11]
|
5
|
+
{rdoc-image:https://www.codefactor.io/repository/github/remedyit/ridl/badge}[https://www.codefactor.io/repository/github/remedyit/ridl]
|
4
6
|
|
5
7
|
= RIDL Compiler
|
6
8
|
|
@@ -46,3 +48,7 @@ The RIDL Gem is a Ruby-only Gem without any dependencies.
|
|
46
48
|
== Releasing new RIDL Ruby Gem
|
47
49
|
|
48
50
|
A new RIDL ruby gem release can be made by incrementing the RIDL version in link:lib/ridl/version.rb and create a new release on {github}[https://github.com/RemedyIT/ridl/releases] matching the new version (for example v2.7.0). The github {Ruby Gem Release}[https://github.com/RemedyIT/ridl/actions?query=workflow%3A%22Ruby+Gem+Release%22] action will automatically create a new gem and push it to {Rubygems.org}[https://www.rubygems.org/gems/ridl].
|
51
|
+
|
52
|
+
== Regenerating `lib/racc/parser.rb`
|
53
|
+
|
54
|
+
The file `lib/racc/parser.rb` can be regenerated using `racc -o parser.rb -E parser.ry`. The option `-E` embeds the racc parser within RIDL which is required for RIDL because jruby doesn't contain `RACC` as cruby does.
|
data/lib/ridl/backend.rb
CHANGED
@@ -11,15 +11,14 @@
|
|
11
11
|
#--------------------------------------------------------------------
|
12
12
|
|
13
13
|
module IDL
|
14
|
-
|
15
14
|
class Backend
|
16
|
-
|
17
15
|
@@backends = {}
|
18
16
|
|
19
17
|
class ProcessStop < RuntimeError; end
|
20
18
|
|
21
19
|
class Configurator
|
22
20
|
attr_reader :backend
|
21
|
+
|
23
22
|
def initialize(be_name, root, title, copyright, version)
|
24
23
|
@backend = IDL::Backend.new(be_name, root, title, copyright, version)
|
25
24
|
@be_ext_klass = class << @backend; self; end
|
@@ -47,10 +46,10 @@ module IDL
|
|
47
46
|
IDL.log(1, "> loaded RIDL backend :#{be_name} from #{@@backends[be_name.to_sym].root}")
|
48
47
|
# return backend
|
49
48
|
return @@backends[be_name.to_sym]
|
50
|
-
rescue LoadError =>
|
49
|
+
rescue LoadError => e
|
51
50
|
IDL.error "ERROR: Cannot load RIDL backend [:#{be_name}]"
|
52
|
-
IDL.error
|
53
|
-
IDL.error(
|
51
|
+
IDL.error e.inspect
|
52
|
+
IDL.error(e.backtrace.join("\n")) if IDL.verbose_level.positive?
|
54
53
|
exit 1
|
55
54
|
end
|
56
55
|
end
|
@@ -62,7 +61,7 @@ module IDL
|
|
62
61
|
end
|
63
62
|
|
64
63
|
# stop processing of current input and skip to next or exit RIDL
|
65
|
-
def self.stop_processing(msg='')
|
64
|
+
def self.stop_processing(msg = '')
|
66
65
|
raise ProcessStop, msg, caller(1).first
|
67
66
|
end
|
68
67
|
|
@@ -71,7 +70,7 @@ module IDL
|
|
71
70
|
@root = root
|
72
71
|
@title = ttl
|
73
72
|
@copyright = cpr
|
74
|
-
@version = (Hash === ver ? ver : { :
|
73
|
+
@version = (Hash === ver ? ver : { major: ver.to_i, minor: 0, release: 0 })
|
75
74
|
@base_backends = []
|
76
75
|
end
|
77
76
|
|
@@ -84,24 +83,25 @@ module IDL
|
|
84
83
|
def print_version
|
85
84
|
puts "#{title} #{version}"
|
86
85
|
puts copyright
|
87
|
-
@base_backends.each {|be| puts '---'
|
86
|
+
@base_backends.each { |be| puts '---'
|
87
|
+
be.print_version }
|
88
88
|
end
|
89
89
|
|
90
90
|
def lookup_path
|
91
|
-
@base_backends.inject([@root]) {|paths, bbe| paths.concat(bbe.lookup_path) }
|
91
|
+
@base_backends.inject([@root]) { |paths, bbe| paths.concat(bbe.lookup_path) }
|
92
92
|
end
|
93
93
|
|
94
94
|
def setup_be(optlist, idl_options)
|
95
95
|
# initialize base backends in reverse order so each dependent BE can overrule its
|
96
96
|
# base settings
|
97
|
-
@base_backends.reverse.each {|be| be.setup_be(optlist, idl_options) }
|
97
|
+
@base_backends.reverse.each { |be| be.setup_be(optlist, idl_options) }
|
98
98
|
# initialize this backend
|
99
99
|
_setup_be(optlist, idl_options) if self.respond_to?(:_setup_be, true)
|
100
100
|
end
|
101
101
|
|
102
102
|
def process_input(parser, params)
|
103
103
|
# process input bottom-up
|
104
|
-
@base_backends.reverse.each {|be| be.process_input(parser, params) }
|
104
|
+
@base_backends.reverse.each { |be| be.process_input(parser, params) }
|
105
105
|
_process_input(parser, params) if self.respond_to?(:_process_input, true)
|
106
106
|
end
|
107
107
|
|
@@ -115,6 +115,5 @@ module IDL
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
end
|
118
|
-
|
119
118
|
end
|
120
119
|
end
|
data/lib/ridl/delegate.rb
CHANGED
@@ -13,11 +13,9 @@ require 'ridl/node'
|
|
13
13
|
require 'ridl/expression'
|
14
14
|
|
15
15
|
module IDL
|
16
|
-
|
17
16
|
ORB_PIDL = 'orb.pidlc'.freeze
|
18
17
|
|
19
18
|
class Delegator
|
20
|
-
|
21
19
|
# #pragma handler registry
|
22
20
|
# each keyed entry a callable object:
|
23
21
|
# - responds to #call(delegator, cur_node, pragma_string)
|
@@ -25,7 +23,8 @@ class Delegator
|
|
25
23
|
@@pragma_handlers = {}
|
26
24
|
|
27
25
|
def self.add_pragma_handler(key, h = nil, &block)
|
28
|
-
raise 'add_pragma_handler requires a callable object or a block' unless
|
26
|
+
raise 'add_pragma_handler requires a callable object or a block' unless h&.respond_to?(:call) || block_given?
|
27
|
+
|
29
28
|
@@pragma_handlers[key] = block_given? ? block : h
|
30
29
|
end
|
31
30
|
|
@@ -41,7 +40,7 @@ class Delegator
|
|
41
40
|
@preprocout = params[:output] if @preprocess
|
42
41
|
@ignore_pidl = params[:ignore_pidl] || false
|
43
42
|
@root_namespace = nil
|
44
|
-
|
43
|
+
unless params[:namespace].nil?
|
45
44
|
@root_namespace = IDL::AST::Module.new(params[:namespace], nil, {})
|
46
45
|
end
|
47
46
|
end
|
@@ -58,8 +57,8 @@ class Delegator
|
|
58
57
|
begin
|
59
58
|
@root, @includes = Marshal.load(f)
|
60
59
|
@cur = @root
|
61
|
-
rescue Exception =>
|
62
|
-
IDL.error("RIDL - failed to load ORB pidlc [#{
|
60
|
+
rescue Exception => e
|
61
|
+
IDL.error("RIDL - failed to load ORB pidlc [#{e}]\n You probably need to rebuild the bootstrap file (compile orb.idl to orb.pidlc).")
|
63
62
|
exit(1)
|
64
63
|
ensure
|
65
64
|
f.close
|
@@ -73,6 +72,7 @@ class Delegator
|
|
73
72
|
@last = nil
|
74
73
|
@last_pos = nil
|
75
74
|
end
|
75
|
+
|
76
76
|
def post_parse
|
77
77
|
if @preprocess
|
78
78
|
Marshal.dump([@root, @includes], @preprocout)
|
@@ -100,7 +100,7 @@ class Delegator
|
|
100
100
|
def walk_member(m, w)
|
101
101
|
case m
|
102
102
|
when IDL::AST::Include
|
103
|
-
|
103
|
+
unless m.is_preprocessed?
|
104
104
|
if @expand_includes
|
105
105
|
if m.is_defined?
|
106
106
|
w.enter_include(m)
|
@@ -131,6 +131,7 @@ class Delegator
|
|
131
131
|
_te = w.respond_to?(:enter_home)
|
132
132
|
_tl = w.respond_to?(:leave_home)
|
133
133
|
return unless _te || _tl
|
134
|
+
|
134
135
|
w.enter_home(m) if _te
|
135
136
|
m.walk_members { |cm| walk_member(cm, w) }
|
136
137
|
w.leave_home(m) if _tl
|
@@ -141,6 +142,7 @@ class Delegator
|
|
141
142
|
_te = w.respond_to?(:enter_component)
|
142
143
|
_tl = w.respond_to?(:leave_component)
|
143
144
|
return unless _te || _tl
|
145
|
+
|
144
146
|
w.enter_component(m) if _te
|
145
147
|
m.walk_members { |cm| walk_member(cm, w) }
|
146
148
|
w.leave_component(m) if _tl
|
@@ -149,6 +151,7 @@ class Delegator
|
|
149
151
|
_te = w.respond_to?(:enter_connector)
|
150
152
|
_tl = w.respond_to?(:leave_connector)
|
151
153
|
return unless _te || _tl
|
154
|
+
|
152
155
|
w.enter_connector(m) if _te
|
153
156
|
m.walk_members { |cm| walk_member(cm, w) }
|
154
157
|
w.leave_connector(m) if _tl
|
@@ -210,7 +213,7 @@ class Delegator
|
|
210
213
|
end
|
211
214
|
|
212
215
|
def enter_include(s, fullpath)
|
213
|
-
params = { :
|
216
|
+
params = { filename: s, fullpath: fullpath }
|
214
217
|
params[:defined] = true
|
215
218
|
params[:preprocessed] = @preprocess
|
216
219
|
@cur = @cur.define(IDL::AST::Include, "$INC:" + s, params)
|
@@ -219,13 +222,13 @@ class Delegator
|
|
219
222
|
@cur
|
220
223
|
end
|
221
224
|
|
222
|
-
def leave_include
|
225
|
+
def leave_include
|
223
226
|
set_last
|
224
227
|
@cur = @cur.enclosure
|
225
228
|
end
|
226
229
|
|
227
230
|
def declare_include(s)
|
228
|
-
params = { :
|
231
|
+
params = { filename: s, fullpath: @includes[s].fullpath }
|
229
232
|
params[:defined] = false
|
230
233
|
params[:preprocessed] = @includes[s].is_preprocessed?
|
231
234
|
@cur.define(IDL::AST::Include, "$INC:" + s, params)
|
@@ -258,7 +261,7 @@ class Delegator
|
|
258
261
|
end
|
259
262
|
|
260
263
|
def handle_pragma(pragma_string)
|
261
|
-
unless @@pragma_handlers.values.reduce(false) {|rc, h| h.call(self, @cur, pragma_string) || rc }
|
264
|
+
unless @@pragma_handlers.values.reduce(false) { |rc, h| h.call(self, @cur, pragma_string) || rc }
|
262
265
|
IDL.log(1, "RIDL - unrecognized pragma encountered: #{pragma_string}.")
|
263
266
|
end
|
264
267
|
end
|
@@ -289,7 +292,8 @@ class Delegator
|
|
289
292
|
set_last
|
290
293
|
@cur
|
291
294
|
end
|
292
|
-
|
295
|
+
|
296
|
+
def end_module(_node)
|
293
297
|
set_last(@cur)
|
294
298
|
@cur = @cur.enclosure # must equals to argument mod
|
295
299
|
end
|
@@ -302,6 +306,7 @@ class Delegator
|
|
302
306
|
if global || names.size > 1
|
303
307
|
raise "no scoped identifier allowed for template module: #{(global ? '::' : '') + names.join('::')}"
|
304
308
|
end
|
309
|
+
|
305
310
|
@cur = @cur.define(IDL::AST::TemplateModule, names[0])
|
306
311
|
@cur.annotations.concat(@annotation_stack)
|
307
312
|
@annotation_stack = IDL::AST::Annotations.new
|
@@ -316,7 +321,7 @@ class Delegator
|
|
316
321
|
@template_module_name = nil # reset
|
317
322
|
define_template_module(*tmp)
|
318
323
|
end
|
319
|
-
params = { :
|
324
|
+
params = { type: type }
|
320
325
|
params[:annotations] = @annotation_stack
|
321
326
|
@annotation_stack = IDL::AST::Annotations.new
|
322
327
|
set_last(@cur.define(IDL::AST::TemplateParam, name, params))
|
@@ -330,7 +335,8 @@ class Delegator
|
|
330
335
|
unless template_type.node.is_a?(IDL::AST::TemplateModule)
|
331
336
|
raise "invalid module template specification: #{template_type.node.typename} #{template_type.node.scoped_lm_name}"
|
332
337
|
end
|
333
|
-
|
338
|
+
|
339
|
+
params = { template: template_type.node, template_params: parameters }
|
334
340
|
mod_inst = @cur.define(IDL::AST::Module, name, params)
|
335
341
|
mod_inst.annotations.concat(@annotation_stack)
|
336
342
|
@annotation_stack = IDL::AST::Annotations.new
|
@@ -348,13 +354,14 @@ class Delegator
|
|
348
354
|
@cur
|
349
355
|
end
|
350
356
|
|
351
|
-
def declare_interface(name, attrib=nil)
|
357
|
+
def declare_interface(name, attrib = nil)
|
352
358
|
params = {}
|
353
359
|
params[:abstract] = attrib == :abstract
|
354
360
|
params[:local] = attrib == :local
|
355
361
|
params[:forward] = true
|
356
362
|
params[:pseudo] = false
|
357
363
|
raise "annotations with forward declaration of #{name} not allowed" unless @annotation_stack.empty?
|
364
|
+
|
358
365
|
@cur.define(IDL::AST::Interface, name, params)
|
359
366
|
set_last
|
360
367
|
@cur
|
@@ -372,7 +379,8 @@ class Delegator
|
|
372
379
|
set_last
|
373
380
|
@cur = @cur.define(IDL::AST::Interface, name, params)
|
374
381
|
end
|
375
|
-
|
382
|
+
|
383
|
+
def end_interface(_node)
|
376
384
|
set_last(@cur)
|
377
385
|
@cur = @cur.enclosure # must equals to argument mod
|
378
386
|
end
|
@@ -389,7 +397,7 @@ class Delegator
|
|
389
397
|
@cur = @cur.define(IDL::AST::Home, name, params)
|
390
398
|
end
|
391
399
|
|
392
|
-
def end_home(
|
400
|
+
def end_home(_node)
|
393
401
|
set_last(@cur)
|
394
402
|
@cur = @cur.enclosure
|
395
403
|
end
|
@@ -398,6 +406,7 @@ class Delegator
|
|
398
406
|
params = {}
|
399
407
|
params[:forward] = true
|
400
408
|
raise "annotations with forward declaration of #{name} not allowed" unless @annotation_stack.empty?
|
409
|
+
|
401
410
|
set_last
|
402
411
|
@cur.define(IDL::AST::Component, name, params)
|
403
412
|
end
|
@@ -412,7 +421,7 @@ class Delegator
|
|
412
421
|
@cur = @cur.define(IDL::AST::Component, name, params)
|
413
422
|
end
|
414
423
|
|
415
|
-
def end_component(
|
424
|
+
def end_component(_node)
|
416
425
|
set_last(@cur)
|
417
426
|
@cur = @cur.enclosure
|
418
427
|
end
|
@@ -426,7 +435,7 @@ class Delegator
|
|
426
435
|
@cur = @cur.define(IDL::AST::Connector, name, params)
|
427
436
|
end
|
428
437
|
|
429
|
-
def end_connector(
|
438
|
+
def end_connector(_node)
|
430
439
|
set_last(@cur)
|
431
440
|
@cur = @cur.enclosure
|
432
441
|
end
|
@@ -439,7 +448,7 @@ class Delegator
|
|
439
448
|
@cur = @cur.define(IDL::AST::Porttype, name, params)
|
440
449
|
end
|
441
450
|
|
442
|
-
def end_porttype(
|
451
|
+
def end_porttype(_node)
|
443
452
|
set_last(@cur)
|
444
453
|
@cur = @cur.enclosure
|
445
454
|
end
|
@@ -455,17 +464,18 @@ class Delegator
|
|
455
464
|
@cur
|
456
465
|
end
|
457
466
|
|
458
|
-
def declare_eventtype(name, attrib=nil)
|
467
|
+
def declare_eventtype(name, attrib = nil)
|
459
468
|
params = {}
|
460
469
|
params[:abstract] = attrib == :abstract
|
461
470
|
params[:forward] = true
|
462
471
|
raise "annotations with forward declaration of #{name} not allowed" unless @annotation_stack.empty?
|
472
|
+
|
463
473
|
set_last
|
464
474
|
@cur.define(IDL::AST::Eventtype, name, params)
|
465
475
|
@cur
|
466
476
|
end
|
467
477
|
|
468
|
-
def define_eventtype(name, attrib, inherits={})
|
478
|
+
def define_eventtype(name, attrib, inherits = {})
|
469
479
|
params = {}
|
470
480
|
params[:abstract] = attrib == :abstract
|
471
481
|
params[:custom] = attrib == :custom
|
@@ -478,17 +488,18 @@ class Delegator
|
|
478
488
|
@cur
|
479
489
|
end
|
480
490
|
|
481
|
-
def declare_valuetype(name, attrib=nil)
|
491
|
+
def declare_valuetype(name, attrib = nil)
|
482
492
|
params = {}
|
483
493
|
params[:abstract] = attrib == :abstract
|
484
494
|
params[:forward] = true
|
485
495
|
raise "annotations with forward declaration of #{name} not allowed" unless @annotation_stack.empty?
|
496
|
+
|
486
497
|
set_last
|
487
498
|
@cur.define(IDL::AST::Valuetype, name, params)
|
488
499
|
@cur
|
489
500
|
end
|
490
501
|
|
491
|
-
def define_valuetype(name, attrib, inherits={})
|
502
|
+
def define_valuetype(name, attrib, inherits = {})
|
492
503
|
params = {}
|
493
504
|
params[:abstract] = attrib == :abstract
|
494
505
|
params[:custom] = attrib == :custom
|
@@ -521,7 +532,7 @@ class Delegator
|
|
521
532
|
end
|
522
533
|
|
523
534
|
def define_valuebox(name, type)
|
524
|
-
params = { :
|
535
|
+
params = { type: type }
|
525
536
|
params[:annotations] = @annotation_stack
|
526
537
|
@annotation_stack = IDL::AST::Annotations.new
|
527
538
|
set_last(@cur.define(IDL::AST::Valuebox, name, params))
|
@@ -556,6 +567,7 @@ class Delegator
|
|
556
567
|
if n.nil?
|
557
568
|
raise "cannot find type name '#{nm}' in scope '#{node.scoped_name}'"
|
558
569
|
end
|
570
|
+
|
559
571
|
node = n
|
560
572
|
first = node if first.nil?
|
561
573
|
end
|
@@ -594,11 +606,12 @@ class Delegator
|
|
594
606
|
Type::Short,
|
595
607
|
Type::Long,
|
596
608
|
Type::LongLong,
|
597
|
-
Type::ULongLong
|
598
|
-
].detect {|t| t::Range === _value }
|
609
|
+
Type::ULongLong
|
610
|
+
].detect { |t| t::Range === _value }
|
599
611
|
if _type.nil?
|
600
612
|
raise "it's not a valid integer: #{v.to_s}"
|
601
613
|
end
|
614
|
+
|
602
615
|
k.new(_type.new, _value)
|
603
616
|
when :string
|
604
617
|
k.new(Type::String.new, _value)
|
@@ -623,15 +636,16 @@ class Delegator
|
|
623
636
|
else
|
624
637
|
if not ::Integer === _expression.value
|
625
638
|
raise "must be integer: #{_expression.value.inspect}"
|
626
|
-
elsif _expression.value
|
627
|
-
raise "must be positive integer: #{_expression.value
|
639
|
+
elsif _expression.value.negative?
|
640
|
+
raise "must be positive integer: #{_expression.value}"
|
628
641
|
end
|
642
|
+
|
629
643
|
_expression.value
|
630
644
|
end
|
631
645
|
end
|
632
646
|
|
633
647
|
def define_const(_type, _name, _expression)
|
634
|
-
params = { :
|
648
|
+
params = { type: _type, expression: _expression }
|
635
649
|
params[:annotations] = @annotation_stack
|
636
650
|
@annotation_stack = IDL::AST::Annotations.new
|
637
651
|
set_last(@cur.define(IDL::AST::Const, _name, params))
|
@@ -639,7 +653,7 @@ class Delegator
|
|
639
653
|
end
|
640
654
|
|
641
655
|
def declare_op_header(_oneway, _type, _name)
|
642
|
-
params =
|
656
|
+
params = {}
|
643
657
|
params[:oneway] = (_oneway == :oneway)
|
644
658
|
params[:type] = _type
|
645
659
|
params[:annotations] = @annotation_stack
|
@@ -647,8 +661,9 @@ class Delegator
|
|
647
661
|
set_last
|
648
662
|
@cur = @cur.define(IDL::AST::Operation, _name, params)
|
649
663
|
end
|
664
|
+
|
650
665
|
def declare_op_parameter(_attribute, _type, _name)
|
651
|
-
params =
|
666
|
+
params = {}
|
652
667
|
params[:attribute] = _attribute
|
653
668
|
params[:type] = _type
|
654
669
|
params[:annotations] = @annotation_stack
|
@@ -656,18 +671,20 @@ class Delegator
|
|
656
671
|
set_last(@cur.define(IDL::AST::Parameter, _name, params))
|
657
672
|
@cur
|
658
673
|
end
|
674
|
+
|
659
675
|
def declare_op_footer(_raises, instantiation_context)
|
660
676
|
@cur.raises = _raises || []
|
661
677
|
@cur.context = instantiation_context
|
662
|
-
|
678
|
+
unless @cur.context.nil?
|
663
679
|
raise "context phrase's not supported"
|
664
680
|
end
|
681
|
+
|
665
682
|
set_last(@cur)
|
666
683
|
@cur = @cur.enclosure
|
667
684
|
end
|
668
685
|
|
669
|
-
def declare_attribute(_type, _name, _readonly=false)
|
670
|
-
params =
|
686
|
+
def declare_attribute(_type, _name, _readonly = false)
|
687
|
+
params = {}
|
671
688
|
params[:type] = _type
|
672
689
|
params[:readonly] = _readonly
|
673
690
|
params[:annotations] = @annotation_stack
|
@@ -675,28 +692,32 @@ class Delegator
|
|
675
692
|
set_last(@cur.define(IDL::AST::Attribute, _name, params))
|
676
693
|
end
|
677
694
|
|
678
|
-
def declare_struct(
|
679
|
-
params = { :
|
695
|
+
def declare_struct(name)
|
696
|
+
params = { forward: true }
|
680
697
|
raise "annotations with forward declaration of #{name} not allowed" unless @annotation_stack.empty?
|
698
|
+
|
681
699
|
set_last
|
682
|
-
@cur.define(IDL::AST::Struct,
|
700
|
+
@cur.define(IDL::AST::Struct, name, params)
|
683
701
|
@cur
|
684
702
|
end
|
685
|
-
|
686
|
-
|
703
|
+
|
704
|
+
def define_struct(name)
|
705
|
+
params = { forward: false }
|
687
706
|
params[:annotations] = @annotation_stack
|
688
707
|
@annotation_stack = IDL::AST::Annotations.new
|
689
708
|
set_last
|
690
|
-
@cur = @cur.define(IDL::AST::Struct,
|
709
|
+
@cur = @cur.define(IDL::AST::Struct, name, params)
|
691
710
|
end
|
692
|
-
|
693
|
-
|
711
|
+
|
712
|
+
def declare_member(_type, name)
|
713
|
+
params = {}
|
694
714
|
params[:type] = _type
|
695
715
|
params[:annotations] = @annotation_stack
|
696
716
|
@annotation_stack = IDL::AST::Annotations.new
|
697
|
-
set_last(@cur.define(IDL::AST::Member,
|
717
|
+
set_last(@cur.define(IDL::AST::Member, name, params))
|
698
718
|
@cur
|
699
719
|
end
|
720
|
+
|
700
721
|
def end_struct(node)
|
701
722
|
node.defined = true
|
702
723
|
set_last(@cur)
|
@@ -704,42 +725,48 @@ class Delegator
|
|
704
725
|
@cur = @cur.enclosure
|
705
726
|
ret
|
706
727
|
end
|
707
|
-
|
708
|
-
|
728
|
+
|
729
|
+
def define_exception(name)
|
730
|
+
params = { forward: false }
|
709
731
|
params[:annotations] = @annotation_stack
|
710
732
|
@annotation_stack = IDL::AST::Annotations.new
|
711
733
|
set_last
|
712
|
-
@cur = @cur.define(IDL::AST::Exception,
|
734
|
+
@cur = @cur.define(IDL::AST::Exception, name, params)
|
713
735
|
end
|
714
|
-
|
736
|
+
|
737
|
+
def end_exception(_node)
|
715
738
|
set_last(@cur)
|
716
739
|
ret = IDL::Type::ScopedName.new(@cur)
|
717
740
|
@cur = @cur.enclosure
|
718
741
|
ret
|
719
742
|
end
|
720
743
|
|
721
|
-
def declare_union(
|
722
|
-
params = { :
|
744
|
+
def declare_union(name)
|
745
|
+
params = { forward: true }
|
723
746
|
raise "annotations with forward declaration of #{name} not allowed" unless @annotation_stack.empty?
|
747
|
+
|
724
748
|
set_last
|
725
|
-
@cur.define(IDL::AST::Union,
|
749
|
+
@cur.define(IDL::AST::Union, name, params)
|
726
750
|
@cur
|
727
751
|
end
|
728
|
-
|
729
|
-
|
752
|
+
|
753
|
+
def define_union(name)
|
754
|
+
params = { forward: false }
|
730
755
|
params[:annotations] = @annotation_stack
|
731
756
|
@annotation_stack = IDL::AST::Annotations.new
|
732
757
|
set_last
|
733
|
-
@cur = @cur.define(IDL::AST::Union,
|
758
|
+
@cur = @cur.define(IDL::AST::Union, name, params)
|
734
759
|
end
|
760
|
+
|
735
761
|
def define_union_switchtype(union_node, switchtype)
|
736
762
|
union_node.set_switchtype(switchtype)
|
737
763
|
union_node.annotations.concat(@annotation_stack)
|
738
764
|
@annotation_stack = IDL::AST::Annotations.new
|
739
765
|
union_node
|
740
766
|
end
|
767
|
+
|
741
768
|
def define_case(_labels, _type, _name)
|
742
|
-
params =
|
769
|
+
params = {}
|
743
770
|
params[:type] = _type
|
744
771
|
params[:labels] = _labels
|
745
772
|
params[:annotations] = @annotation_stack
|
@@ -747,6 +774,7 @@ class Delegator
|
|
747
774
|
set_last(@cur.define(IDL::AST::UnionMember, _name, params))
|
748
775
|
@cur
|
749
776
|
end
|
777
|
+
|
750
778
|
def end_union(node)
|
751
779
|
node.validate_labels
|
752
780
|
node.defined = true
|
@@ -763,18 +791,20 @@ class Delegator
|
|
763
791
|
set_last
|
764
792
|
@cur = @cur.define(IDL::AST::Enum, _name, params)
|
765
793
|
end
|
794
|
+
|
766
795
|
def declare_enumerator(_name)
|
767
796
|
n = @cur.enumerators.length
|
768
797
|
params = {
|
769
|
-
:
|
770
|
-
:
|
798
|
+
value: n,
|
799
|
+
enum: @cur
|
771
800
|
}
|
772
801
|
params[:annotations] = @annotation_stack
|
773
802
|
@annotation_stack = IDL::AST::Annotations.new
|
774
803
|
set_last(@cur.enclosure.define(IDL::AST::Enumerator, _name, params))
|
775
804
|
@cur
|
776
805
|
end
|
777
|
-
|
806
|
+
|
807
|
+
def end_enum(_node)
|
778
808
|
set_last(@cur)
|
779
809
|
ret = IDL::Type::ScopedName.new(@cur)
|
780
810
|
@cur = @cur.enclosure
|
@@ -782,7 +812,7 @@ class Delegator
|
|
782
812
|
end
|
783
813
|
|
784
814
|
def declare_typedef(_type, _name)
|
785
|
-
params =
|
815
|
+
params = {}
|
786
816
|
params[:type] = _type
|
787
817
|
params[:annotations] = @annotation_stack
|
788
818
|
@annotation_stack = IDL::AST::Annotations.new
|