Sha256: cacf31f4bcd2efb7cb0ef00887886afb398ba344840a06d099baebf208af0712
Contents?: true
Size: 1.82 KB
Versions: 2
Compression:
Stored size: 1.82 KB
Contents
module RbPlusPlus module Builders # This class handles generating source for Class nodes class ClassBuilder < Base # Different initializer to keep things clean def initialize(parent, node) super(node.name, node) self.parent = parent end def build class_name = node.name full_name = node.qualified_name self.rice_variable = "rb_c#{class_name}" self.rice_variable_type = "Rice::Data_Type<#{full_name}>" includes << "#include <rice/Class.hpp>" includes << "#include <rice/Data_Type.hpp>" includes << "#include <rice/Constructor.hpp>" includes << "#include \"#{node.file_name(false)}\"" class_defn = "\t#{rice_variable_type} #{rice_variable} = " if !parent.is_a?(ExtensionBuilder) class_defn += "Rice::define_class_under<#{full_name}>(#{parent.rice_variable}, \"#{class_name}\");" else class_defn += "Rice::define_class<#{full_name}>(\"#{class_name}\");" end body << class_defn # Constructors node.constructors.each do |init| args = [full_name, init.arguments.map {|a| a.cpp_type }].flatten body << "\t#{rice_variable}.define_constructor(Rice::Constructor<#{args.join(",")}>());" end # Methods node.methods.each do |method| m = "define_method" name = method.qualified_name if method.static? m = "define_singleton_method" name = build_function_wrapper(method) end body << "\t#{rice_variable}.#{m}(\"#{Inflector.underscore(method.name)}\", &#{name});" end # Nested Classes node.classes.each do |klass| b = ClassBuilder.new(self, klass) b.build builders << b end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rbplusplus-0.1.1 | lib/rbplusplus/builders/class.rb |
rbplusplus-0.1 | lib/rbplusplus/builders/class.rb |