name => value
# File metasm/parse_c.rb, line 578 def align(parser) BaseType.new(:int).align(parser) end
# File metasm/parse_c.rb, line 580 def arithmetic?; true end
# File metasm/parse_c.rb, line 613 def compare_deep(o) return true if o.object_id == self.object_id return if o.class != self.class or o.name != self.name or o.attributes != self.attributes members == o.members end
# File metasm/parse_c.rb, line 3698 def dump(scope, r=[''], dep=[]) if name r.last << @qualifier.map { |q| q.to_s << ' ' }.join if qualifier r.last << 'enum ' << @name dep |= [scope.struct_ancestors[@name]] [r, dep] else dump_def(scope, r, dep) end end
# File metasm/parse_c.rb, line 3709 def dump_def(scope, r=[''], dep=[]) r.last << @qualifier.map { |q| q.to_s << ' ' }.join if qualifier r.last << 'enum' r.last << ' ' << @name if name if members r.last << ' { ' val = -1 @members.sort_by { |m, v| v }.each { |m, v| r.last << ', ' if r.last[-2, 2] != '{ ' r.last << m if v != (val += 1) val = v r.last << ' = ' << val.to_s end } r.last << ' }' end [r, dep] end
# File metasm/parse_c.rb, line 3729 def dump_initializer(init, scope, r=[''], dep=[]) if members and ( k = @members.index(init) or (init.kind_of? CExpression and not init.op and k = @members.index(init.rexpr)) ) r.last << k dep |= [scope.struct_ancestors[@name]] [r, dep] else super(init, scope, r, dep) end end
# File metasm/parse_c.rb, line 581 def integral?; true end
# File metasm/parse_c.rb, line 584 def parse_members(parser, scope) val = -1 @members = {} loop do raise parser if not tok = parser.skipspaces break if tok.type == :punct and tok.raw == '}' name = tok.raw raise tok, 'bad enum name' if tok.type != :string or Keyword[name] or (0..9).include?(name[0]) raise parser if not tok = parser.skipspaces if tok.type == :punct and tok.raw == '=' raise tok || parser if not val = CExpression.parse(parser, scope, false) or not val = val.reduce(parser) or not tok = parser.skipspaces else val += 1 end raise tok, "enum value #{name} redefinition" if scope.symbol[name] and scope.symbol[name] != val @members[name] = val scope.symbol[name] = val if tok.type == :punct and tok.raw == '}' break elsif tok.type == :punct and tok.raw == ',' else raise tok, '"," or "}" expected' end end parse_attributes(parser) end
# File metasm/parse_c.rb, line 582 def signed?; false end