class AdLint::Cc1::Declaration
Attributes
declaration_specifiers[R]
init_declarators[R]
items[R]
Public Class Methods
new(dcl_specs, init_dcrs, sym_tbl)
click to toggle source
Calls superclass method
AdLint::Cc1::SyntaxNode::new
# File lib/adlint/cc1/syntax.rb, line 2303 def initialize(dcl_specs, init_dcrs, sym_tbl) super() @declaration_specifiers = dcl_specs @init_declarators = init_dcrs @items = build_items(dcl_specs, init_dcrs, sym_tbl) end
Public Instance Methods
inspect(indent = 0)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 2318 def inspect(indent = 0) ([" " * indent + "#{short_class_name} (#{location.inspect})"] + @items.map { |item| item.inspect(indent + 1) }).join("\n") end
location()
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 2314 def location head_location end
Private Instance Methods
build_function_declaration(dcl_specs, init_dcrs, sym_tbl)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 2353 def build_function_declaration(dcl_specs, init_dcrs, sym_tbl) if dcl_specs && sc_spec = dcl_specs.storage_class_specifier and sc_spec.type == :TYPEDEF return [] end init_dcrs.each_with_object([]) do |init_dcr, fun_dcls| if init_dcr.declarator.function? id = init_dcr.declarator.identifier sym = sym_tbl.create_new_symbol(ObjectName, id) fun_dcls.push(FunctionDeclaration.new(dcl_specs, init_dcr, sym)) end end end
build_items(dcl_specs, init_dcrs, sym_tbl)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 2324 def build_items(dcl_specs, init_dcrs, sym_tbl) build_type_declaration(dcl_specs, init_dcrs, sym_tbl) + build_function_declaration(dcl_specs, init_dcrs, sym_tbl) + build_variable_declaration(dcl_specs, init_dcrs, sym_tbl) + build_variable_definition(dcl_specs, init_dcrs, sym_tbl) end
build_type_declaration(dcl_specs, init_dcrs, sym_tbl)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 2331 def build_type_declaration(dcl_specs, init_dcrs, sym_tbl) return [] unless dcl_specs type_dcls = [] dcl_specs.type_specifiers.each do |type_spec| builder = TypeDeclarationBuilder.new(sym_tbl) type_spec.accept(builder) type_dcls.concat(builder.type_declarations) end if sc = dcl_specs.storage_class_specifier and sc.type == :TYPEDEF init_dcrs.each do |init_dcr| id = init_dcr.declarator.identifier sym = sym_tbl.create_new_symbol(TypedefName, id) type_dcls.push(TypedefDeclaration.new(dcl_specs, init_dcr, sym)) end end type_dcls end
build_variable_declaration(dcl_specs, init_dcrs, sym_tbl)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 2368 def build_variable_declaration(dcl_specs, init_dcrs, sym_tbl) return [] unless dcl_specs unless sc = dcl_specs.storage_class_specifier and sc.type == :EXTERN return [] end init_dcrs.each_with_object([]) do |init_dcr, var_dcls| if init_dcr.declarator.variable? dcr = init_dcr.declarator sym = sym_tbl.create_new_symbol(ObjectName, dcr.identifier) var_dcls.push(VariableDeclaration.new(dcl_specs, dcr, sym)) end end end
build_variable_definition(dcl_specs, init_dcrs, sym_tbl)
click to toggle source
# File lib/adlint/cc1/syntax.rb, line 2384 def build_variable_definition(dcl_specs, init_dcrs, sym_tbl) if dcl_specs && sc = dcl_specs.storage_class_specifier and sc.type == :EXTERN || sc.type == :TYPEDEF return [] end init_dcrs.each_with_object([]) do |init_dcr, var_defs| if init_dcr.declarator.variable? id = init_dcr.declarator.identifier sym = sym_tbl.create_new_symbol(ObjectName, id) var_defs.push(VariableDefinition.new(dcl_specs, init_dcr, sym)) end end end