@ -11,7 +11,7 @@ import { libString, metatable as stringMetatable } from './lib/string'
import { getLibOS } from './lib/os'
import { getLibOS } from './lib/os'
import { getLibPackage } from './lib/package'
import { getLibPackage } from './lib/package'
import { libCoroutine } from './lib/coroutine'
import { libCoroutine } from './lib/coroutine'
import { LuaType , ensureArray , Config } from './utils'
import { LuaType , ensureArray , Config , hasOwnProperty } from './utils'
import { Thread } from './Thread'
import { Thread } from './Thread'
import { parse as parseScript } from './parser'
import { parse as parseScript } from './parser'
@ -72,6 +72,7 @@ function createEnv(
parse : ( script : string ) = > Script
parse : ( script : string ) = > Script
parseFile : ( path : string ) = > Script
parseFile : ( path : string ) = > Script
loadLib : ( name : string , value : Table ) = > void
loadLib : ( name : string , value : Table ) = > void
extendLib : ( name : string , value : Table ) = > void
} {
} {
const cfg : Config = {
const cfg : Config = {
LUA_PATH : './?.lua' ,
LUA_PATH : './?.lua' ,
@ -93,6 +94,24 @@ function createEnv(
loaded . rawset ( name , value )
loaded . rawset ( name , value )
}
}
const extendLib = ( name : string , value : Table ) : void = > {
const lib = _G . rawget ( name )
if ( lib instanceof Table ) {
for ( let i = 1 ; i < value . numValues . length ; i ++ ) {
if ( hasOwnProperty ( value . numValues , i ) ) lib . rawset ( i , value . numValues [ i ] )
}
for ( const key in value . strValues ) {
if ( hasOwnProperty ( value . strValues , key ) ) lib . rawset ( key , value . strValues [ key ] )
}
for ( let i = 0 ; i < value . keys . length ; i ++ ) {
lib . rawset ( value . keys [ i ] , value . values [ i ] )
}
return
}
loadLib ( name , value )
}
loadLib ( '_G' , _G )
loadLib ( '_G' , _G )
loadLib ( 'package' , libPackage )
loadLib ( 'package' , libPackage )
loadLib ( 'math' , libMath )
loadLib ( 'math' , libMath )
@ -122,7 +141,8 @@ function createEnv(
return {
return {
parse ,
parse ,
parseFile ,
parseFile ,
loadLib
loadLib ,
extendLib
}
}
}
}