ridl 2.7.1 → 2.8.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -122,9 +122,7 @@ rule
122
122
  | template_module_inst_parameters "," template_module_inst_parameter
123
123
  { val[0] << val[2]; val[0] }
124
124
 
125
- template_module_inst_parameter : base_type_spec
126
- { val[0] }
127
- | template_type_spec
125
+ template_module_inst_parameter : simple_type_spec
128
126
  { val[0] }
129
127
  | const_exp
130
128
  { val[0] }
@@ -19,11 +19,6 @@ require 'ridl/options'
19
19
 
20
20
  module IDL
21
21
 
22
- # TODO : LEGACY solution for R2CORBA; to be removed when R2CORBA has been updated
23
- # See also IDL#init
24
- @@embedded = false unless class_variable_defined?(:@@embedded)
25
- @@be_name = nil unless class_variable_defined?(:@@be_name)
26
-
27
22
  OPTIONS = Options.new({
28
23
  :outputdir => nil,
29
24
  :includepaths => [],
@@ -39,6 +34,55 @@ module IDL
39
34
  CORE_OPTIONS = OPTIONS.keys
40
35
 
41
36
  class Engine
37
+
38
+ class ProductionStack
39
+ def initialize
40
+ @stack = []
41
+ @index = {}
42
+ end
43
+
44
+ def size
45
+ @stack.size
46
+ end
47
+
48
+ def empty?
49
+ @stack.empty?
50
+ end
51
+
52
+ def push(id, prod)
53
+ @index[id.to_sym] = @stack.size
54
+ @stack << [id.to_sym, prod]
55
+ end
56
+
57
+ def pop
58
+ return nil if empty?
59
+ id, prod = @stack.shift
60
+ @index.delete(id)
61
+ prod
62
+ end
63
+
64
+ def peek
65
+ return nil if empty?
66
+ id, _ = @stack.first
67
+ id
68
+ end
69
+
70
+ def remove(id)
71
+ return nil unless has?(id)
72
+ i = @index.delete(id.to_sym)
73
+ _, producer = @productionstack.delete(i)
74
+ producer
75
+ end
76
+
77
+ def has?(id)
78
+ @index.has_key?(id.to_sym)
79
+ end
80
+
81
+ def [](id)
82
+ @stack[@index[id.to_sym]].last
83
+ end
84
+ end
85
+
42
86
  def initialize(backend, options)
43
87
  @backend = backend ? Backend.load(backend) : Backend.null_be
44
88
  @initopts = options.merge({
@@ -51,8 +95,7 @@ module IDL
51
95
  })
52
96
  @optparser = init_optparser
53
97
  @inputstack = []
54
- @productionbatch = {}
55
- @productionstack = []
98
+ @productionstack = ProductionStack.new
56
99
  @options = nil
57
100
  end
58
101
 
@@ -85,29 +128,20 @@ module IDL
85
128
  # Production management
86
129
 
87
130
  def push_production(id, producer)
88
- raise "Producer #{id} already queued" if @productionbatch.has_key?(id.to_sym)
89
- @productionbatch[id.to_sym] = @productionstack.size
90
- @productionstack << [id.to_sym, producer]
131
+ raise "Producer #{id} already queued" if @productionstack.has?(id)
132
+ @productionstack.push(id, producer)
91
133
  end
92
134
 
93
135
  def pop_production
94
- return nil unless has_productions?
95
- id, producer = @productionstack.shift
96
- @productionbatch.delete(id)
97
- producer
136
+ @productionstack.pop
98
137
  end
99
138
 
100
139
  def peek_production
101
- return nil unless has_productions?
102
- id, _ = @productionstack.first
103
- id
140
+ @productionstack.peek
104
141
  end
105
142
 
106
143
  def remove_production(id)
107
- return nil unless has_production?(id)
108
- i = @productionbatch.delete(id.to_sym)
109
- _, producer = @productionstack.delete(i)
110
- producer
144
+ @productionstack.remove(id)
111
145
  end
112
146
 
113
147
  def has_productions?
@@ -115,11 +149,11 @@ module IDL
115
149
  end
116
150
 
117
151
  def has_production?(id)
118
- @productionbatch.has_key?(id.to_sym)
152
+ @productionstack.has?(id)
119
153
  end
120
154
 
121
155
  def production(id)
122
- @productionstack[@productionbatch[id.to_sym]].last
156
+ @productionstack[id]
123
157
  end
124
158
 
125
159
  # Verbosity control
@@ -452,39 +486,37 @@ module IDL
452
486
  def IDL.init(argv = ARGV)
453
487
  options = OPTIONS.dup
454
488
 
455
- unless @@embedded
456
- # load config file(s) if any
457
- Options.load_config(options)
489
+ # load config file(s) if any
490
+ Options.load_config(options)
458
491
 
459
- IDL.log(2, "Configuration [#{options}]")
492
+ IDL.log(2, "Configuration [#{options}]")
460
493
 
461
- # check commandline args for explicit language mapping backend
462
- if argv.first =~ /^:\S+/
463
- @@be_name = argv.shift.reverse.chop.reverse.to_sym
464
- elsif ENV['RIDL_BE_SELECT'] # or from environment
465
- @@be_name = ENV['RIDL_BE_SELECT'].to_sym
466
- elsif options[:backend] # or from configuration
467
- @@be_name = options[:backend].to_sym
468
- end
494
+ # check commandline args for explicit language mapping backend
495
+ if argv.first =~ /^:\S+/
496
+ be_name = argv.shift.reverse.chop.reverse.to_sym
497
+ elsif ENV['RIDL_BE_SELECT'] # or from environment
498
+ be_name = ENV['RIDL_BE_SELECT'].to_sym
499
+ elsif options[:backend] # or from configuration
500
+ be_name = options[:backend].to_sym
501
+ end
469
502
 
470
- # add optional search paths for RIDL backends
471
- options[:be_path] ||= []
472
- options[:be_path].unshift(*ENV['RIDL_BE_PATH'].split(/#{File::PATH_SEPARATOR}/)) if ENV['RIDL_BE_PATH']
473
- options[:be_path].collect! {|p| p.gsub('\\', '/') } # cleanup to prevent mixed path separators
474
- $:.concat(options[:be_path]) unless options[:be_path].empty?
475
-
476
- # check for special bootstrapping switches
477
- if argv.first == '--preprocess'
478
- options[:preprocess] = true
479
- argv.shift
480
- elsif argv.first == '--ignore-pidl'
481
- options[:ignore_pidl] = true
482
- argv.shift
483
- end
503
+ # add optional search paths for RIDL backends
504
+ options[:be_path] ||= []
505
+ options[:be_path].unshift(*ENV['RIDL_BE_PATH'].split(/#{File::PATH_SEPARATOR}/)) if ENV['RIDL_BE_PATH']
506
+ options[:be_path].collect! {|p| p.gsub('\\', '/') } # cleanup to prevent mixed path separators
507
+ $:.concat(options[:be_path]) unless options[:be_path].empty?
508
+
509
+ # check for special bootstrapping switches
510
+ if argv.first == '--preprocess'
511
+ options[:preprocess] = true
512
+ argv.shift
513
+ elsif argv.first == '--ignore-pidl'
514
+ options[:ignore_pidl] = true
515
+ argv.shift
484
516
  end
485
517
 
486
518
  # create RIDL engine
487
- Thread.current[:ridl_engine] = Engine.new(@@be_name, options)
519
+ Thread.current[:ridl_engine] = Engine.new(be_name, options)
488
520
  end
489
521
 
490
522
  # main run method
@@ -45,7 +45,7 @@ module IDL
45
45
  self.class == idltype.class
46
46
  end
47
47
 
48
- def instantiate(_context)
48
+ def instantiate(_)
49
49
  self
50
50
  end
51
51
 
@@ -65,6 +65,7 @@ module IDL
65
65
  class NodeType < Type
66
66
  attr_reader :node
67
67
  def initialize(node)
68
+ raise node.inspect if node && !node.is_a?(IDL::AST::Leaf)
68
69
  @node = node
69
70
  end
70
71
  def is_local?(recurstk = nil)
@@ -106,9 +107,9 @@ module IDL
106
107
  def is_template?
107
108
  @node.is_template?
108
109
  end
109
- def instantiate(_context)
110
+ def instantiate(instantiation_context)
110
111
  if self.is_template?
111
- cp = IDL::AST::TemplateParam.concrete_param(_context, @node)
112
+ cp = IDL::AST::TemplateParam.concrete_param(instantiation_context, @node)
112
113
  cp.is_a?(Type) ? cp : ScopedName.new(cp)
113
114
  else
114
115
  self
@@ -236,8 +237,8 @@ module IDL
236
237
  def is_template?
237
238
  (@size && @size.is_a?(IDL::Expression) && @size.is_template?)
238
239
  end
239
- def instantiate(_context)
240
- self.is_template? ? (Type::Fixed.new(@size.instantiate(_context).value)) : self
240
+ def instantiate(instantiation_context)
241
+ self.is_template? ? (Type::Fixed.new(@size.instantiate(instantiation_context).value)) : self
241
242
  end
242
243
  end
243
244
 
@@ -267,8 +268,8 @@ module IDL
267
268
  def matches?(idltype)
268
269
  super && self.size == idltype.size
269
270
  end
270
- def instantiate(_context)
271
- self.is_template? ? (Type::String.new(@size.instantiate(_context).value)) : self
271
+ def instantiate(instantiation_context)
272
+ self.is_template? ? (Type::String.new(@size.instantiate(instantiation_context).value)) : self
272
273
  end
273
274
  end
274
275
 
@@ -312,8 +313,12 @@ module IDL
312
313
  def matches?(idltype)
313
314
  super && self.size == idltype.size && self.basetype.resolved_type.matches?(idltype.basetype.resolved_type)
314
315
  end
315
- def instantiate(_context)
316
- self.is_template? ? Type::Sequence.new(@basetype.instantiate(_context), @size ? @size.instantiate(_context).value : nil) : self
316
+ def instantiate(instantiation_context)
317
+ if self.is_template?
318
+ Type::Sequence.new(@basetype.instantiate(instantiation_context), @size ? @size.instantiate(instantiation_context).value : nil)
319
+ else
320
+ self
321
+ end
317
322
  end
318
323
  end
319
324
 
@@ -352,8 +357,8 @@ module IDL
352
357
  def matches?(idltype)
353
358
  super && self.sizes == idltype.sizes && self.basetype.resolved_type.matches?(idltype.basetype.resolved_type)
354
359
  end
355
- def instantiate(_context)
356
- self.is_template? ? Type::Array.new(@basetype.instantiate(_context), @sizes.collect { |sz| sz.instantiate(_context).value }) : self
360
+ def instantiate(instantiation_context)
361
+ self.is_template? ? Type::Array.new(@basetype.instantiate(instantiation_context), @sizes.collect { |sz| sz.instantiate(instantiation_context).value }) : self
357
362
  end
358
363
  end
359
364
 
@@ -383,8 +388,8 @@ module IDL
383
388
  def matches?(idltype)
384
389
  super && self.size == idltype.size
385
390
  end
386
- def instantiate(_context)
387
- self.is_template? ? Type::WString.new(@size.instantiate(_context).value) : self
391
+ def instantiate(instantiation_context)
392
+ self.is_template? ? Type::WString.new(@size.instantiate(instantiation_context).value) : self
388
393
  end
389
394
  end
390
395
 
@@ -509,8 +514,8 @@ module IDL
509
514
  def is_template?
510
515
  @type.is_template?
511
516
  end
512
- def instantiate(_context)
513
- self.is_template? ? Type::Const.new(@type.instantiate(_context)) : self
517
+ def instantiate(instantiation_context)
518
+ self.is_template? ? Type::Const.new(@type.instantiate(instantiation_context)) : self
514
519
  end
515
520
  def is_node?(node_class)
516
521
  @type.is_node?(node_class)
@@ -13,8 +13,8 @@
13
13
  module IDL
14
14
 
15
15
  RIDL_VERSION_MAJOR = 2
16
- RIDL_VERSION_MINOR = 7
17
- RIDL_VERSION_RELEASE = 1
16
+ RIDL_VERSION_MINOR = 8
17
+ RIDL_VERSION_RELEASE = 0
18
18
  RIDL_VERSION = "#{RIDL_VERSION_MAJOR}.#{RIDL_VERSION_MINOR}.#{RIDL_VERSION_RELEASE}"
19
19
  RIDL_COPYRIGHT = "Copyright (c) 2007-#{Time.now.year} Remedy IT Expertise BV, The Netherlands".freeze
20
20
 
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.7.1
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Corino
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-02-06 00:00:00.000000000 Z
12
+ date: 2020-10-07 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.
@@ -63,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  - !ruby/object:Gem::Version
64
64
  version: '0'
65
65
  requirements: []
66
- rubygems_version: 3.0.3
66
+ rubygems_version: 3.1.4
67
67
  signing_key:
68
68
  specification_version: 4
69
69
  summary: Ruby OMG IDL compiler