# File lib_wpm/wpm.rb, line 3657
    def compile
      if (@name !~ /^[A-Z][_0-9A-Za-z]*$/) then
        raise PageError, "invalid page name: #{@name.inspect}"
      end

      src_name = File.join(@base_dir, @name, @name + '.rb')
      map_name = File.join(@base_dir, @name, @name + '.map')
      xml_name = File.join(@base_dir, @name, @name + '.xml')

      loader = Loader.new(src_name)
      context_class = loader.const_get(@name)
      unless (context_class < PageContext) then
        raise PageError, "not inherited from #{PageContext.inspect}: #{context_class}"
      end

      @context = context_class.new(self, @option)
      @widget_locator = WidgetLocator.new(@context)
      assembler = ComponentAssembler.new(@widget_locator, self)

      @widget_locator.extend(@xml_assist)
      assembler.extend(@xml_assist)

      File.open(map_name) {|input|
        @widget_locator.read(input)
      }
      File.open(xml_name) {|input|
        assembler.read(input)
      }

      # traversing child components.
      super

      nil
    end