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