File: transformer/module-into-object/transformer.rb

Overview
Module Structure
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: TmDoc#11
  module: Transformer
  module: ModuleIntoObject#13
has properties
function: transform / 2 #17

Code

   1  # $Id: transformer.rb,v 1.4 2011/11/30 19:26:34 machan Exp $
   2 
   3  require 'tmdoc/tmstd'
   4  require 'tmdoc/constant'
   5  require 'tmdoc/model/module'
   6  require 'tmdoc/model/object'
   7  require 'tmdoc/transformer/module-into-object/module'
   8  require 'tmdoc/transformer/module-into-object/source'
   9 
  10 
  11  module TmDoc
  12 
  13  module Transformer::ModuleIntoObject
  14 
  15  module_function
  16 
  17      def transform(mm_store, env)
  18          ASSERT.kind_of mm_store,    MM::Store
  19          ASSERT.kind_of env,         ENV::Environment
  20 
  21          mo_files = Source.transform_sources mm_store.files
  22 
  23          mo_toplevel_module  = Module.transform_root_module(
  24              mm_store.a_toplevel_module, mo_files
  25          )
  26          mo_unknown_module   = Module.transform_root_module(
  27              mm_store.an_unknown_module, mo_files
  28          )
  29          mo_builtin_module   = Module.transform_root_module(
  30              mm_store.a_builtin_module,  mo_files
  31          )
  32          mo_object_class     = Module.transform_root_module(
  33              mm_store.an_object_class,   mo_files
  34          )
  35 
  36          mo_store = MO::Store.new(
  37              mo_files,
  38              mo_toplevel_module,
  39              mo_unknown_module,
  40              mo_builtin_module,
  41              mo_object_class
  42          )
  43          mo_toplevel_module.store!   mo_store
  44          mo_unknown_module.store!    mo_store
  45          mo_builtin_module.store!    mo_store
  46          mo_object_class.store!      mo_store
  47 
  48          mo_map_of_path_to_module =
  49              mm_store.a_toplevel_module.descendants.reject { |mm_module|
  50                  mm_module.kind_of?(MMLA::RootModule) ||
  51                  mm_module.kind_of?(MMLN::Object)
  52              }.inject(
  53                  MOLA::MapOfPathToModule.new(
  54                      {
  55                          mo_toplevel_module.path => mo_toplevel_module,
  56                          mo_unknown_module.path  => mo_unknown_module,
  57                          mo_builtin_module.path  => mo_builtin_module,
  58                          mo_object_class.path    => mo_object_class
  59                      }
  60                  )
  61              ) { |map_of_path_to_module, mm_module|
  62                  mo_module = Module.transform_module mo_store, mm_module
  63 
  64                  map_of_path_to_module.update mo_module.path, mo_module
  65              }
  66          mo_store.map_of_path_to_module! mo_map_of_path_to_module
  67 
  68          ASSERT.kind_of mo_store, MO::Store
  69      end
  70  end
  71 
  72  end