ridl 2.8.2 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
data/lib/ridl/node.rb CHANGED
@@ -10,7 +10,6 @@
10
10
  # Copyright (c) Remedy IT Expertise BV
11
11
  #--------------------------------------------------------------------
12
12
  module IDL::AST
13
-
14
13
  REPO_ID_XCHARS = ['.', '-', '_']
15
14
  REPO_ID_RE = /^[#{('a'..'z').to_a.join}#{('A'..'Z').to_a.join}#{('0'..'9').to_a.join}\.\-_\/]+$/
16
15
 
@@ -75,16 +74,13 @@ module IDL::AST
75
74
  end
76
75
 
77
76
  def concat(anns)
78
- anns.each {|_ann| self << _ann } if anns
77
+ anns.each { |_ann| self << _ann } if anns
79
78
  end
80
79
  end
81
80
 
82
81
  class Leaf
83
- attr_reader :name, :intern
82
+ attr_reader :name, :intern, :scopes, :prefix, :annotations
84
83
  attr_accessor :enclosure
85
- attr_reader :scopes
86
- attr_reader :prefix
87
- attr_reader :annotations
88
84
 
89
85
  def typename
90
86
  self.class.name
@@ -117,7 +113,7 @@ module IDL::AST
117
113
  end
118
114
 
119
115
  def scoped_name
120
- @scoped_name ||= @scopes.collect{|s| s.name}.join("::").freeze
116
+ @scoped_name ||= @scopes.collect { |s| s.name }.join("::").freeze
121
117
  end
122
118
 
123
119
  def scoped_lm_name
@@ -200,7 +196,7 @@ module IDL::AST
200
196
  @repo_ver = "1.0" unless @repo_ver
201
197
  format("IDL:%s%s:%s",
202
198
  if @prefix.empty? then "" else @prefix + "/" end,
203
- self.scopes.collect{|s| s.name}.join("/"),
199
+ self.scopes.collect { |s| s.name }.join("/"),
204
200
  @repo_ver)
205
201
  else
206
202
  @repo_id
@@ -237,7 +233,7 @@ module IDL::AST
237
233
  class Node < Leaf
238
234
  def initialize(name, enclosure)
239
235
  super
240
- @introduced = Hash.new
236
+ @introduced = {}
241
237
  @children = []
242
238
  introduce(self)
243
239
  end
@@ -261,7 +257,7 @@ module IDL::AST
261
257
  @introduced.delete(node.intern)
262
258
  end
263
259
 
264
- def redefine(node, params)
260
+ def redefine(node, _params)
265
261
  raise "\"#{node.name}\" is already defined."
266
262
  end
267
263
 
@@ -271,10 +267,11 @@ module IDL::AST
271
267
  end
272
268
  end
273
269
 
274
- def define(_type, _name, params = Hash.new)
275
- if not is_definable?(_type)
270
+ def define(_type, _name, params = {})
271
+ unless is_definable?(_type)
276
272
  raise "#{_type.to_s} is not definable in #{self.typename}."
277
273
  end
274
+
278
275
  node = search_self(_name)
279
276
  if node.nil?
280
277
  node = _type.new(_name, self, params)
@@ -286,6 +283,7 @@ module IDL::AST
286
283
  if _type != node.class
287
284
  raise "#{_name} is already defined as a type of #{node.typename}"
288
285
  end
286
+
289
287
  node = redefine(node, params)
290
288
  end
291
289
  node
@@ -325,6 +323,7 @@ module IDL::AST
325
323
  if not node.nil? and node.name != _name
326
324
  raise "\"#{_name}\" clashed with \"#{node.name}\"."
327
325
  end
326
+
328
327
  node
329
328
  end
330
329
 
@@ -391,6 +390,7 @@ module IDL::AST
391
390
  IDL::AST::Home, IDL::AST::Porttype, IDL::AST::Component, IDL::AST::Connector
392
391
  ]
393
392
  attr_reader :anchor, :next, :template, :template_params
393
+
394
394
  def initialize(_name, _enclosure, params)
395
395
  super(_name, _enclosure)
396
396
  @anchor = params[:anchor]
@@ -410,6 +410,7 @@ module IDL::AST
410
410
 
411
411
  def template_param(param)
412
412
  return nil unless @template
413
+
413
414
  param = param.to_s if ::Symbol === param
414
415
  if ::String === param
415
416
  @template.params.each_with_index do |tp, ix|
@@ -455,7 +456,7 @@ module IDL::AST
455
456
  _anchor = node.has_anchor? ? node.anchor : node
456
457
  _anchor.annotations.concat(params.delete(:annotations))
457
458
  _last = _anchor.find_last
458
- _params = params.merge({ :anchor => _anchor, :prefix => node.prefix })
459
+ _params = params.merge({ anchor: _anchor, prefix: node.prefix })
459
460
  _next = IDL::AST::Module.new(node.name, self, _params)
460
461
  _last.set_next(_next)
461
462
  @children << _next
@@ -548,7 +549,7 @@ module IDL::AST
548
549
  end
549
550
 
550
551
  def replace_prefix(pfx)
551
- self.prefix = pfx # handles validation
552
+ self.prefix = pfx # handles validation
552
553
  if @anchor.nil?
553
554
  self.replace_prefix_i(pfx)
554
555
  else
@@ -578,6 +579,7 @@ module IDL::AST
578
579
  cp = IDL::AST::TemplateParam.concrete_param(instantiation_context, _template.anchor)
579
580
  # concrete param must be a IDL::Type::NodeType and it's node a Module (should never fail)
580
581
  raise "Invalid concrete anchor found" unless cp.is_a?(IDL::Type::NodeType) && cp.node.is_a?(IDL::AST::Module)
582
+
581
583
  @anchor = cp.node
582
584
  # link our self into module chain
583
585
  @anchor.find_last.set_next(self)
@@ -608,6 +610,7 @@ module IDL::AST
608
610
  if not node.nil? and node.name != _name
609
611
  raise "\"#{_name}\" clashed with \"#{node.name}\"."
610
612
  end
613
+
611
614
  if node.nil? && @next
612
615
  node = @next.search_links(_name)
613
616
  end
@@ -633,6 +636,7 @@ module IDL::AST
633
636
 
634
637
  class TemplateParam < Leaf
635
638
  attr_reader :idltype, :concrete
639
+
636
640
  def initialize(_name, _enclosure, params)
637
641
  super(_name, _enclosure)
638
642
  @idltype = params[:type]
@@ -667,7 +671,7 @@ module IDL::AST
667
671
  def self.concrete_param(instantiation_context, tpl_elem)
668
672
  # is this an element from the template's scope
669
673
  if tpl_elem.is_template?
670
- celem = if tpl_elem.is_a?(IDL::AST::TemplateParam) # an actual template parameter?
674
+ celem = if tpl_elem.is_a?(IDL::AST::TemplateParam) # an actual template parameter?
671
675
  tpl_elem.concrete # get the template parameter's concrete (instantiation argument) value
672
676
  else
673
677
  # referenced template elements should have been instantiated already and available through context
@@ -677,6 +681,7 @@ module IDL::AST
677
681
  ctxelem.is_a?(IDL::AST::Const) ? ctxelem.expression : ctxelem.idltype
678
682
  end
679
683
  raise "cannot resolve concrete node for template #{tpl_elem.typename} #{tpl_elem.scoped_lm_name}" unless celem
684
+
680
685
  celem
681
686
  else
682
687
  tpl_elem.idltype # just return the element's idltype if not from the template scope
@@ -692,6 +697,7 @@ module IDL::AST
692
697
  IDL::AST::TemplateParam, IDL::AST::TemplateModuleReference
693
698
  ]
694
699
  attr_reader :idltype
700
+
695
701
  def initialize(_name, _enclosure, _params)
696
702
  super(_name, _enclosure, {})
697
703
  @idltype = IDL::Type::TemplateModule.new(self)
@@ -716,6 +722,7 @@ module IDL::AST
716
722
  # process concrete parameters
717
723
  @template_params.each_with_index do |_tp, _ix|
718
724
  raise "missing template parameter for #{typename} #{scoped_lm_name}: #{_tp.name}" unless _ix < _module_instance.template_params.size
725
+
719
726
  _cp = _module_instance.template_params[_ix]
720
727
  if _cp.is_a?(IDL::Type)
721
728
  raise "anonymous type definitions are not allowed!" if _cp.is_anonymous?
@@ -723,6 +730,7 @@ module IDL::AST
723
730
  unless _tp.idltype.is_a?(IDL::Type::Any) || _tp.idltype.class === _cp.resolved_type
724
731
  raise "mismatched instantiation parameter \##{_ix} #{_cp.typename} for #{typename} #{scoped_lm_name}: expected #{_tp.idltype.typename} for #{_tp.name}"
725
732
  end
733
+
726
734
  # verify concrete parameter
727
735
  case _tp.idltype
728
736
  when IDL::Type::Any # 'typename'
@@ -737,7 +745,7 @@ module IDL::AST
737
745
  # no further checks
738
746
  when IDL::Type::Sequence # 'sequence' or 'sequence<...>'
739
747
  _tptype = _tp.idltype
740
- unless _tptype.basetype.is_a?(IDL::Type::Void) # 'sequence'
748
+ unless _tptype.basetype.is_a?(IDL::Type::Void) # 'sequence'
741
749
  # check basetype
742
750
  unless _tptype.basetype.is_a?(IDL::Type::ScopedName) &&
743
751
  _tptype.basetype.is_node?(IDL::AST::TemplateParam) &&
@@ -751,6 +759,7 @@ module IDL::AST
751
759
  unless _tp.idltype.is_a?(IDL::Type::Const)
752
760
  raise "unexpected expression as instantiation parameter for #{typename} #{scoped_lm_name}: expected #{_tp.idltype.typename} for #{_tp.name}"
753
761
  end
762
+
754
763
  # match constant type
755
764
  _tp.idltype.narrow(_cp.value)
756
765
  else
@@ -765,7 +774,7 @@ module IDL::AST
765
774
 
766
775
  protected
767
776
 
768
- def walk_members_for_copy(&block)
777
+ def walk_members_for_copy
769
778
  @children.each { |c| yield(c) unless c.is_a?(IDL::AST::TemplateParam) }
770
779
  end
771
780
  end # TemplateModule
@@ -776,6 +785,7 @@ module IDL::AST
776
785
  unless _params[:tpl_type].is_a?(IDL::Type::ScopedName) && _params[:tpl_type].is_node?(IDL::AST::TemplateModule)
777
786
  raise "templated module reference type required for #{typename} #{scoped_lm_name}: got #{_params[:tpl_type].typename}"
778
787
  end
788
+
779
789
  @template = _params[:tpl_type].resolved_type.node
780
790
  _params[:tpl_params].each do |p|
781
791
  unless (p.is_a?(IDL::Type::ScopedName) || p.is_a?(IDL::Expression::ScopedName)) && p.is_node?(IDL::AST::TemplateParam)
@@ -800,7 +810,7 @@ module IDL::AST
800
810
  # concrete objects are either Expression or Type
801
811
  tp.concrete
802
812
  end
803
- mod_inst = IDL::AST::Module.new(self.name, _enclosure, { :template => @template, :template_params => inst_params })
813
+ mod_inst = IDL::AST::Module.new(self.name, _enclosure, { template: @template, template_params: inst_params })
804
814
  @template.instantiate(mod_inst, instantiation_context)
805
815
  mod_inst
806
816
  end
@@ -812,15 +822,16 @@ module IDL::AST
812
822
 
813
823
  class Include < Module
814
824
  attr_reader :filename, :fullpath
825
+
815
826
  def initialize(_name, _enclosure, params)
816
827
  super(_name, _enclosure, params)
817
828
  @filename = params[:filename]
818
829
  @fullpath = params[:fullpath]
819
830
  @defined = params[:defined] || false
820
831
  @preprocessed = params[:preprocessed] || false
821
- #overrule
832
+ # overrule
822
833
  @scopes = @enclosure.scopes
823
- @scoped_name = @scopes.collect{|s| s.name}.join("::")
834
+ @scoped_name = @scopes.collect { |s| s.name }.join("::")
824
835
  end
825
836
 
826
837
  def lm_scopes
@@ -836,13 +847,18 @@ module IDL::AST
836
847
  @defined = vars.pop
837
848
  @filename = vars.pop
838
849
  super(vars)
839
- #overrule
850
+ # overrule
840
851
  @scopes = @enclosure.scopes || []
841
- @scoped_name = @scopes.collect{|s| s.name}.join("::")
852
+ @scoped_name = @scopes.collect { |s| s.name }.join("::")
842
853
  end
843
854
 
844
- def is_defined?; @defined; end
845
- def is_preprocessed?; @preprocessed; end
855
+ def is_defined?
856
+ @defined
857
+ end
858
+
859
+ def is_preprocessed?
860
+ @preprocessed
861
+ end
846
862
 
847
863
  def introduce(node)
848
864
  @enclosure.introduce(node) unless node == self
@@ -862,9 +878,9 @@ module IDL::AST
862
878
  @filename = _template.filename
863
879
  @defined = _template.is_defined?
864
880
  @preprocessed = _template.is_preprocessed?
865
- #overrule
881
+ # overrule
866
882
  @scopes = @enclosure.scopes
867
- @scoped_name = @scopes.collect{|s| s.name}.join("::")
883
+ @scoped_name = @scopes.collect { |s| s.name }.join("::")
868
884
  self
869
885
  end
870
886
 
@@ -874,7 +890,6 @@ module IDL::AST
874
890
  end # Include
875
891
 
876
892
  class Derivable < Node
877
-
878
893
  alias :search_self_before_derived :search_self
879
894
  def search_self(_name)
880
895
  node = search_self_before_derived(_name)
@@ -895,6 +910,7 @@ module IDL::AST
895
910
  def each_ancestors(visited = [], &block)
896
911
  resolved_bases.each do |p|
897
912
  next if visited.include? p
913
+
898
914
  yield(p)
899
915
  visited.push p
900
916
  p.each_ancestors(visited, &block)
@@ -911,8 +927,9 @@ module IDL::AST
911
927
  if results.size > 1
912
928
  # check if the matched name resulted in multiple different nodes or all the same
913
929
  r_one = results.shift
914
- unless results.all? {|r| r_one == r || (r_one.class == r.class && r_one.scoped_name == r.scoped_name) }
915
- s = results.inject([r_one]) {|l, r| l << r unless l.include?(r); l }.collect{ |n| n.scoped_name }.join(", ")
930
+ unless results.all? { |r| r_one == r || (r_one.class == r.class && r_one.scoped_name == r.scoped_name) }
931
+ s = results.inject([r_one]) { |l, r| l << r unless l.include?(r)
932
+ l }.collect { |n| n.scoped_name }.join(", ")
916
933
  raise "\"#{_name}\" is ambiguous. " + s
917
934
  end
918
935
  end
@@ -945,8 +962,7 @@ module IDL::AST
945
962
  class Interface < Derivable
946
963
  DEFINABLE = [IDL::AST::Const, IDL::AST::Operation, IDL::AST::Attribute,
947
964
  IDL::AST::Struct, IDL::AST::Union, IDL::AST::Typedef, IDL::AST::Enum, IDL::AST::Enumerator]
948
- attr_reader :bases
949
- attr_reader :idltype
965
+ attr_reader :bases, :idltype
950
966
 
951
967
  def initialize(_name, _enclosure, params)
952
968
  super(_name, _enclosure)
@@ -977,22 +993,36 @@ module IDL::AST
977
993
 
978
994
  def instantiate(instantiation_context, _enclosure)
979
995
  _params = {
980
- :forward => self.is_forward?,
981
- :abstract => self.is_abstract?,
982
- :pseudo => self.is_pseudo?,
983
- :local => self.is_local?,
984
- :inherits => self.concrete_bases(instantiation_context)
996
+ forward: self.is_forward?,
997
+ abstract: self.is_abstract?,
998
+ pseudo: self.is_pseudo?,
999
+ local: self.is_local?,
1000
+ inherits: self.concrete_bases(instantiation_context)
985
1001
  }
986
1002
  # instantiate concrete interface def and validate
987
1003
  # concrete bases
988
1004
  super(instantiation_context, _enclosure, _params)
989
1005
  end
990
1006
 
991
- def is_abstract?; @abstract; end
992
- def is_local?; @local; end
993
- def is_pseudo?; @pseudo; end
994
- def is_defined?; @defined; end
995
- def is_forward?; not @defined; end
1007
+ def is_abstract?
1008
+ @abstract
1009
+ end
1010
+
1011
+ def is_local?
1012
+ @local
1013
+ end
1014
+
1015
+ def is_pseudo?
1016
+ @pseudo
1017
+ end
1018
+
1019
+ def is_defined?
1020
+ @defined
1021
+ end
1022
+
1023
+ def is_forward?
1024
+ not @defined
1025
+ end
996
1026
 
997
1027
  def add_bases(inherits_)
998
1028
  inherits_.each do |tc|
@@ -1000,11 +1030,12 @@ module IDL::AST
1000
1030
  unless (tc.is_a?(IDL::Type::NodeType) && tc.is_node?(IDL::AST::Interface))
1001
1031
  raise "invalid inheritance identifier for #{typename} #{scoped_lm_name}: #{tc.typename}"
1002
1032
  end
1033
+
1003
1034
  rtc = tc.resolved_type
1004
1035
  if rtc.node.has_ancestor?(self)
1005
1036
  raise "circular inheritance detected for #{typename} #{scoped_lm_name}: #{tc.node.scoped_lm_name} is descendant"
1006
1037
  end
1007
- if not rtc.node.is_defined?
1038
+ unless rtc.node.is_defined?
1008
1039
  raise "#{typename} #{scoped_lm_name} cannot inherit from forward declared #{tc.node.typename} #{tc.node.scoped_lm_name}"
1009
1040
  end
1010
1041
  if rtc.node.is_local? and not self.is_local?
@@ -1022,6 +1053,7 @@ module IDL::AST
1022
1053
  if self.has_base?(rtc.node)
1023
1054
  raise "#{typename} #{scoped_lm_name} cannot inherit from #{tc.node.typename} #{tc.node.scoped_lm_name} multiple times"
1024
1055
  end
1056
+
1025
1057
  # check if we indirectly derive from this base multiple times (which is ok; no further need to check)
1026
1058
  unless @resolved_bases.any? { |b| b.has_ancestor?(rtc.node) }
1027
1059
  # this is a new base so we need to check for member redefinition/ambiguity
@@ -1029,7 +1061,8 @@ module IDL::AST
1029
1061
  rtc.node.walk_members do |m|
1030
1062
  new_op_att_ << m if m.is_a?(IDL::AST::Operation) || m.is_a?(IDL::AST::Attribute)
1031
1063
  end
1032
- if new_op_att_.any? {|n| n_ = self.search_self(n.name); n_.is_a?(IDL::AST::Operation) || n_.is_a?(IDL::AST::Attribute) }
1064
+ if new_op_att_.any? { |n| n_ = self.search_self(n.name)
1065
+ n_.is_a?(IDL::AST::Operation) || n_.is_a?(IDL::AST::Attribute) }
1033
1066
  raise "#{typename} #{scoped_lm_name} cannot inherit from #{tc.node.typename} #{tc.node.scoped_lm_name} because of duplicated operations/attributes"
1034
1067
  end
1035
1068
  # no need to check for duplicate member names; this inheritance is ok
@@ -1048,13 +1081,13 @@ module IDL::AST
1048
1081
  @resolved_bases
1049
1082
  end
1050
1083
 
1051
- def operations(include_bases=false, traversed=nil)
1084
+ def operations(include_bases = false, traversed = nil)
1052
1085
  ops = @children.find_all { |c| c.is_a?(IDL::AST::Operation) }
1053
1086
  ops.concat(base_operations(traversed || [])) if include_bases
1054
1087
  ops
1055
1088
  end
1056
1089
 
1057
- def attributes(include_bases=false, traversed=nil)
1090
+ def attributes(include_bases = false, traversed = nil)
1058
1091
  atts = @children.find_all { |c| c.is_a?(IDL::AST::Attribute) }
1059
1092
  atts.concat(base_attributes(traversed || [])) if include_bases
1060
1093
  atts
@@ -1067,6 +1100,7 @@ module IDL::AST
1067
1100
  if node.is_defined?
1068
1101
  raise "#{node.typename} \"#{node.name}\" is already defined."
1069
1102
  end
1103
+
1070
1104
  node.annotations.concat(params[:annotations])
1071
1105
 
1072
1106
  _new_node = node.class.new(node.name, self, params)
@@ -1095,7 +1129,7 @@ module IDL::AST
1095
1129
  newnode = node.class.new(node.name, self, params)
1096
1130
  newnode.annotations.concat(params[:annotations])
1097
1131
  introduce(newnode)
1098
- @children << newnode # add overriding child
1132
+ @children << newnode # add overriding child
1099
1133
  return newnode
1100
1134
  end
1101
1135
  end
@@ -1116,9 +1150,7 @@ module IDL::AST
1116
1150
 
1117
1151
  class ComponentBase < Derivable
1118
1152
  DEFINABLE = []
1119
- attr_reader :base
1120
- attr_reader :interfaces
1121
- attr_reader :idltype
1153
+ attr_reader :base, :interfaces, :idltype
1122
1154
 
1123
1155
  def initialize(_name, _enclosure, params)
1124
1156
  super(_name, _enclosure)
@@ -1145,8 +1177,8 @@ module IDL::AST
1145
1177
 
1146
1178
  def instantiate(instantiation_context, _enclosure, _params = {})
1147
1179
  _params.merge!({
1148
- :base => @base ? IDL::AST::TemplateParam.concrete_param(instantiation_context, @base) : @base,
1149
- :supports => self.concrete_interfaces(instantiation_context)
1180
+ base: @base ? IDL::AST::TemplateParam.concrete_param(instantiation_context, @base) : @base,
1181
+ supports: self.concrete_interfaces(instantiation_context)
1150
1182
  })
1151
1183
  # instantiate concrete def and validate
1152
1184
  super(instantiation_context, _enclosure, _params)
@@ -1160,6 +1192,7 @@ module IDL::AST
1160
1192
  if parent.resolved_type.node.has_base?(self)
1161
1193
  raise "circular inheritance detected for #{typename} #{scoped_lm_name}: #{parent.node.scoped_lm_name} is descendant"
1162
1194
  end
1195
+
1163
1196
  @resolved_base = parent.resolved_type.node
1164
1197
  end
1165
1198
  @base = parent.node
@@ -1179,8 +1212,9 @@ module IDL::AST
1179
1212
  unless (tc.is_a?(IDL::Type::ScopedName) && tc.is_node?(IDL::AST::Interface))
1180
1213
  raise "invalid inheritance identifier for #{typename} #{scoped_lm_name}: #{tc.typename}"
1181
1214
  end
1215
+
1182
1216
  rtc = tc.resolved_type
1183
- if not rtc.node.is_defined?
1217
+ unless rtc.node.is_defined?
1184
1218
  raise "#{typename} #{scoped_lm_name} cannot support forward declared #{tc.node.typename} #{tc.node.scoped_lm_name}"
1185
1219
  end
1186
1220
  ## TODO : is this legal?
@@ -1191,13 +1225,14 @@ module IDL::AST
1191
1225
  raise "#{typename} #{scoped_lm_name} cannot support 'pseudo' #{tc.node.typename} #{tc.node.scoped_lm_name}"
1192
1226
  end
1193
1227
  ## TODO : is this legal?
1194
- #if tc.node.is_abstract?
1228
+ # if tc.node.is_abstract?
1195
1229
  # raise RuntimeError,
1196
1230
  # "'abstract' #{typename} #{scoped_lm_name} cannot support 'abstract' #{tc.node.typename} #{tc.node.scoped_lm_name}"
1197
- #end
1231
+ # end
1198
1232
  if self.has_support?(rtc.node)
1199
1233
  raise "#{typename} #{scoped_lm_name} cannot support #{tc.node.typename} #{tc.node.scoped_lm_name} multiple times"
1200
1234
  end
1235
+
1201
1236
  # check if we indirectly support this base multiple times (which is ok; no further need to check)
1202
1237
  unless @resolved_interfaces.any? { |b| b.has_ancestor?(rtc.node) }
1203
1238
  # this is a new support interface so we need to check for member redefinition/ambiguity
@@ -1205,7 +1240,8 @@ module IDL::AST
1205
1240
  rtc.node.walk_members do |m|
1206
1241
  new_op_att_ << m if m.is_a?(IDL::AST::Operation) || m.is_a?(IDL::AST::Attribute)
1207
1242
  end
1208
- if new_op_att_.any? {|n| n_ = self.search_self(n.name); n_.is_a?(IDL::AST::Operation) || n_.is_a?(IDL::AST::Attribute) }
1243
+ if new_op_att_.any? { |n| n_ = self.search_self(n.name)
1244
+ n_.is_a?(IDL::AST::Operation) || n_.is_a?(IDL::AST::Attribute) }
1209
1245
  raise "#{typename} #{scoped_lm_name} cannot support #{tc.node.typename} #{tc.node.scoped_lm_name} because of duplicated operations/attributes"
1210
1246
  end
1211
1247
  # no need to check for duplicate member names; this support is ok
@@ -1231,6 +1267,7 @@ module IDL::AST
1231
1267
  if node.is_defined?
1232
1268
  raise "#{node.typename} \"#{node.name}\" is already defined."
1233
1269
  end
1270
+
1234
1271
  node.annotations.concat(params[:annotations])
1235
1272
 
1236
1273
  _new_node = node.class.new(node.name, self, params)
@@ -1259,7 +1296,7 @@ module IDL::AST
1259
1296
  newnode = node.class.new(node.name, self, params)
1260
1297
  newnode.annotations.concat(params[:annotations])
1261
1298
  introduce(newnode)
1262
- @children << newnode # add overriding child
1299
+ @children << newnode # add overriding child
1263
1300
  return newnode
1264
1301
  end
1265
1302
  end
@@ -1281,8 +1318,7 @@ module IDL::AST
1281
1318
  class Home < ComponentBase
1282
1319
  DEFINABLE = [IDL::AST::Const, IDL::AST::Operation, IDL::AST::Attribute, IDL::AST::Initializer, IDL::AST::Finder,
1283
1320
  IDL::AST::Struct, IDL::AST::Union, IDL::AST::Typedef, IDL::AST::Enum, IDL::AST::Enumerator]
1284
- attr_reader :component
1285
- attr_reader :primarykey
1321
+ attr_reader :component, :primarykey
1286
1322
 
1287
1323
  def initialize(_name, _enclosure, params)
1288
1324
  @component = nil
@@ -1307,9 +1343,9 @@ module IDL::AST
1307
1343
  end
1308
1344
 
1309
1345
  def instantiate(instantiation_context, _enclosure)
1310
- _params = {
1311
- :component => IDL::AST::TemplateParam.concrete_param(instantiation_context, @component),
1312
- :primarykey => @primarykey ? IDL::AST::TemplateParam.concrete_param(instantiation_context, @primarykey) : @primarykey
1346
+ _params = {
1347
+ component: IDL::AST::TemplateParam.concrete_param(instantiation_context, @component),
1348
+ primarykey: @primarykey ? IDL::AST::TemplateParam.concrete_param(instantiation_context, @primarykey) : @primarykey
1313
1349
  }
1314
1350
  # instantiate concrete home def and validate
1315
1351
  super(instantiation_context, _enclosure, _params)
@@ -1325,6 +1361,7 @@ module IDL::AST
1325
1361
  unless comp.resolved_type.node.is_defined?
1326
1362
  raise "#{scoped_lm_name}: #{comp.typename} cannot manage forward declared component #{comp.node.scoped_lm_name}"
1327
1363
  end
1364
+
1328
1365
  @resolved_comp = comp.resolved_type.node
1329
1366
  end
1330
1367
  unless key&.is_a?(IDL::Type::ScopedName) && key.is_node?(IDL::AST::TemplateParam)
@@ -1332,24 +1369,24 @@ module IDL::AST
1332
1369
  unless key.nil? || (key.is_a?(IDL::Type::ScopedName) && key.is_node?(IDL::AST::Valuetype))
1333
1370
  raise "invalid primary key for #{typename} #{scoped_lm_name}: #{key.typename}"
1334
1371
  end
1372
+
1335
1373
  @resolved_pk = key.resolved_type.node if key
1336
1374
  end
1337
1375
  @component = comp.node
1338
1376
  @primarykey = key.node if key
1339
1377
  end
1340
1378
 
1341
- def operations(include_bases=false, traversed=nil)
1379
+ def operations(include_bases = false, traversed = nil)
1342
1380
  ops = @children.find_all { |c| c.is_a?(IDL::AST::Operation) }
1343
1381
  ops.concat(base_operations(traversed || [])) if include_bases
1344
1382
  ops
1345
1383
  end
1346
1384
 
1347
- def attributes(include_bases=false, traversed=nil)
1385
+ def attributes(include_bases = false, traversed = nil)
1348
1386
  atts = @children.find_all { |c| c.is_a?(IDL::AST::Attribute) }
1349
1387
  atts.concat(base_attributes(traversed || [])) if include_bases
1350
1388
  atts
1351
1389
  end
1352
-
1353
1390
  end # Home
1354
1391
 
1355
1392
  class Connector < ComponentBase
@@ -1373,8 +1410,13 @@ module IDL::AST
1373
1410
  super(instantiation_context, _enclosure, {})
1374
1411
  end
1375
1412
 
1376
- def is_defined?; true; end
1377
- def is_forward?; false; end
1413
+ def is_defined?
1414
+ true
1415
+ end
1416
+
1417
+ def is_forward?
1418
+ false
1419
+ end
1378
1420
 
1379
1421
  def add_interfaces(intfs)
1380
1422
  raise "interface support not allowed for #{typename} #{scoped_lm_name}" if intfs && !intfs.empty?
@@ -1385,6 +1427,7 @@ module IDL::AST
1385
1427
  unless (parent.is_a?(IDL::Type::NodeType) && parent.is_node?(self.class))
1386
1428
  raise "invalid inheritance identifier for #{typename} #{scoped_lm_name}: #{parent.typename}"
1387
1429
  end
1430
+
1388
1431
  @resolved_base = parent.resolved_type.node
1389
1432
  if @resolved_base.has_base?(self)
1390
1433
  raise "circular inheritance detected for #{typename} #{scoped_lm_name}: #{parent.node.scoped_lm_name} is descendant"
@@ -1393,7 +1436,7 @@ module IDL::AST
1393
1436
  @base = parent.node
1394
1437
  end
1395
1438
 
1396
- def ports(include_bases=false, traversed=nil)
1439
+ def ports(include_bases = false, traversed = nil)
1397
1440
  ports = @children.inject([]) do |lst, c|
1398
1441
  lst.concat(c.ports) if IDL::AST::Port === c
1399
1442
  lst
@@ -1402,7 +1445,7 @@ module IDL::AST
1402
1445
  ports
1403
1446
  end
1404
1447
 
1405
- def attributes(include_bases=false, traversed=nil)
1448
+ def attributes(include_bases = false, traversed = nil)
1406
1449
  atts = @children.inject([]) do |lst, c|
1407
1450
  if IDL::AST::Port === c
1408
1451
  lst.concat(c.attributes)
@@ -1427,7 +1470,6 @@ module IDL::AST
1427
1470
  end
1428
1471
  ports
1429
1472
  end
1430
-
1431
1473
  end # Connector
1432
1474
 
1433
1475
  class Component < ComponentBase
@@ -1450,19 +1492,25 @@ module IDL::AST
1450
1492
 
1451
1493
  def instantiate(instantiation_context, _enclosure)
1452
1494
  # instantiate concrete component def and validate
1453
- super(instantiation_context, _enclosure, { :forward => self.is_forward? })
1495
+ super(instantiation_context, _enclosure, { forward: self.is_forward? })
1454
1496
  end
1455
1497
 
1456
- def is_defined?; @defined; end
1457
- def is_forward?; not @defined; end
1498
+ def is_defined?
1499
+ @defined
1500
+ end
1501
+
1502
+ def is_forward?
1503
+ not @defined
1504
+ end
1458
1505
 
1459
1506
  def set_base(parent)
1460
1507
  unless parent.is_a?(IDL::Type::ScopedName) && parent.is_node?(IDL::AST::TemplateParam)
1461
1508
  unless (parent.is_a?(IDL::Type::NodeType) && parent.is_node?(self.class))
1462
1509
  raise "invalid inheritance identifier for #{typename} #{scoped_lm_name}: #{parent.typename}"
1463
1510
  end
1511
+
1464
1512
  @resolved_base = parent.resolved_type.node
1465
- if not @resolved_base.is_defined?
1513
+ unless @resolved_base.is_defined?
1466
1514
  raise "#{typename} #{scoped_lm_name} cannot inherit from forward declared #{parent.node.typename} #{parent.node.scoped_lm_name}"
1467
1515
  end
1468
1516
  if @resolved_base.has_base?(self)
@@ -1472,7 +1520,7 @@ module IDL::AST
1472
1520
  @base = parent.node
1473
1521
  end
1474
1522
 
1475
- def ports(include_bases=false, traversed=nil)
1523
+ def ports(include_bases = false, traversed = nil)
1476
1524
  ports = @children.inject([]) do |lst, c|
1477
1525
  lst.concat(c.ports) if IDL::AST::Port === c
1478
1526
  lst
@@ -1481,11 +1529,11 @@ module IDL::AST
1481
1529
  ports
1482
1530
  end
1483
1531
 
1484
- def operations(include_bases=false, traversed=nil)
1532
+ def operations(include_bases = false, traversed = nil)
1485
1533
  include_bases ? base_operations(traversed || []) : []
1486
1534
  end
1487
1535
 
1488
- def attributes(include_bases=false, traversed=nil)
1536
+ def attributes(include_bases = false, traversed = nil)
1489
1537
  atts = @children.inject([]) do |lst, c|
1490
1538
  if IDL::AST::Port === c
1491
1539
  lst.concat(c.attributes)
@@ -1510,23 +1558,23 @@ module IDL::AST
1510
1558
  end
1511
1559
  ports
1512
1560
  end
1513
-
1514
1561
  end # Component
1515
1562
 
1516
1563
  class Porttype < Node
1517
1564
  DEFINABLE = [IDL::AST::Attribute, IDL::AST::Port]
1518
1565
  attr_reader :idltype
1519
- def initialize(_name, _enclosure, params)
1566
+
1567
+ def initialize(_name, _enclosure, _params)
1520
1568
  super(_name, _enclosure)
1521
1569
  @idltype = IDL::Type::Porttype.new(self)
1522
1570
  end
1523
1571
 
1524
1572
  def ports
1525
- @children.select {|c| IDL::AST::Port === c}
1573
+ @children.select { |c| IDL::AST::Port === c }
1526
1574
  end
1527
1575
 
1528
1576
  def attributes
1529
- @children.select {|c| IDL::AST::Attribute === c}
1577
+ @children.select { |c| IDL::AST::Attribute === c }
1530
1578
  end
1531
1579
 
1532
1580
  def instantiate(instantiation_context, _enclosure)
@@ -1536,15 +1584,16 @@ module IDL::AST
1536
1584
 
1537
1585
  class Port < Leaf
1538
1586
  PORTTYPES = [:facet, :receptacle, :emitter, :publisher, :consumer, :port, :mirrorport]
1539
- PORT_MIRRORS = {:facet => :receptacle, :receptacle => :facet}
1587
+ PORT_MIRRORS = {facet: :receptacle, receptacle: :facet}
1540
1588
  EXTPORTDEF_ANNOTATION = 'ExtendedPortDef'
1541
- attr_reader :idltype
1542
- attr_reader :porttype
1589
+ attr_reader :idltype, :porttype
1590
+
1543
1591
  def initialize(_name, _enclosure, params)
1544
1592
  super(_name, _enclosure)
1545
1593
  @idltype = params[:type]
1546
1594
  @porttype = params[:porttype]
1547
1595
  raise "unknown porttype for #{typename} #{scoped_lm_name}: #{@porttype}" unless PORTTYPES.include?(@porttype)
1596
+
1548
1597
  case @porttype
1549
1598
  when :facet, :receptacle
1550
1599
  unless @idltype.is_a?(IDL::Type::Object) ||
@@ -1565,9 +1614,9 @@ module IDL::AST
1565
1614
 
1566
1615
  def instantiate(instantiation_context, _enclosure)
1567
1616
  _params = {
1568
- :type => @idltype.instantiate(instantiation_context),
1569
- :porttype => @porttype,
1570
- :multiple => @multiple
1617
+ type: @idltype.instantiate(instantiation_context),
1618
+ porttype: @porttype,
1619
+ multiple: @multiple
1571
1620
  }
1572
1621
  super(instantiation_context, _enclosure, _params)
1573
1622
  end
@@ -1577,23 +1626,23 @@ module IDL::AST
1577
1626
  end
1578
1627
 
1579
1628
  def expanded_copy(name_pfx, enc)
1580
- p = IDL::AST::Port.new("#{name_pfx}_#{self.name}", enc, {:type => @idltype, :porttype => @porttype})
1581
- p.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { :extended_port_name => name_pfx, :base_name => self.name, :mirror => false })
1629
+ p = IDL::AST::Port.new("#{name_pfx}_#{self.name}", enc, {type: @idltype, porttype: @porttype})
1630
+ p.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { extended_port_name: name_pfx, base_name: self.name, mirror: false })
1582
1631
  p # return expanded copy
1583
1632
  end
1584
1633
 
1585
1634
  def expanded_mirror_copy(name_pfx, enc)
1586
- p = IDL::AST::Port.new("#{name_pfx}_#{self.name}", enc, {:type => @idltype, :porttype => PORT_MIRRORS[@porttype]})
1587
- p.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { :extended_port_name => name_pfx, :base_name => self.name, :mirror => true })
1635
+ p = IDL::AST::Port.new("#{name_pfx}_#{self.name}", enc, {type: @idltype, porttype: PORT_MIRRORS[@porttype]})
1636
+ p.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { extended_port_name: name_pfx, base_name: self.name, mirror: true })
1588
1637
  p # return expanded copy
1589
1638
  end
1590
1639
 
1591
1640
  def ports
1592
1641
  case @porttype
1593
1642
  when :port
1594
- @idltype.resolved_type.node.ports.collect {|p| p.expanded_copy(self.name, self.enclosure) }
1643
+ @idltype.resolved_type.node.ports.collect { |p| p.expanded_copy(self.name, self.enclosure) }
1595
1644
  when :mirrorport
1596
- @idltype.resolved_type.node.ports.collect {|p| p.expanded_mirror_copy(self.name, self.enclosure) }
1645
+ @idltype.resolved_type.node.ports.collect { |p| p.expanded_mirror_copy(self.name, self.enclosure) }
1597
1646
  else
1598
1647
  [self]
1599
1648
  end
@@ -1602,9 +1651,9 @@ module IDL::AST
1602
1651
  def attributes
1603
1652
  case @porttype
1604
1653
  when :port, :mirrorport
1605
- @idltype.resolved_type.node.attributes.collect {|att|
1654
+ @idltype.resolved_type.node.attributes.collect { |att|
1606
1655
  exp_a = att.expanded_copy(self.name, self.enclosure)
1607
- exp_a.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { :extended_port_name => self.name, :base_name => att.name, :mirror => (@porttype == :mirrorport) })
1656
+ exp_a.annotations << Annotation.new(EXTPORTDEF_ANNOTATION, { extended_port_name: self.name, base_name: att.name, mirror: (@porttype == :mirrorport) })
1608
1657
  exp_a # return expanded copy
1609
1658
  }
1610
1659
  else
@@ -1615,10 +1664,11 @@ module IDL::AST
1615
1664
 
1616
1665
  class Valuebox < Leaf
1617
1666
  attr_reader :idltype, :boxed_type
1667
+
1618
1668
  def initialize(_name, _enclosure, params)
1619
1669
  super(_name, _enclosure)
1620
1670
  @idltype = IDL::Type::Valuebox.new(self)
1621
- @boxed_type = params[:type]
1671
+ @boxed_type = params[:type]
1622
1672
  unless @boxed_type.is_a?(IDL::Type::ScopedName) && @boxed_type.is_node?(IDL::AST::TemplateParam)
1623
1673
  if @boxed_type.resolved_type.is_a?(IDL::Type::Valuetype)
1624
1674
  raise "boxing valuetype #{@boxed_type.scoped_lm_name} in Valuebox #{scoped_lm_name} not allowed"
@@ -1642,7 +1692,7 @@ module IDL::AST
1642
1692
 
1643
1693
  def instantiate(instantiation_context, _enclosure)
1644
1694
  _params = {
1645
- :type => @boxed_type.instantiate(instantiation_context)
1695
+ type: @boxed_type.instantiate(instantiation_context)
1646
1696
  }
1647
1697
  super(instantiation_context, _enclosure, _params)
1648
1698
  end
@@ -1651,8 +1701,7 @@ module IDL::AST
1651
1701
  class Valuetype < Derivable
1652
1702
  DEFINABLE = [IDL::AST::Include, IDL::AST::Const, IDL::AST::Operation, IDL::AST::Attribute, IDL::AST::StateMember, IDL::AST::Initializer,
1653
1703
  IDL::AST::Struct, IDL::AST::Union, IDL::AST::Typedef, IDL::AST::Enum, IDL::AST::Enumerator]
1654
- attr_reader :bases, :interfaces
1655
- attr_reader :idltype
1704
+ attr_reader :bases, :interfaces, :idltype
1656
1705
 
1657
1706
  def initialize(_name, _enclosure, params)
1658
1707
  super(_name, _enclosure)
@@ -1677,6 +1726,7 @@ module IDL::AST
1677
1726
  if @custom && @truncatable
1678
1727
  raise "'truncatable' attribute *not* allowed for 'custom' #{typename} #{scoped_lm_name}"
1679
1728
  end
1729
+
1680
1730
  add_bases(_base[:list] || [])
1681
1731
  add_interfaces(_inherits[:supports] || [])
1682
1732
  end
@@ -1707,15 +1757,15 @@ module IDL::AST
1707
1757
 
1708
1758
  def instantiate(instantiation_context, _enclosure)
1709
1759
  _params = {
1710
- :forward => self.is_forward?,
1711
- :abstract => self.is_abstract?,
1712
- :custom => self.is_custom?,
1713
- :inherits => {
1714
- :base => {
1715
- :truncatable => self.is_truncatable?,
1716
- :list => self.concrete_bases(instantiation_context)
1760
+ forward: self.is_forward?,
1761
+ abstract: self.is_abstract?,
1762
+ custom: self.is_custom?,
1763
+ inherits: {
1764
+ base: {
1765
+ truncatable: self.is_truncatable?,
1766
+ list: self.concrete_bases(instantiation_context)
1717
1767
  },
1718
- :supports => self.concrete_interfaces(instantiation_context)
1768
+ supports: self.concrete_interfaces(instantiation_context)
1719
1769
  }
1720
1770
  }
1721
1771
  inst = super(instantiation_context, _enclosure, _params)
@@ -1723,19 +1773,43 @@ module IDL::AST
1723
1773
  inst
1724
1774
  end
1725
1775
 
1726
- def is_abstract?; @abstract; end
1727
- def is_custom?; @custom; end
1728
- def is_truncatable?; @truncatable; end
1729
- def is_defined?; @defined; end
1730
- def defined=(f); @defined = f; end
1731
- def is_forward?; @forward; end
1732
- def is_recursive?; @recursive end
1733
- def recursive=(f); @recursive = f end
1776
+ def is_abstract?
1777
+ @abstract
1778
+ end
1779
+
1780
+ def is_custom?
1781
+ @custom
1782
+ end
1783
+
1784
+ def is_truncatable?
1785
+ @truncatable
1786
+ end
1787
+
1788
+ def is_defined?
1789
+ @defined
1790
+ end
1791
+
1792
+ def defined=(f)
1793
+ @defined = f
1794
+ end
1795
+
1796
+ def is_forward?
1797
+ @forward
1798
+ end
1799
+
1800
+ def is_recursive?
1801
+ @recursive
1802
+ end
1803
+
1804
+ def recursive=(f)
1805
+ @recursive = f
1806
+ end
1734
1807
 
1735
1808
  def is_local?(recurstk = [])
1736
1809
  # not local if forward decl or recursion detected
1737
1810
  return false if is_forward? || recurstk.include?(self)
1738
- recurstk.push self # track root node to detect recursion
1811
+
1812
+ recurstk.push self # track root node to detect recursion
1739
1813
  ret = state_members.any? { |m| m.is_local?(recurstk) }
1740
1814
  recurstk.pop
1741
1815
  ret
@@ -1766,22 +1840,23 @@ module IDL::AST
1766
1840
  end
1767
1841
 
1768
1842
  def truncatable_ids
1769
- ids = [self.repository_id()]
1770
- ids.concat(@resolved_bases.first().truncatable_ids()) if self.has_concrete_base?() && self.is_truncatable?()
1843
+ ids = [self.repository_id]
1844
+ ids.concat(@resolved_bases.first.truncatable_ids) if self.has_concrete_base? && self.is_truncatable?
1771
1845
  ids
1772
1846
  end
1773
1847
 
1774
1848
  def add_bases(inherits_)
1775
1849
  inherits_.each do |tc|
1776
1850
  unless tc.is_a?(IDL::Type::ScopedName) && tc.is_node?(IDL::AST::TemplateParam)
1777
- if not (tc.is_a?(IDL::Type::ScopedName) && tc.is_node?(IDL::AST::Valuetype))
1851
+ unless (tc.is_a?(IDL::Type::ScopedName) && tc.is_node?(IDL::AST::Valuetype))
1778
1852
  raise "invalid inheritance identifier for #{typename} #{scoped_lm_name}: #{tc.typename}"
1779
1853
  end
1854
+
1780
1855
  rtc = tc.resolved_type
1781
1856
  if rtc.node.has_ancestor?(self)
1782
1857
  raise "circular inheritance detected for #{typename} #{scoped_lm_name}: #{tc.node.scoped_lm_name} is descendant"
1783
1858
  end
1784
- if not rtc.node.is_defined?
1859
+ unless rtc.node.is_defined?
1785
1860
  raise "#{typename} #{scoped_lm_name} cannot inherit from forward declared #{tc.node.typename} #{tc.node.scoped_lm_name}"
1786
1861
  end
1787
1862
  if self.is_abstract? and not rtc.node.is_abstract?
@@ -1793,7 +1868,8 @@ module IDL::AST
1793
1868
  if @resolved_bases.include?(rtc.node)
1794
1869
  raise "#{typename} #{scoped_lm_name} cannot inherit from #{tc.node.typename} #{tc.node.scoped_lm_name} multiple times"
1795
1870
  end
1796
- if (not rtc.node.is_abstract?) and @bases.size > 0
1871
+
1872
+ if (not rtc.node.is_abstract?) and !@bases.empty?
1797
1873
  raise "concrete basevalue #{tc.node.typename} #{tc.node.scoped_lm_name} MUST " +
1798
1874
  "be first and only non-abstract in inheritance list for #{typename} #{scoped_lm_name}"
1799
1875
  end
@@ -1806,17 +1882,19 @@ module IDL::AST
1806
1882
  def add_interfaces(iflist_)
1807
1883
  iflist_.each do |if_|
1808
1884
  unless if_.is_a?(IDL::Type::ScopedName) && if_.is_node?(IDL::AST::TemplateParam)
1809
- if not (if_.is_a?(IDL::Type::ScopedName) && if_.is_node?(IDL::AST::Interface))
1885
+ unless (if_.is_a?(IDL::Type::ScopedName) && if_.is_node?(IDL::AST::Interface))
1810
1886
  raise "invalid support identifier for #{typename} #{scoped_lm_name}: #{if_.typename}"
1811
1887
  end
1888
+
1812
1889
  rif_ = if_.resolved_type
1813
1890
  ### @@TODO@@ further validation
1814
- if (not rif_.node.is_abstract?) and @interfaces.size > 0
1891
+ if (not rif_.node.is_abstract?) and !@interfaces.empty?
1815
1892
  raise "concrete interface '#{rif_.node.scoped_lm_name}' inheritance not allowed for #{typename} #{scoped_lm_name}. Valuetypes can only inherit (support) a single concrete interface."
1816
1893
  end
1817
1894
  if (not rif_.node.is_abstract?) && (not is_interface_compatible?(rif_.node))
1818
1895
  raise "#{typename} #{scoped_lm_name} cannot support concrete interface #{rif_.node.scoped_lm_name} because it does not derive from inherited concrete interfaces"
1819
1896
  end
1897
+
1820
1898
  @resolved_interfaces << rif_.node
1821
1899
  end
1822
1900
  @interfaces << if_.node
@@ -1839,10 +1917,11 @@ module IDL::AST
1839
1917
  if self.is_abstract? && [IDL::AST::StateMember, IDL::AST::Initializer].include?(_type)
1840
1918
  raise "cannot define statemember #{_name} on abstract #{typename} #{scoped_lm_name}"
1841
1919
  end
1920
+
1842
1921
  super(_type, _name, *args)
1843
1922
  end
1844
1923
 
1845
- def walk_members(&block)
1924
+ def walk_members
1846
1925
  @children.each { |c| yield(c) unless c.is_a?(IDL::AST::StateMember) or
1847
1926
  c.is_a?(IDL::AST::Operation) or
1848
1927
  c.is_a?(IDL::AST::Attribute) or
@@ -1876,6 +1955,7 @@ module IDL::AST
1876
1955
  if node.is_defined?
1877
1956
  raise "#{node.typename} \"#{node.name}\" is already defined."
1878
1957
  end
1958
+
1879
1959
  node.annotations.concat(params[:annotations])
1880
1960
 
1881
1961
  _new_node = node.class.new(node.name, self, params)
@@ -1910,7 +1990,7 @@ module IDL::AST
1910
1990
 
1911
1991
  protected
1912
1992
 
1913
- def walk_members_for_copy(&block)
1993
+ def walk_members_for_copy
1914
1994
  @children.each { |c| yield(c) }
1915
1995
  end
1916
1996
 
@@ -1942,6 +2022,7 @@ module IDL::AST
1942
2022
 
1943
2023
  class StateMember < Leaf
1944
2024
  attr_reader :idltype, :visibility
2025
+
1945
2026
  def initialize(_name, _enclosure, params)
1946
2027
  @is_recursive = false
1947
2028
  @has_incomplete_type = false
@@ -1950,8 +2031,9 @@ module IDL::AST
1950
2031
  @visibility = (params[:visibility] == :public ? :public : :private)
1951
2032
  unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam)
1952
2033
  raise "Anonymous type definitions are not allowed!" if params[:type].is_anonymous?
2034
+
1953
2035
  ## check for use of incomplete types
1954
- if !@idltype.is_complete?
2036
+ unless @idltype.is_complete?
1955
2037
  ## verify type is used in sequence
1956
2038
  if @idltype.resolved_type.is_a?(IDL::Type::Sequence)
1957
2039
  ## find the (non-sequence) elementtype
@@ -1965,7 +2047,7 @@ module IDL::AST
1965
2047
  if mtype.is_a? IDL::Type::ScopedName
1966
2048
  case mtype.resolved_type
1967
2049
  when IDL::Type::Struct, IDL::Type::Union, IDL::Type::Valuetype
1968
- if !mtype.node.is_defined?
2050
+ unless mtype.node.is_defined?
1969
2051
  ## check if incomplete struct/union/valuetype is contained within definition of self
1970
2052
  enc = _enclosure
1971
2053
  while enc.is_a?(IDL::AST::Struct) || enc.is_a?(IDL::AST::Union) || enc.is_a?(IDL::AST::Valuetype)
@@ -2024,8 +2106,8 @@ module IDL::AST
2024
2106
 
2025
2107
  def instantiate(instantiation_context, _enclosure)
2026
2108
  _params = {
2027
- :type => @idltype.instantiate(instantiation_context),
2028
- :visibility => self.visibility
2109
+ type: @idltype.instantiate(instantiation_context),
2110
+ visibility: self.visibility
2029
2111
  }
2030
2112
  super(instantiation_context, _enclosure, _params)
2031
2113
  end
@@ -2049,10 +2131,11 @@ module IDL::AST
2049
2131
 
2050
2132
  class Initializer < Leaf
2051
2133
  attr_reader :raises, :params
2134
+
2052
2135
  def initialize(_name, _enclosure, params)
2053
2136
  super(_name, _enclosure)
2054
2137
  @params = (params[:params] || []).collect do |(ptype, pname)|
2055
- IDL::AST::Parameter.new(pname, self, {:attribute => :in, :type => ptype})
2138
+ IDL::AST::Parameter.new(pname, self, {attribute: :in, type: ptype})
2056
2139
  end
2057
2140
  @raises = []
2058
2141
  self.raises = params[:raises]
@@ -2064,6 +2147,7 @@ module IDL::AST
2064
2147
  (extype.is_node?(IDL::AST::Exception) || extype.is_node?(IDL::AST::TemplateParam) || extype.resolved_type.is_a?(IDL::Type::Native))
2065
2148
  raise 'Only IDL Exception types allowed in raises declaration.'
2066
2149
  end
2150
+
2067
2151
  @raises << extype
2068
2152
  end
2069
2153
  end
@@ -2080,7 +2164,7 @@ module IDL::AST
2080
2164
 
2081
2165
  def instantiate(instantiation_context, _enclosure)
2082
2166
  _params = {
2083
- :raises => self.concrete_raises(instantiation_context)
2167
+ raises: self.concrete_raises(instantiation_context)
2084
2168
  }
2085
2169
  _init = super(instantiation_context, _enclosure, _params)
2086
2170
  _init.set_concrete_parameters(instantiation_context, @params)
@@ -2098,11 +2182,10 @@ module IDL::AST
2098
2182
  def set_concrete_parameters(instantiation_context, parms)
2099
2183
  @params = parms.collect do |parm|
2100
2184
  IDL::AST::Parameter.new(parm.name, self,
2101
- { :attribute => :in,
2102
- :type => parm.idltype.instantiate(instantiation_context) })
2185
+ { attribute: :in,
2186
+ type: parm.idltype.instantiate(instantiation_context) })
2103
2187
  end
2104
2188
  end
2105
-
2106
2189
  end # Initializer
2107
2190
 
2108
2191
  class Finder < Initializer
@@ -2110,6 +2193,7 @@ module IDL::AST
2110
2193
 
2111
2194
  class Const < Leaf
2112
2195
  attr_reader :idltype, :expression, :value
2196
+
2113
2197
  def initialize(_name, _enclosure, params)
2114
2198
  super(_name, _enclosure)
2115
2199
  @idltype = params[:type]
@@ -2117,7 +2201,8 @@ module IDL::AST
2117
2201
  @value = nil
2118
2202
  unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam)
2119
2203
  raise "Anonymous type definitions are not allowed!" if @idltype.is_anonymous?
2120
- raise "Incomplete type #{@idltype.typename} not allowed here!" if !@idltype.is_complete?
2204
+ raise "Incomplete type #{@idltype.typename} not allowed here!" unless @idltype.is_complete?
2205
+
2121
2206
  unless @expression.is_a?(IDL::Expression::ScopedName) && @expression.is_node?(IDL::AST::TemplateParam)
2122
2207
  @value = @idltype.narrow(@expression.value)
2123
2208
  end
@@ -2141,21 +2226,24 @@ module IDL::AST
2141
2226
 
2142
2227
  def instantiate(instantiation_context, _enclosure)
2143
2228
  _params = {
2144
- :type => @idltype.instantiate(instantiation_context),
2145
- :expression => @expression.instantiate(instantiation_context)
2229
+ type: @idltype.instantiate(instantiation_context),
2230
+ expression: @expression.instantiate(instantiation_context)
2146
2231
  }
2147
2232
  super(instantiation_context, _enclosure, _params)
2148
2233
  end
2149
2234
  end # Const
2150
2235
 
2151
2236
  class Parameter < Leaf
2152
- IN, OUT, INOUT = 0, 1, 2
2237
+ IN = 0
2238
+ OUT = 1
2239
+ INOUT = 2
2153
2240
  ATTRIBUTE_MAP = {
2154
- :in => IN,
2155
- :out => OUT,
2156
- :inout => INOUT
2241
+ in: IN,
2242
+ out: OUT,
2243
+ inout: INOUT
2157
2244
  }
2158
2245
  attr_reader :idltype
2246
+
2159
2247
  def initialize(_name, _enclosure, params)
2160
2248
  super(_name, _enclosure)
2161
2249
  @idltype = params[:type]
@@ -2163,15 +2251,18 @@ module IDL::AST
2163
2251
  unless ATTRIBUTE_MAP.has_key?(@attribute)
2164
2252
  raise "invalid attribute for parameter: #{params[:attribute]}"
2165
2253
  end
2254
+
2166
2255
  unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam)
2167
2256
  raise "Anonymous type definitions are not allowed!" if params[:type].is_anonymous?
2257
+ raise "Exception #{@idltype.typename} is not allowed in an argument of an operation!" if @idltype.is_node?(IDL::AST::Exception)
2258
+
2168
2259
  if @idltype.is_local?
2169
2260
  if _enclosure.enclosure.is_a?(IDL::AST::Interface) && !_enclosure.enclosure.is_local?
2170
2261
  raise "Local type #{@idltype.typename} not allowed for operation on unrestricted interface"
2171
2262
  end
2172
2263
  ## IDL_Valuetype: no problem as valuetype operations are local
2173
2264
  end
2174
- if !@idltype.is_complete?
2265
+ unless @idltype.is_complete?
2175
2266
  if _enclosure.enclosure.is_a?(IDL::AST::Interface)
2176
2267
  raise "Incomplete type #{@idltype.typename} not allowed here!"
2177
2268
  end
@@ -2196,8 +2287,8 @@ module IDL::AST
2196
2287
 
2197
2288
  def instantiate(instantiation_context, _enclosure)
2198
2289
  _params = {
2199
- :type => @idltype.instantiate(instantiation_context),
2200
- :attribute => @attribute
2290
+ type: @idltype.instantiate(instantiation_context),
2291
+ attribute: @attribute
2201
2292
  }
2202
2293
  super(instantiation_context, _enclosure, _params)
2203
2294
  end
@@ -2218,13 +2309,14 @@ module IDL::AST
2218
2309
  @context = nil
2219
2310
  unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam)
2220
2311
  raise "Anonymous type definitions are not allowed!" if params[:type].is_anonymous?
2312
+
2221
2313
  if @idltype.is_local?
2222
2314
  if _enclosure.is_a?(IDL::AST::Interface) && !_enclosure.is_local?
2223
2315
  raise "Local type #{@idltype.typename} not allowed for operation on unrestricted interface"
2224
2316
  end
2225
2317
  ## IDL_Valuetype: no problem as valuetype operations are local
2226
2318
  end
2227
- if !@idltype.is_complete?
2319
+ unless @idltype.is_complete?
2228
2320
  if _enclosure.is_a?(IDL::AST::Interface)
2229
2321
  raise "Incomplete type #{@idltype.typename} not allowed here!"
2230
2322
  end
@@ -2249,8 +2341,8 @@ module IDL::AST
2249
2341
 
2250
2342
  def instantiate(instantiation_context, _enclosure)
2251
2343
  _params = {
2252
- :type => @idltype.instantiate(instantiation_context),
2253
- :oneway => @oneway,
2344
+ type: @idltype.instantiate(instantiation_context),
2345
+ oneway: @oneway
2254
2346
  }
2255
2347
  _op = super(instantiation_context, _enclosure, _params)
2256
2348
  _op.raises = self.concrete_raises(instantiation_context)
@@ -2264,6 +2356,7 @@ module IDL::AST
2264
2356
  (extype.is_node?(IDL::AST::Exception) || extype.is_node?(IDL::AST::TemplateParam) || extype.resolved_type.is_a?(IDL::Type::Native))
2265
2357
  raise 'Only IDL Exception or Native types allowed in raises declaration.'
2266
2358
  end
2359
+
2267
2360
  @raises << extype
2268
2361
  end
2269
2362
  end
@@ -2285,9 +2378,11 @@ module IDL::AST
2285
2378
  def in_params
2286
2379
  @in
2287
2380
  end
2381
+
2288
2382
  def out_params
2289
2383
  @out
2290
2384
  end
2385
+
2291
2386
  def params
2292
2387
  self.children
2293
2388
  end
@@ -2318,8 +2413,8 @@ module IDL::AST
2318
2413
  end # Operation
2319
2414
 
2320
2415
  class Attribute < Leaf
2321
- attr_reader :idltype, :readonly
2322
- attr_reader :get_raises, :set_raises
2416
+ attr_reader :idltype, :readonly, :get_raises, :set_raises
2417
+
2323
2418
  def initialize(_name, _enclosure, params)
2324
2419
  super(_name, _enclosure)
2325
2420
  @idltype = params[:type]
@@ -2327,13 +2422,15 @@ module IDL::AST
2327
2422
  @set_raises = []
2328
2423
  unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam)
2329
2424
  raise "Anonymous type definitions are not allowed!" if @idltype.is_anonymous?
2425
+ raise "Exception #{@idltype.typename} is not allowed as an attribute!" if @idltype.is_node?(IDL::AST::Exception)
2426
+
2330
2427
  if @idltype.is_local?
2331
2428
  if _enclosure.is_a?(IDL::AST::Interface) && !_enclosure.is_local?
2332
2429
  raise "Local type #{@idltype.typename} not allowed for operation on unrestricted interface"
2333
2430
  end
2334
2431
  ## IDL_Valuetype: no problem as valuetype operations are local
2335
2432
  end
2336
- if !@idltype.is_complete?
2433
+ unless @idltype.is_complete?
2337
2434
  if _enclosure.is_a?(IDL::AST::Interface)
2338
2435
  raise "Incomplete type #{@idltype.typename} not allowed here!"
2339
2436
  end
@@ -2357,8 +2454,8 @@ module IDL::AST
2357
2454
 
2358
2455
  def instantiate(instantiation_context, _enclosure)
2359
2456
  _params = {
2360
- :type => @idltype.instantiate(instantiation_context),
2361
- :readonly => @readonly
2457
+ type: @idltype.instantiate(instantiation_context),
2458
+ readonly: @readonly
2362
2459
  }
2363
2460
  _att = super(instantiation_context, _enclosure, _params)
2364
2461
  _att.get_raises = self.concrete_get_raises(instantiation_context)
@@ -2387,7 +2484,7 @@ module IDL::AST
2387
2484
  end
2388
2485
 
2389
2486
  def expanded_copy(name_pfx, enc)
2390
- att = IDL::AST::Attribute.new("#{name_pfx}_#{self.name}", enc, {:type => @idltype, :readonly => @readonly})
2487
+ att = IDL::AST::Attribute.new("#{name_pfx}_#{self.name}", enc, {type: @idltype, readonly: @readonly})
2391
2488
  att.get_raises = @get_raises unless @get_raises.empty?
2392
2489
  att.set_raises = @set_raises unless @set_raises.empty?
2393
2490
  att
@@ -2411,6 +2508,7 @@ module IDL::AST
2411
2508
  class Struct < Node
2412
2509
  DEFINABLE = [IDL::AST::Member, IDL::AST::Struct, IDL::AST::Union, IDL::AST::Enum, IDL::AST::Enumerator]
2413
2510
  attr_reader :idltype
2511
+
2414
2512
  def initialize(_name, _enclosure, params)
2415
2513
  @defined = false
2416
2514
  @recursive = false
@@ -2419,14 +2517,28 @@ module IDL::AST
2419
2517
  @idltype = IDL::Type::Struct.new(self)
2420
2518
  end
2421
2519
 
2422
- def is_defined?; @defined end
2423
- def defined=(f); @defined = f end
2424
- def is_forward?; @forward end
2425
- def is_recursive?; @recursive end
2426
- def recursive=(f); @recursive = f end
2520
+ def is_defined?
2521
+ @defined
2522
+ end
2427
2523
 
2428
- def walk_members(&block)
2429
- @children.each { |m| yield(m) if not m.is_a? IDL::AST::Member }
2524
+ def defined=(f)
2525
+ @defined = f
2526
+ end
2527
+
2528
+ def is_forward?
2529
+ @forward
2530
+ end
2531
+
2532
+ def is_recursive?
2533
+ @recursive
2534
+ end
2535
+
2536
+ def recursive=(f)
2537
+ @recursive = f
2538
+ end
2539
+
2540
+ def walk_members
2541
+ @children.each { |m| yield(m) unless m.is_a? IDL::AST::Member }
2430
2542
  end
2431
2543
 
2432
2544
  def members
@@ -2436,7 +2548,8 @@ module IDL::AST
2436
2548
  def is_local?(recurstk = [])
2437
2549
  # not local if forward decl or recursion detected
2438
2550
  return false if is_forward? || recurstk.include?(self)
2439
- recurstk.push self # track root node to detect recursion
2551
+
2552
+ recurstk.push self # track root node to detect recursion
2440
2553
  ret = members.any? { |m| m.is_local?(recurstk) }
2441
2554
  recurstk.pop
2442
2555
  ret
@@ -2456,7 +2569,7 @@ module IDL::AST
2456
2569
 
2457
2570
  def instantiate(instantiation_context, _enclosure)
2458
2571
  _params = {
2459
- :forward => @forward
2572
+ forward: @forward
2460
2573
  }
2461
2574
  _s = super(instantiation_context, _enclosure, _params)
2462
2575
  _s.defined = self.is_defined?
@@ -2465,7 +2578,7 @@ module IDL::AST
2465
2578
 
2466
2579
  protected
2467
2580
 
2468
- def walk_members_for_copy(&block)
2581
+ def walk_members_for_copy
2469
2582
  @children.each { |c| yield(c) }
2470
2583
  end
2471
2584
  end # Struct
@@ -2480,13 +2593,16 @@ module IDL::AST
2480
2593
 
2481
2594
  class Member < Leaf
2482
2595
  attr_reader :idltype
2596
+
2483
2597
  def initialize(_name, _enclosure, params)
2484
2598
  super(_name, _enclosure)
2485
- @idltype = params[:type]
2599
+ @idltype = params[:type]
2486
2600
  unless @idltype.is_a?(IDL::Type::ScopedName) && @idltype.is_node?(IDL::AST::TemplateParam)
2487
2601
  raise "Anonymous type definitions are not allowed!" if @idltype.is_anonymous?
2602
+ raise "Exception #{@idltype.typename} is not allowed as member!" if @idltype.is_node?(IDL::AST::Exception)
2603
+
2488
2604
  ## check for use of incomplete types
2489
- if !@idltype.is_complete?
2605
+ unless @idltype.is_complete?
2490
2606
  ## verify type is used in sequence
2491
2607
  if @idltype.resolved_type.is_a? IDL::Type::Sequence
2492
2608
  ## find the (non-sequence) elementtype
@@ -2500,7 +2616,7 @@ module IDL::AST
2500
2616
  if mtype.is_a? IDL::Type::ScopedName
2501
2617
  case mtype.resolved_type
2502
2618
  when IDL::Type::Struct, IDL::Type::Union, IDL::Type::Valuetype
2503
- if !mtype.node.is_defined?
2619
+ unless mtype.node.is_defined?
2504
2620
  ## check if incomplete struct/union is contained within definition of self
2505
2621
  enc = _enclosure
2506
2622
  while enc.is_a?(IDL::AST::Struct) || enc.is_a?(IDL::AST::Union) || enc.is_a?(IDL::AST::Valuetype)
@@ -2538,7 +2654,7 @@ module IDL::AST
2538
2654
 
2539
2655
  def instantiate(instantiation_context, _enclosure, _params = {})
2540
2656
  _params.merge!({
2541
- :type => @idltype.instantiate(instantiation_context),
2657
+ type: @idltype.instantiate(instantiation_context)
2542
2658
  })
2543
2659
  super(instantiation_context, _enclosure, _params)
2544
2660
  end
@@ -2548,6 +2664,7 @@ module IDL::AST
2548
2664
  DEFINABLE = [IDL::AST::UnionMember, IDL::AST::Struct, IDL::AST::Union, IDL::AST::Enum, IDL::AST::Enumerator]
2549
2665
  attr_reader :idltype
2550
2666
  attr_accessor :switchtype
2667
+
2551
2668
  def initialize(_name, _enclosure, params)
2552
2669
  @defined = false
2553
2670
  @recursive = false
@@ -2561,14 +2678,28 @@ module IDL::AST
2561
2678
  @switchtype = _switchtype
2562
2679
  end
2563
2680
 
2564
- def is_defined?; @defined; end
2565
- def defined=(f); @defined = f; end
2566
- def is_forward?; @forward; end
2567
- def is_recursive?; @recursive end
2568
- def recursive=(f); @recursive = f end
2681
+ def is_defined?
2682
+ @defined
2683
+ end
2569
2684
 
2570
- def walk_members(&block)
2571
- @children.each { |m| yield(m) if not m.is_a? IDL::AST::UnionMember }
2685
+ def defined=(f)
2686
+ @defined = f
2687
+ end
2688
+
2689
+ def is_forward?
2690
+ @forward
2691
+ end
2692
+
2693
+ def is_recursive?
2694
+ @recursive
2695
+ end
2696
+
2697
+ def recursive=(f)
2698
+ @recursive = f
2699
+ end
2700
+
2701
+ def walk_members
2702
+ @children.each { |m| yield(m) unless m.is_a? IDL::AST::UnionMember }
2572
2703
  end
2573
2704
 
2574
2705
  def members
@@ -2578,7 +2709,8 @@ module IDL::AST
2578
2709
  def is_local?(recurstk = [])
2579
2710
  # not local if forward decl or recursion detected
2580
2711
  return false if is_forward? || recurstk.include?(self)
2581
- recurstk.push self # track root node to detect recursion
2712
+
2713
+ recurstk.push self # track root node to detect recursion
2582
2714
  ret = members.any? { |m| m.is_local?(recurstk) }
2583
2715
  recurstk.pop
2584
2716
  ret
@@ -2596,6 +2728,7 @@ module IDL::AST
2596
2728
  while swtype.in_range?(def_lbl)
2597
2729
  return IDL::Expression::Value.new(@switchtype, def_lbl) unless lbls.include?(def_lbl)
2598
2730
  return nil if def_lbl == swtype.max
2731
+
2599
2732
  def_lbl = swtype.next(def_lbl)
2600
2733
  end
2601
2734
  nil
@@ -2603,6 +2736,7 @@ module IDL::AST
2603
2736
 
2604
2737
  def validate_labels
2605
2738
  return if self.is_template?
2739
+
2606
2740
  labelvals = []
2607
2741
  default_ = false
2608
2742
  members.each { |m|
@@ -2610,14 +2744,16 @@ module IDL::AST
2610
2744
  m.labels.each { |lbl|
2611
2745
  if lbl == :default
2612
2746
  raise "duplicate case label 'default' for #{typename} #{lm_name}" if default_
2747
+
2613
2748
  default_ = true
2614
2749
  else
2615
2750
  # correct type
2616
2751
  lv = @switchtype.resolved_type.narrow(lbl.value)
2617
2752
  # doubles
2618
2753
  if labelvals.include? lv
2619
- raise "duplicate case label #{lv.to_s} for #{typename} #{lm_name}"
2754
+ raise "duplicate case label #{lv} for #{typename} #{lm_name}"
2620
2755
  end
2756
+
2621
2757
  labelvals << lv
2622
2758
  end
2623
2759
  }
@@ -2645,7 +2781,7 @@ module IDL::AST
2645
2781
 
2646
2782
  def instantiate(instantiation_context, _enclosure)
2647
2783
  _params = {
2648
- :forward => @forward
2784
+ forward: @forward
2649
2785
  }
2650
2786
  _u = super(instantiation_context, _enclosure, _params)
2651
2787
  _u.set_switchtype(@switchtype.instantiate(instantiation_context))
@@ -2656,20 +2792,21 @@ module IDL::AST
2656
2792
 
2657
2793
  protected
2658
2794
 
2659
- def walk_members_for_copy(&block)
2795
+ def walk_members_for_copy
2660
2796
  @children.each { |c| yield(c) }
2661
2797
  end
2662
2798
  end # Union
2663
2799
 
2664
2800
  class UnionMember < Member
2665
2801
  attr_reader :labels
2802
+
2666
2803
  def initialize(_name, _enclosure, params)
2667
2804
  super(_name, _enclosure, params)
2668
2805
  ## if any of the labels is 'default' forget about the others
2669
2806
  if params[:labels].include?(:default)
2670
- @labels = [ :default ]
2807
+ @labels = [:default]
2671
2808
  else
2672
- @labels = params[:labels]
2809
+ @labels = params[:labels]
2673
2810
  end
2674
2811
  end
2675
2812
 
@@ -2684,7 +2821,7 @@ module IDL::AST
2684
2821
 
2685
2822
  def instantiate(instantiation_context, _enclosure)
2686
2823
  _params = {
2687
- :labels => @labels.collect { |l| l == :default ? l : l.instantiate(instantiation_context) },
2824
+ labels: @labels.collect { |l| l == :default ? l : l.instantiate(instantiation_context) }
2688
2825
  }
2689
2826
  super(instantiation_context, _enclosure, _params)
2690
2827
  end
@@ -2692,7 +2829,8 @@ module IDL::AST
2692
2829
 
2693
2830
  class Enum < Leaf
2694
2831
  attr_reader :idltype
2695
- def initialize(_name, _enclosure, params)
2832
+
2833
+ def initialize(_name, _enclosure, _params)
2696
2834
  super(_name, _enclosure)
2697
2835
  @enums = []
2698
2836
  @idltype = IDL::Type::Enum.new(self)
@@ -2719,11 +2857,11 @@ module IDL::AST
2719
2857
  def instantiate(instantiation_context, _enclosure)
2720
2858
  super(instantiation_context, _enclosure, {})
2721
2859
  end
2722
-
2723
2860
  end # Enum
2724
2861
 
2725
2862
  class Enumerator < Leaf
2726
2863
  attr_reader :idltype, :enum, :value
2864
+
2727
2865
  def initialize(_name, _enclosure, params)
2728
2866
  super(_name, _enclosure)
2729
2867
  @idltype = IDL::Type::ULong.new
@@ -2747,15 +2885,17 @@ module IDL::AST
2747
2885
  # find already instantiated Enum parent
2748
2886
  _enum = _enclosure.resolve(@enum.name)
2749
2887
  raise "Unable to resolve instantiated Enum scope for enumerator #{@enum.name}::#{name} instantiation" unless _enum
2750
- super(instantiation_context, _enclosure, { :enum => _enum, :value => @value })
2888
+
2889
+ super(instantiation_context, _enclosure, { enum: _enum, value: @value })
2751
2890
  end
2752
2891
  end # Enumerator
2753
2892
 
2754
2893
  class Typedef < Leaf
2755
2894
  attr_reader :idltype
2895
+
2756
2896
  def initialize(_name, _enclosure, params)
2757
2897
  super(_name, _enclosure)
2758
- @idltype = params[:type]
2898
+ @idltype = params[:type]
2759
2899
  end
2760
2900
 
2761
2901
  def is_local?(recurstk = [])
@@ -2772,7 +2912,7 @@ module IDL::AST
2772
2912
  end
2773
2913
 
2774
2914
  def instantiate(instantiation_context, _enclosure)
2775
- super(instantiation_context, _enclosure, { :type => @idltype.instantiate(instantiation_context) })
2915
+ super(instantiation_context, _enclosure, { type: @idltype.instantiate(instantiation_context) })
2776
2916
  end
2777
2917
  end # Typedef
2778
2918
  end