@@ -81,6 +81,35 @@ export function createUnpackCall(
8181 return lua . setNodeFlags ( lua . createCallExpression ( unpack , [ expression ] , tsOriginal ) , lua . NodeFlags . TableUnpackCall ) ;
8282}
8383
84+ export function createBoundedUnpackCall (
85+ context : TransformationContext ,
86+ expression : lua . Expression ,
87+ maxUnpackItem : number ,
88+ tsOriginal ?: ts . Node
89+ ) : lua . Expression {
90+ if ( context . luaTarget === LuaTarget . Universal ) {
91+ return transformLuaLibFunction ( context , LuaLibFeature . Unpack , tsOriginal , expression ) ;
92+ }
93+
94+ // Lua 5.0 does not support this signature, so don't add the arguments there
95+ const extraArgs =
96+ context . luaTarget === LuaTarget . Lua50
97+ ? [ ]
98+ : [ lua . createNumericLiteral ( 1 ) , lua . createNumericLiteral ( maxUnpackItem ) ] ;
99+
100+ const unpack =
101+ context . luaTarget === LuaTarget . Lua50 ||
102+ context . luaTarget === LuaTarget . Lua51 ||
103+ context . luaTarget === LuaTarget . LuaJIT
104+ ? lua . createIdentifier ( "unpack" )
105+ : lua . createTableIndexExpression ( lua . createIdentifier ( "table" ) , lua . createStringLiteral ( "unpack" ) ) ;
106+
107+ return lua . setNodeFlags (
108+ lua . createCallExpression ( unpack , [ expression , ...extraArgs ] , tsOriginal ) ,
109+ lua . NodeFlags . TableUnpackCall
110+ ) ;
111+ }
112+
84113export function isUnpackCall ( node : lua . Node ) : boolean {
85114 return lua . isCallExpression ( node ) && ( node . flags & lua . NodeFlags . TableUnpackCall ) !== 0 ;
86115}
0 commit comments