Sha256: 800940990b0184de62fc108d9776bba4b33660a9332270a412bc0c4db35610cc

Contents?: true

Size: 1.44 KB

Versions: 2

Compression:

Stored size: 1.44 KB

Contents

module RbPlusPlus
  module Builders

    # Handles code generation dealing with user-defined modules.
    class ModuleNode < Base
      include ModuleHelpers
      include EnumerationHelpers
      include ClassHelpers

      # Has a name
      attr_accessor :name

      # And needs to specially handle any other nexted modules
      attr_accessor :modules

      # Node is the RbModule object, it proxies any unknown calls
      # off to it's internal Node object
      def initialize(code, parent = nil)
        super

        @name ||= code.name
        @modules ||= code.modules
      end

      def qualified_name
        self.code.qualified_name
      end

      def build
        with_modules

        add_child IncludeNode.new(self, "rice/Module.hpp", :system)

        # Make sure we ignore anything from the :: namespace
        if self.code && self.code.name != "::"
          with_module_functions
          with_enumerations
          with_classes
        end

        nodes.flatten!

        self.rice_variable_type = "Rice::Module"
        self.rice_variable = "rb_m#{self.qualified_name.as_variable}"
      end

      def write
        prefix = "#{rice_variable_type} #{rice_variable} = "

        if parent.rice_variable
          registrations << "#{prefix} Rice::define_module_under(#{parent.rice_variable}, \"#{@name}\");"
        else
          registrations << "#{prefix} Rice::define_module(\"#{@name}\");"
        end
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rbplusplus-0.9.1 lib/rbplusplus/builders/module.rb
rbplusplus-0.9 lib/rbplusplus/builders/module.rb