comparison src/luan/lib/init.luan @ 163:3c95a2291d64

make all module fns non-global and make global fns call module fns git-svn-id: https://luan-java.googlecode.com/svn/trunk@164 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Fri, 20 Jun 2014 09:32:36 +0000
parents d310ebf4d6e7
children 78ba371ea1e9
comparison
equal deleted inserted replaced
162:01e9707a2fb0 163:3c95a2291d64
1 function Package.global(module,fn_name)
2 local function fn(...)
3 return module[fn_name](...)
4 end
5 _G[fn_name] = fn
6 return fn
7 end
8
9 local require = Package.global(Package,"require")
10
1 function Package.global_import(name) 11 function Package.global_import(name)
2 local mod = require(name) 12 local mod = require(name)
3 _G[name] = mod 13 _G[name] = mod
4 return mod 14 return mod
5 end 15 end
6 16
7 local Basic = Package.global_import("Basic","luan.lib.BasicLib.LOADER") 17 local Basic = Package.global_import("Basic","luan.lib.BasicLib.LOADER")
18 Package.global(Basic,"assert")
19 Package.global(Basic,"assert_boolean")
20 Package.global(Basic,"assert_nil")
21 Package.global(Basic,"assert_number")
22 Package.global(Basic,"assert_string")
23 Package.global(Basic,"assert_table")
24 Package.global(Basic,"do_file")
25 Package.global(Basic,"error")
26 Package.global(Basic,"get_metatable")
27 Package.global(Basic,"ipairs")
28 local load = Package.global(Basic,"load")
29 Package.global(Basic,"load_file")
30 Package.global(Basic,"pairs")
31 Package.global(Basic,"range")
32 Package.global(Basic,"raw_equal")
33 Package.global(Basic,"raw_get")
34 Package.global(Basic,"raw_len")
35 Package.global(Basic,"raw_set")
36 Package.global(Basic,"repr")
37 Package.global(Basic,"set_metatable")
38 Package.global(Basic,"to_number")
39 local to_string = Package.global(Basic,"to_string")
40 Package.global(Basic,"type")
41
8 local String = Package.global_import("String","luan.lib.StringLib.LOADER") 42 local String = Package.global_import("String","luan.lib.StringLib.LOADER")
9 43
10 -- improved global_import 44 -- improved global_import
11 function Package.global_import(name) 45 function Package.global_import(name)
12 local short = name.match("\.([^.]+)$") or name 46 local short = name.match("\.([^.]+)$") or name
25 59
26 60
27 function Io.print_to(out,...) 61 function Io.print_to(out,...)
28 local list = {} 62 local list = {}
29 for _,v in Basic.values(...) do 63 for _,v in Basic.values(...) do
30 list[#list+1] = _G.to_string(v) 64 list[#list+1] = to_string(v)
31 list[#list+1] = '\t' 65 list[#list+1] = '\t'
32 end 66 end
33 if #list == 0 then 67 if #list == 0 then
34 out.write( '\n' ) 68 out.write( '\n' )
35 else 69 else
36 list[#list] = '\n' 70 list[#list] = '\n'
37 out.write( Table.unpack(list) ) 71 out.write( Table.unpack(list) )
38 end 72 end
39 end 73 end
40 74
41 function _G.print(...) 75 function Basic.print(...)
42 Io.print_to(Io.stdout,...) 76 Io.print_to(Io.stdout,...)
43 end 77 end
78 local print = Package.global(Basic,"print")
44 79
45 local Debug = {} 80 local Debug = {}
46 Package.loaded.Debug = Debug 81 Package.loaded.Debug = Debug
47 _G.Debug = Debug 82 _G.Debug = Debug
48 83
49 function Debug.print_if_something(...) 84 function Debug.print_if_something(...)
50 if Table.pack(...).n > 0 then 85 if Table.pack(...).n > 0 then
51 _G.print(...) 86 print(...)
52 end 87 end
53 end 88 end
54 89
55 function Debug.debug(prompt) 90 function Debug.debug(prompt)
56 prompt = prompt or "luan_debug> " 91 prompt = prompt or "luan_debug> "
58 return Io.read_console_line(prompt) 93 return Io.read_console_line(prompt)
59 end 94 end
60 local env = {} 95 local env = {}
61 for line in console do 96 for line in console do
62 try 97 try
63 local fn = _G.load(line,"stdin",env,true) 98 local fn = load(line,"stdin",env,true)
64 Debug.print_if_something( fn() ) 99 Debug.print_if_something( fn() )
65 catch e do 100 catch e do
66 _G.print(e) 101 print(e)
67 end 102 end
68 end 103 end
69 end 104 end
70 105
71 106
72 -- import modules 107 -- import modules
73 _G.Reactionary = require "Reactionary" 108 Package.global_import("Reactionary")