Created
          November 23, 2012 01:48 
        
      - 
      
 - 
        
Save hpcx82/4133666 to your computer and use it in GitHub Desktop.  
    Use lua to manipulate functions
  
        
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | LIBS = {} | |
| DEPS = {} | |
| EXPORTS = {'bar'} | |
| bar = {} | |
| function bar.use_nonpopular_bar() | |
| print 'bar.use_nonpopular_bar' | |
| end | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | LIBS = {} | |
| DEPS = {} | |
| EXPORTS = {'foo'} | |
| foo = {} | |
| function foo.use_nonpopular_foo() | |
| print 'foo.use_nonpopular_foo' | |
| end | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | LIBS = {} | |
| DEPS = {} | |
| EXPORTS = {'foo'} | |
| foo = {} | |
| function foo.use_nonpopular_foo() | |
| print 'foo.use_nonpopular_foo-2' | |
| end | |
| function foo.use_nonpopular_foo2() | |
| print 'foo.use_nonpopular_foo2' | |
| end | 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | -- load data from file into a separated namespace | |
| local function loaddata(file, setup) | |
| local f,e = loadfile(file) | |
| if not f then error(e, 2) end | |
| -- Create the namespace. | |
| local ns = setmetatable({}, {__index=_G}) | |
| setfenv(f, ns) | |
| f() | |
| return ns | |
| end | |
| -- load foo | |
| local nsfoo = loaddata('foo-premake-use.lua') | |
| local exported_name_foo = nsfoo.EXPORTS[1] | |
| print(exported_name_foo) | |
| local exportednsfoo = nsfoo[exported_name_foo] | |
| exportednsfoo.use_nonpopular_foo() | |
| -- bring to global namespace | |
| _G[exported_name_foo] = exportednsfoo | |
| foo.use_nonpopular_foo() | |
| -- load bar | |
| local nsbar = loaddata('bar-premake-use.lua') | |
| local exported_name_bar = nsbar.EXPORTS[1] | |
| print(exported_name_bar) | |
| local exportednsbar = nsbar[exported_name_bar] | |
| exportednsbar.use_nonpopular_bar() | |
| -- bring to global namespace | |
| _G[exported_name_bar] = exportednsbar | |
| bar.use_nonpopular_bar() | |
| -- load foo2 - handle name clashes | |
| local nsfoo2 = loaddata('foo2-premake-use.lua') | |
| local exported_name_foo2 = nsfoo2.EXPORTS[1] | |
| print(exported_name_foo2) | |
| local exportednsfoo2 = nsfoo2[exported_name_foo2] | |
| exportednsfoo2.use_nonpopular_foo() | |
| exportednsfoo2.use_nonpopular_foo2() | |
| -- merge | |
| if _G[exported_name_foo2] then | |
| local t = _G[exported_name_foo2] | |
| for k, v in pairs(exportednsfoo2) do | |
| if t[k] then | |
| -- function conflicts detected | |
| print(k .. ' already exists in table ' .. exported_name_foo2) | |
| else | |
| t[k] = v | |
| end | |
| end | |
| end | |
| -- now foo is brought into the global namespace from premake_use.lua, and get merged from different files | |
| foo.use_nonpopular_foo() | |
| foo.use_nonpopular_foo2() | |
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment