Kaynağa Gözat

Refurbished Lua core to support Lua5.1.dll (file name) and fixed AR_Debug structure missing member

Jean-Francois Goulet 18 yıl önce
ebeveyn
işleme
ad45f9b7fb

+ 65 - 82
LuaEdit/LuaCore/LuaUtils.pas

@@ -33,7 +33,8 @@ unit LuaUtils;
 interface
 
 uses
-  SysUtils, Classes, ComCtrls, lua, lualib, lauxlib, Variants, VirtualTrees, Contnrs;
+  SysUtils, Classes, ComCtrls, lua, lualib, lauxlib, luaconf, Variants,
+  VirtualTrees, Contnrs;
 
 const
      ERR_Script ='Script Error : ';  
@@ -148,7 +149,6 @@ procedure LuaGlobalToStrings(L: PLua_State; Lines: TStrings; MaxTable: Integer =
 procedure LuaGlobalToVariables(L: PLua_State; Globals: TLuaTable; MaxTable: Integer = -1; SubTableMax: Integer = 99; CheckCyclicReferencing: Boolean = True);
 procedure LuaTableToStrings(L: Plua_State; Index: Integer; Lines: TStrings; MaxTable: Integer = -1; SubTableMax: Integer = 99; CheckCyclicReferencing: Boolean = True);
 procedure LuaTableToVariables(L: Plua_State; Index: Integer; Table: TLuaTable; MaxTable: Integer = -1; SubTableMax: Integer = 99; CheckCyclicReferencing: Boolean = True);
-procedure LuaTableToVirtualTreeView(L: Plua_State; Index: Integer; VTV: TVirtualStringTree; MaxTable: Integer; SubTableMax: Integer; CheckCyclicReferencing: Boolean);
 function LuaGetIdentValue(L: Plua_State; Ident: string; MaxTable: Integer = -1): string;
 procedure LuaSetIdentValue(L: Plua_State; Ident, Value: string; MaxTable: Integer = -1);
 procedure LuaLoadBuffer(L: Plua_State; const Code: string; const Name: string);
@@ -273,7 +273,10 @@ end;
 
 function Dequote(const QuotedStr: string): string;
 begin
-  Result := AnsiDequotedStr(QuotedStr, QuoteStr);
+  Result := QuotedStr;
+  
+  if ((AnsiStrScan(PChar(QuotedStr), QuoteStr) = QuotedStr) and (AnsiStrRScan(PChar(QuotedStr), QuoteStr) = QuoteStr)) then
+    Result := Copy(QuotedStr, 2, Length(QuotedStr) - 2);
 end;
 
 function fwriteex(F, S: PChar; Un, Len: Integer; L, Dummy: Integer): Integer;
@@ -299,7 +302,7 @@ end;
 
 function fputsex(const F, S: String; L, Dummy: Integer): Integer;
 begin
-  Result := fwriteex(PChar(F), PChar(S), SizeOf(Char), L, Length(S), Dummy);
+  Result := fwriteex(PChar(F), PChar(S), SizeOf(Char), Length(S), L, Dummy);
 end;
 
 function fputs(const S: string; Dummy: Integer): Integer;
@@ -469,7 +472,7 @@ end;
 
 function LuaToInteger(L: PLua_State; Index: Integer): Integer;
 begin
-  Result := Trunc(lua_tonumber(L, Index));  //Round(lua_tonumber(L, Index));
+  Result := Trunc(lua_tonumber(L, Index));
 end;
 
 procedure LuaPushInteger(L: PLua_State; N: Integer);
@@ -856,13 +859,14 @@ end;
 // Boolean: True/False
 // stirng : "..."
 // Table  : { Key1=Value Key2=Value }
-function LuaStackToStr(L: Plua_State; Index: Integer; MaxTable: Integer; SubTableMax: Integer): string;
+function LuaStackToStr(L: Plua_State; Index: Integer; MaxTable: Integer; SubTableMax: Integer; CheckCyclicReferencing: Boolean; TablePtrs: TList): String;
 var
   pGLobalsIndexPtr: Pointer;
+  bToFree: Boolean;
 
-  function TableToStr(Index: Integer): string;
+  function TableToStr(Index: Integer): String;
   var
-    Key, Value: string;
+    Key, Value: String;
     Count: Integer;
 
   begin
@@ -870,6 +874,7 @@ var
     Count := 0;
     lua_pushnil(L);
 
+
     // Go through the current table
     while (lua_next(L, Index) <> 0) do
     begin
@@ -883,19 +888,26 @@ var
 
       // Key to string
       if lua_type(L, -2) = LUA_TNUMBER then
-        Key := '[' + Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax)) + ']'
+        Key := '[' + Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax, CheckCyclicReferencing, TablePtrs)) + ']'
       else
-        Key := Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax));
+        Key := Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax, CheckCyclicReferencing, TablePtrs));
 
       // Value to string...
       if ((Key = '_G') or (lua_topointer(L, -1) = pGLobalsIndexPtr)) then
         Value := LuaGlobalVariableStr
+      else if lua_type(L, -1) = LUA_TTABLE then
+      begin
+        if Assigned(TablePtrs) and CheckCyclicReferencing and (TablePtrs.IndexOf(lua_topointer(L, -1)) <> -1) then
+          Value := '[CYCLIC_REFERENCING_DETECTED]'
+        else
+          Value := LuaStackToStr(L, -1, MaxTable, SubTableMax, CheckCyclicReferencing, TablePtrs);
+      end
       else
-        Value := LuaStackToStr(L, -1, MaxTable, SubTableMax);
+        Value := LuaStackToStr(L, -1, MaxTable, SubTableMax, CheckCyclicReferencing, TablePtrs);
 
       if lua_type(L, -1) = LUA_TFUNCTION then
       begin
-        if lua_iscfunction(L, -1) then
+        if lua_iscfunction(L, -1) = 1 then
           Result := Result + Format('%s=CFUNC:%p ', [Key, lua_topointer(L, -1)])
         else
           Result := Result + Format('%s=FUNC:%p ', [Key, lua_topointer(L, -1)]);
@@ -915,8 +927,15 @@ var
 
     Result := Result + '}';
   end;
-
 begin
+  bToFree := False;
+
+  if not Assigned(TablePtrs) then
+  begin
+    TablePtrs := TList.Create;
+    bToFree := True;
+  end;
+
   if (MaxTable < 0) then
     MaxTable := DefaultMaxTable;
 
@@ -930,22 +949,35 @@ begin
   LUA_TNUMBER:
     Result := Format('%g', [lua_tonumber(L, Index)]);
   LUA_TBOOLEAN:
-    Result := BoolToStr(lua_toboolean(L, Index) <> 0, True);
+    Result := BoolToStr((lua_toboolean(L, Index) = 1), True);
   LUA_TSTRING:
     Result := '"'+lua_tostring(L, Index)+'"';
   LUA_TTABLE:
   begin
     if SubTableCount < SubTableMax then
     begin
-      SubTableCount := SubTableCount + 1;
-      Result := TableToStr(Index);
-      SubTableCount := SubTableCount - 1;
+      if Assigned(TablePtrs) and CheckCyclicReferencing and (TablePtrs.IndexOf(lua_topointer(L, Index)) <> -1) then
+      begin
+        Result := '[CYCLIC_REFERENCING_DETECTED]'
+      end
+      else
+      begin
+        if Assigned(TablePtrs) then
+          TablePtrs.Add(lua_topointer(L, Index));
+
+        SubTableCount := SubTableCount + 1;
+        Result := TableToStr(Index);
+        SubTableCount := SubTableCount - 1;
+
+        //if Assigned(TablePtrs) then
+          //TablePtrs.Delete(TablePtrs.IndexOf(lua_topointer(L, Index)));
+      end;
     end
     else
       Result := '[SUB_TABLE_MAX_LEVEL_HAS_BEEN_REACHED]';
   end;
   LUA_TFUNCTION:
-    if (lua_iscfunction(L, Index) <> 0) then
+    if lua_iscfunction(L, Index) = 1 then
       Result := Format('CFUNC:%p', [Pointer(lua_tocfunction(L, Index))])
     else
       Result := Format('FUNC:%p', [lua_topointer(L, Index)]);
@@ -958,6 +990,9 @@ begin
   else
     Assert(False);
   end;
+
+  if bToFree then
+    TablePtrs.Free;
 end;
 
 procedure LuaShowStack(L: Plua_State; Caption: string);
@@ -969,8 +1004,7 @@ begin
   S := '[' + Caption + ']';
   for I := N downto 1 do
   begin
-    S := S + CRLF + Format('%3d,%3d:%s', [LuaAbsIndex(L, I), LuaIncIndex(L, I),
-      LuaStackToStr(L, I, -1)]);
+    S := S + CRLF + Format('%3d,%3d:%s', [LuaAbsIndex(L, I), LuaIncIndex(L, I), LuaStackToStr(L, I, -1)]);
   end;
   ShowMessage(S);
 end;
@@ -1082,16 +1116,16 @@ begin
   lua_pop(L, Count + 1);
 end;
 
-procedure LuaStackToStrings(L: Plua_State; Lines: TStrings; MaxTable: Integer = -1; SubTableMax: Integer = 99);
+procedure LuaStackToStrings(L: Plua_State; Lines: TStrings; MaxTable: Integer; SubTableMax: Integer; CheckCyclicReferencing: Boolean);
 var
   I: Integer;
 begin
   Lines.Clear;
   for I := lua_gettop(L) downto 1 do
-    Lines.Add(LuaStackToStr(L, I, MaxTable, SubTableMax));
+    Lines.Add(LuaStackToStr(L, I, MaxTable, SubTableMax, CheckCyclicReferencing));
 end;
 
-procedure LuaLocalToStrings(L: Plua_State; Lines: TStrings; MaxTable: Integer; Level: Integer; SubTableMax: Integer);
+procedure LuaLocalToStrings(L: Plua_State; Lines: TStrings; MaxTable: Integer; Level: Integer; SubTableMax: Integer; CheckCyclicReferencing: Boolean);
 var
   Name: PChar;
   Index: Integer;
@@ -1109,7 +1143,7 @@ begin
 
   while (Name <> nil) do
   begin
-    Lines.Values[Name] := LuaStackToStr(L, -1, MaxTable, SubTableMax);
+    Lines.Values[Name] := LuaStackToStr(L, -1, MaxTable, SubTableMax, CheckCyclicReferencing);
     lua_pop(L, 1);
     Inc(Index);
     Name := lua_getlocal(L, AR, Index);
@@ -1198,59 +1232,13 @@ begin
   lua_pushnil(L);
   while (lua_next(L, Index) <> 0) do
   begin
-    Key := Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax));
-    Value := LuaStackToStr(L, -1, MaxTable, SubTableMax);
+    Key := Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax, CheckCyclicReferencing));
+    Value := LuaStackToStr(L, -1, MaxTable, SubTableMax, CheckCyclicReferencing);
     Lines.Values[Key] := Value;
     lua_pop(L, 1);
   end;
 end;
 
-procedure LuaTableToTreeView(L: Plua_State; Index: Integer; TV: TTreeView; MaxTable: Integer; SubTableMax: Integer);
-var
-  pGLobalsIndexPtr: Pointer;
-  
-  // Go through all child of current table and create nodes
-  procedure ParseTreeNode(TreeNode: TTreeNode; Index: Integer);
-  var
-    Key: string;
-  begin
-    Index := LuaAbsIndex(L, Index);
-
-    lua_pushnil(L);
-    while (lua_next(L, Index) <> 0) do
-    begin
-      Key := Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax));
-      if (lua_type(L, -1) <> LUA_TTABLE) then
-        TV.Items.AddChild(TreeNode, Key + '=' + LuaStackToStr(L, -1, MaxTable, SubTableMax))
-      else
-      begin
-        if ((Key = '_G') or (lua_topointer(L, -1) = pGLobalsIndexPtr)) then
-        begin
-          TV.Items.AddChild(TreeNode, Key + '=[LUA_GLOBALSINDEX]')
-        end
-        else
-        begin
-          if SubTableCount < SubTableMax then
-          begin
-            SubTableCount := SubTableCount + 1;
-            ParseTreeNode(TV.Items.AddChild(TreeNode, Key), -1);
-            SubTableCount := SubTableCount - 1;
-          end;
-        end;
-      end;
-      lua_pop(L, 1);
-    end;
-  end;
-begin
-  Assert(lua_type(L, Index) = LUA_TTABLE);
-  TV.Items.BeginUpdate;
-  TV.Items.Clear;
-  try
-    ParseTreeNode(nil, Index);
-  finally
-    TV.Items.EndUpdate;
-  end;
-end;
 
 function LuaGetIdentValue(L: Plua_State; Ident: string; MaxTable: Integer): string;
 const
@@ -1286,9 +1274,9 @@ begin
   lua_sethook(L, Hook, 0, Count);
   if (lua_pcall(L, 0, 0, 0) = 0) then
     LuaRawGetTable(L, LUA_GLOBALSINDEX, DebugValue);
-  Result := LuaStackToStr(L, -1, MaxTable);
+  Result := LuaStackToStr(L, -1, MaxTable, MaxTable, True);
   lua_remove(L, -1);
-  lua_dostring(L, DebugValue + '=nil');
+  luaL_dostring(L, DebugValue + '=nil');
   lua_sethook(L, Hook, Mask, Count);
 end;
 
@@ -1387,7 +1375,7 @@ begin
   if (luaL_loadbuffer(L, PChar(Code), Length(Code), PChar(Name)) = 0) then
     Exit;
 
-  LuaProcessErrorMessage(LuaStackToStr(L, -1, -1), Title, Line, Msg);
+  LuaProcessErrorMessage(LuaStackToStr(L, -1, -1, 99, True), Title, Line, Msg);
   raise ELuaException.Create(Title, Line, Msg);
 end;
 
@@ -1412,16 +1400,11 @@ begin
   if (lua_pcall(L, NArgs, NResults, ErrFunc) = 0) then
     Exit;
 
-  LuaProcessErrorMessage(Dequote(LuaStackToStr(L, -1, -1)),
-    Title, Line, Msg);
+  LuaProcessErrorMessage(Dequote(LuaStackToStr(L, -1, -1, 99, True)), Title, Line, Msg);
   raise ELuaException.Create(Title, Line, Msg);
 end;
 
-function LuaPCallFunction(L: Plua_State; FunctionName :String;
-                          const Args: array of Variant;
-                          Results : PVariantArray;
-                          ErrFunc: Integer=0;
-                          NResults :Integer=LUA_MULTRET):Integer;
+function LuaPCallFunction(L: Plua_State; FunctionName :String; const Args: array of Variant; Results : PVariantArray; ErrFunc: Integer=0; NResults :Integer=LUA_MULTRET):Integer;
 var
    NArgs, i: Integer;
 

+ 46 - 23
LuaEdit/LuaCore/LuaVirtualTrees.pas

@@ -31,7 +31,7 @@ type
     sValue: String;
   end;
 
-procedure LuaTableToVirtualTreeView(L: Plua_State; Index: Integer; VTV: TVirtualStringTree; MaxTable: Integer; SubTableMax: Integer);
+procedure LuaTableToVirtualTreeView(L: Plua_State; Index: Integer; VTV: TVirtualStringTree; MaxTable: Integer; SubTableMax: Integer; CheckCyclicReferencing: Boolean);
 
 var
   SubTableCount: Integer;
@@ -39,9 +39,11 @@ var
   
 implementation  
 
-procedure LuaTableToVirtualTreeView(L: Plua_State; Index: Integer; VTV: TVirtualStringTree; MaxTable: Integer; SubTableMax: Integer);
+procedure LuaTableToVirtualTreeView(L: Plua_State; Index: Integer; VTV: TVirtualStringTree; MaxTable: Integer; SubTableMax: Integer; CheckCyclicReferencing: Boolean);
 var
   pGLobalsIndexPtr: Pointer;
+  PtrsList: TList;
+  pTreeNodeData: PBasicTreeData;
   
   // Go through all child of current table and create nodes
   procedure ParseTreeNode(TreeNode: PVirtualNode; Index: Integer);
@@ -52,45 +54,65 @@ var
   begin
     // Retreive absolute index 
     Index := LuaAbsIndex(L, Index);
-
-
     lua_pushnil(L);
+
     while (lua_next(L, Index) <> 0) do
     begin
-      Key := Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax));
-      if lua_type(L, -1) <> LUA_TTABLE then
-      begin
-        pData := VTV.GetNodeData(VTV.AddChild(TreeNode));
-        pData.sName := Key;
-        pData.sValue := LuaStackToStr(L, -1, MaxTable, SubTableMax);
-      end
+      if Assigned(TreeNode) then
+        pTreeNodeData := VTV.GetNodeData(TreeNode)
       else
+        pTreeNodeData := nil;
+
+      if (pTreeNodeData = nil) or (pTreeNodeData.sValue <> '[CYCLIC_REFERENCING_DETECTED]') then
       begin
-        if ((Key = '_G') or (lua_topointer(L, -1) = pGLobalsIndexPtr)) then
+        Key := Dequote(LuaStackToStr(L, -2, MaxTable, SubTableMax, CheckCyclicReferencing));
+
+        if lua_type(L, -1) <> LUA_TTABLE then
         begin
           pData := VTV.GetNodeData(VTV.AddChild(TreeNode));
           pData.sName := Key;
-          pData.sValue := '[LUA_GLOBALSINDEX]';
+          pData.sValue := LuaStackToStr(L, -1, MaxTable, SubTableMax, CheckCyclicReferencing);
         end
         else
         begin
-          pNode := VTV.AddChild(TreeNode);
-          pData := VTV.GetNodeData(pNode);
-          pData.sName := Key;
-          pData.sValue := LuaStackToStr(L, -1, MaxTable, SubTableMax);
-
-          if SubTableCount < SubTableMax then
+          if ((Key = '_G') or (lua_topointer(L, -1) = pGLobalsIndexPtr)) then
+          begin
+            pData := VTV.GetNodeData(VTV.AddChild(TreeNode));
+            pData.sName := Key;
+            pData.sValue := '[LUA_GLOBALSINDEX]';
+          end
+          else
           begin
-            SubTableCount := SubTableCount + 1;
-            ParseTreeNode(pNode, -1);
-            SubTableCount := SubTableCount - 1;
+            pNode := VTV.AddChild(TreeNode);
+            pData := VTV.GetNodeData(pNode);
+            pData.sName := Key;
+
+            if CheckCyclicReferencing and (PtrsList.IndexOf(lua_topointer(L, -1)) <> -1) then
+              pData.sValue := '[CYCLIC_REFERENCING_DETECTED]'
+            else
+              pData.sValue := LuaStackToStr(L, -1, MaxTable, SubTableMax, CheckCyclicReferencing);
+
+            if SubTableCount < SubTableMax then
+            begin
+              if CheckCyclicReferencing then
+                PtrsList.Add(lua_topointer(L, -1));
+
+              SubTableCount := SubTableCount + 1;
+              ParseTreeNode(pNode, -1);
+              SubTableCount := SubTableCount - 1;
+
+              if not Assigned(TreeNode) then
+                PtrsList.Clear;
+            end;
           end;
         end;
       end;
-        lua_pop(L, 1);
+
+      lua_pop(L, 1);
     end;
   end;
 begin
+  PtrsList := TList.Create;
   Assert(lua_type(L, Index) = LUA_TTABLE);
   lua_checkstack(L, SubTableMax * 3); // Ensure there is enough space on stack to work with according to user's setting
   pGLobalsIndexPtr := lua_topointer(L, LUA_GLOBALSINDEX); // Retrieve globals index pointer for later conditions
@@ -100,6 +122,7 @@ begin
     ParseTreeNode(nil, Index);
   finally
     VTV.EndUpdate;
+    PtrsList.Free;
   end;
 end;
 

+ 38 - 38
LuaEdit/LuaCore/lauxlib.pas

@@ -1,5 +1,5 @@
 (*
-** $Id: lauxlib.pas,v 1.3 2006-11-17 00:02:16 jfgoulet Exp $
+** $Id: lauxlib.pas,v 1.4 2007-01-20 16:40:27 jfgoulet Exp $
 ** Auxiliary functions for building Lua libraries
 ** See Copyright Notice in lua.h
 **
@@ -17,8 +17,8 @@ uses lua, luaconf;
 
 
 {$ifdef LUA_COMPAT_GETN}
-function luaL_getn(L: Plua_State; t: Integer): Integer; cdecl external 'lua.dll';
-procedure luaL_setn(L: Plua_State; t: Integer; n: Integer); cdecl external 'lua.dll';
+function luaL_getn(L: Plua_State; t: Integer): Integer; cdecl external 'lua5.1.dll';
+procedure luaL_setn(L: Plua_State; t: Integer; n: Integer); cdecl external 'lua5.1.dll';
 {$else}
 function luaL_getn(L: Plua_State; t: Integer): Integer;
 procedure luaL_setn(L: Plua_State; t: Integer; n: Integer);
@@ -26,7 +26,7 @@ procedure luaL_setn(L: Plua_State; t: Integer; n: Integer);
 
 {$ifdef LUA_COMPAT_OPENLIB}
 procedure luaL_openlib(L: Plua_State; libname: PChar;
-                               R: PluaL_reg; Nup: Integer); cdecl external 'lua.dll' name 'luaI_openlib';
+                               R: PluaL_reg; Nup: Integer); cdecl external 'lua5.1.dll' name 'luaI_openlib';
 {$endif}
 
 const
@@ -40,47 +40,47 @@ type
   PluaL_Reg = ^luaL_Reg;
 
 procedure luaI_openlib(L: Plua_State; libname: PChar;
-                       R: PluaL_reg; nup: Integer); cdecl external 'lua.dll';
+                       R: PluaL_reg; nup: Integer); cdecl external 'lua5.1.dll';
 procedure luaL_register(L: Plua_State; libname: PChar;
-                        const R: PluaL_reg); cdecl external 'lua.dll';
-function luaL_getmetafield(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl external 'lua.dll';
-function luaL_callmeta(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl external 'lua.dll';
-function luaL_typerror(L: Plua_State; narg: Integer; const tname: PChar): Integer; cdecl external 'lua.dll';
-function luaL_argerror(L: Plua_State; numarg: Integer; const extramsg: PChar): Integer; cdecl external 'lua.dll';
-function luaL_checklstring(L: Plua_State; numArg: Integer; s: Psize_t): PChar; cdecl external 'lua.dll';
+                        const R: PluaL_reg); cdecl external 'lua5.1.dll';
+function luaL_getmetafield(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl external 'lua5.1.dll';
+function luaL_callmeta(L: Plua_State; obj: Integer; const e: PChar): Integer; cdecl external 'lua5.1.dll';
+function luaL_typerror(L: Plua_State; narg: Integer; const tname: PChar): Integer; cdecl external 'lua5.1.dll';
+function luaL_argerror(L: Plua_State; numarg: Integer; const extramsg: PChar): Integer; cdecl external 'lua5.1.dll';
+function luaL_checklstring(L: Plua_State; numArg: Integer; s: Psize_t): PChar; cdecl external 'lua5.1.dll';
 function luaL_optlstring(L: Plua_State; numArg: Integer;
-                         const def: PChar; s: Psize_t): PChar; cdecl external 'lua.dll';
-function luaL_checknumber(L: Plua_State; numArg: Integer): LUA_NUMBER; cdecl external 'lua.dll';
-function luaL_optnumber(L: Plua_State; nArg: Integer; def: LUA_NUMBER): LUA_NUMBER; cdecl external 'lua.dll';
+                         const def: PChar; s: Psize_t): PChar; cdecl external 'lua5.1.dll';
+function luaL_checknumber(L: Plua_State; numArg: Integer): LUA_NUMBER; cdecl external 'lua5.1.dll';
+function luaL_optnumber(L: Plua_State; nArg: Integer; def: LUA_NUMBER): LUA_NUMBER; cdecl external 'lua5.1.dll';
 
-function luaL_checkinteger(L: Plua_State; numArg: Integer): LUA_INTEGER; cdecl external 'lua.dll';
-function luaL_optinteger(L: Plua_State; nArg: Integer; def: LUA_INTEGER): LUA_INTEGER; cdecl external 'lua.dll';
+function luaL_checkinteger(L: Plua_State; numArg: Integer): LUA_INTEGER; cdecl external 'lua5.1.dll';
+function luaL_optinteger(L: Plua_State; nArg: Integer; def: LUA_INTEGER): LUA_INTEGER; cdecl external 'lua5.1.dll';
 
-procedure luaL_checkstack(L: Plua_State; sz: Integer; const msg: PChar); cdecl external 'lua.dll';
-procedure luaL_checktype(L: Plua_State; narg, t: Integer); cdecl external 'lua.dll';
-procedure luaL_checkany(L: Plua_State; narg: Integer); cdecl external 'lua.dll';
+procedure luaL_checkstack(L: Plua_State; sz: Integer; const msg: PChar); cdecl external 'lua5.1.dll';
+procedure luaL_checktype(L: Plua_State; narg, t: Integer); cdecl external 'lua5.1.dll';
+procedure luaL_checkany(L: Plua_State; narg: Integer); cdecl external 'lua5.1.dll';
 
-function luaL_newmetatable(L: Plua_State; const tname: PChar): Integer; cdecl external 'lua.dll';
-function luaL_checkudata(L: Plua_State; ud: Integer; const tname: PChar): Pointer; cdecl external 'lua.dll';
+function luaL_newmetatable(L: Plua_State; const tname: PChar): Integer; cdecl external 'lua5.1.dll';
+function luaL_checkudata(L: Plua_State; ud: Integer; const tname: PChar): Pointer; cdecl external 'lua5.1.dll';
 
-procedure luaL_where(L: Plua_State; lvl: Integer); cdecl external 'lua.dll';
-function luaL_error(L: Plua_State; const fmt: PChar): Integer; varargs; cdecl external 'lua.dll';
+procedure luaL_where(L: Plua_State; lvl: Integer); cdecl external 'lua5.1.dll';
+function luaL_error(L: Plua_State; const fmt: PChar): Integer; varargs; cdecl external 'lua5.1.dll';
 
-function luaL_checkoption(L: Plua_State; narg: Integer; def: PChar; lst: array of PChar): Integer; cdecl external 'lua.dll';
+function luaL_checkoption(L: Plua_State; narg: Integer; def: PChar; lst: array of PChar): Integer; cdecl external 'lua5.1.dll';
 
-function luaL_ref(L: Plua_State; t: Integer): Integer; cdecl external 'lua.dll';
-procedure luaL_unref(L: Plua_State; t: Integer; ref: Integer); cdecl external 'lua.dll';
+function luaL_ref(L: Plua_State; t: Integer): Integer; cdecl external 'lua5.1.dll';
+procedure luaL_unref(L: Plua_State; t: Integer; ref: Integer); cdecl external 'lua5.1.dll';
 
-function luaL_loadfile(L: Plua_State; const fileName: PChar): Integer; cdecl external 'lua.dll';
+function luaL_loadfile(L: Plua_State; const fileName: PChar): Integer; cdecl external 'lua5.1.dll';
 function luaL_loadbuffer(L: Plua_State; const buff: PChar; sz: size_t;
-                                const name: PChar): Integer; cdecl external 'lua.dll';
-function luaL_loadstring(L: Plua_State; const s: PChar): Integer; cdecl external 'lua.dll';
+                                const name: PChar): Integer; cdecl external 'lua5.1.dll';
+function luaL_loadstring(L: Plua_State; const s: PChar): Integer; cdecl external 'lua5.1.dll';
 
-function luaL_newstate: Plua_State; cdecl external 'lua.dll';
+function luaL_newstate: Plua_State; cdecl external 'lua5.1.dll';
 
-function luaL_gsub(L: Plua_State; const s, p, r: PChar): PChar; cdecl external 'lua.dll';
+function luaL_gsub(L: Plua_State; const s, p, r: PChar): PChar; cdecl external 'lua5.1.dll';
 
-function luaL_findtable(L: Plua_State; idx: Integer; const fname: PChar; szhint: Integer): PChar; cdecl external 'lua.dll';
+function luaL_findtable(L: Plua_State; idx: Integer; const fname: PChar; szhint: Integer): PChar; cdecl external 'lua5.1.dll';
 
 (*
 ** ===============================================================
@@ -131,12 +131,12 @@ procedure luaL_putchar(B: PluaL_Buffer; c: Char);
 
 function luaL_addsize(B: PLuaL_Buffer; N: Integer): PChar;
 
-procedure luaL_buffinit(L: Plua_State; B: PluaL_Buffer); cdecl external 'lua.dll';
-function luaL_prepbuffer(B: PluaL_Buffer): PChar; cdecl external 'lua.dll';
-procedure luaL_addlstring(B: PluaL_Buffer; const s: PChar; l: size_t); cdecl external 'lua.dll';
-procedure luaL_addstring(B: PluaL_Buffer; const s: PChar); cdecl external 'lua.dll';
-procedure luaL_addvalue(B: PluaL_Buffer); cdecl external 'lua.dll';
-procedure luaL_pushresult(B: PluaL_Buffer); cdecl external 'lua.dll';
+procedure luaL_buffinit(L: Plua_State; B: PluaL_Buffer); cdecl external 'lua5.1.dll';
+function luaL_prepbuffer(B: PluaL_Buffer): PChar; cdecl external 'lua5.1.dll';
+procedure luaL_addlstring(B: PluaL_Buffer; const s: PChar; l: size_t); cdecl external 'lua5.1.dll';
+procedure luaL_addstring(B: PluaL_Buffer; const s: PChar); cdecl external 'lua5.1.dll';
+procedure luaL_addvalue(B: PluaL_Buffer); cdecl external 'lua5.1.dll';
+procedure luaL_pushresult(B: PluaL_Buffer); cdecl external 'lua5.1.dll';
 
 function lua_dofile(L: Plua_State; const FileName: PChar): Integer;
 function lua_dostring(L: Plua_State; const Str: PChar): Integer;

+ 81 - 80
LuaEdit/LuaCore/lua.pas

@@ -1,5 +1,5 @@
 (*
-** $Id: lua.pas,v 1.3 2006-11-17 00:02:17 jfgoulet Exp $
+** $Id: lua.pas,v 1.4 2007-01-20 16:40:27 jfgoulet Exp $
 ** Lua - An Extensible Extension Language
 ** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
 ** See Copyright Notice at the end of this file
@@ -113,111 +113,111 @@ const
 (*
 ** state manipulation
 *)
-function lua_newstate(f: lua_Alloc; ud :Pointer): Plua_State; cdecl external 'lua.dll';
-procedure lua_close(L: Plua_State); cdecl external 'lua.dll';
-function lua_newthread(L: Plua_State): Plua_State; cdecl external 'lua.dll';
+function lua_newstate(f: lua_Alloc; ud :Pointer): Plua_State; cdecl external 'lua5.1.dll';
+procedure lua_close(L: Plua_State); cdecl external 'lua5.1.dll';
+function lua_newthread(L: Plua_State): Plua_State; cdecl external 'lua5.1.dll';
 
-function lua_atpanic(L: Plua_State; panicf: lua_CFunction): lua_CFunction; cdecl external 'lua.dll';
+function lua_atpanic(L: Plua_State; panicf: lua_CFunction): lua_CFunction; cdecl external 'lua5.1.dll';
 
 
 (*
 ** basic stack manipulation
 *)
-function lua_gettop(L: Plua_State): Integer; cdecl external 'lua.dll';
-procedure lua_settop(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_pushvalue(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_remove(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_insert(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_replace(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-function lua_checkstack(L: Plua_State; sz: Integer): Integer; cdecl external 'lua.dll';
+function lua_gettop(L: Plua_State): Integer; cdecl external 'lua5.1.dll';
+procedure lua_settop(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_pushvalue(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_remove(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_insert(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_replace(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+function lua_checkstack(L: Plua_State; sz: Integer): Integer; cdecl external 'lua5.1.dll';
 
-procedure lua_xmove(_from, _to: Plua_State; n: Integer); cdecl external 'lua.dll';
+procedure lua_xmove(_from, _to: Plua_State; n: Integer); cdecl external 'lua5.1.dll';
 
 
 (*
 ** access functions (stack -> C)
 *)
 
-function lua_isnumber(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
-function lua_isstring(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
-function lua_iscfunction(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
-function lua_isuserdata(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
-function lua_type(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
-function lua_typename(L: Plua_State; tp: Integer): PChar; cdecl external 'lua.dll';
+function lua_isnumber(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_isstring(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_iscfunction(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_isuserdata(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_type(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_typename(L: Plua_State; tp: Integer): PChar; cdecl external 'lua5.1.dll';
 
-function lua_equal(L: Plua_State; idx1, idx2: Integer): Integer; cdecl external 'lua.dll';
-function lua_rawequal(L: Plua_State; idx1, idx2: Integer): Integer; cdecl external 'lua.dll';
-function lua_lessthan(L: Plua_State; Idx1: Integer; Idx2: Integer): Integer; cdecl external 'lua.dll';
+function lua_equal(L: Plua_State; idx1, idx2: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_rawequal(L: Plua_State; idx1, idx2: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_lessthan(L: Plua_State; Idx1: Integer; Idx2: Integer): Integer; cdecl external 'lua5.1.dll';
 
-function lua_tonumber(L: Plua_State; idx: Integer): LUA_NUMBER; cdecl external 'lua.dll';
-function lua_tointeger(L: Plua_State; idx: Integer): lua_Integer; cdecl external 'lua.dll';
-function lua_toboolean(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
-function lua_tolstring(L: Plua_State; idx: Integer; len: Psize_t): PChar; cdecl external 'lua.dll';
-function lua_objlen(L: Plua_State; idx: Integer): size_t; cdecl external 'lua.dll';
-function lua_tocfunction(L: Plua_State; idx: Integer): lua_CFunction; cdecl external 'lua.dll';
-function lua_touserdata(L: Plua_State; idx: Integer): Pointer; cdecl external 'lua.dll';
-function lua_tothread(L: Plua_State; idx: Integer): Plua_State; cdecl external 'lua.dll';
-function lua_topointer(L: Plua_State; idx: Integer): Pointer; cdecl external 'lua.dll';
+function lua_tonumber(L: Plua_State; idx: Integer): LUA_NUMBER; cdecl external 'lua5.1.dll';
+function lua_tointeger(L: Plua_State; idx: Integer): lua_Integer; cdecl external 'lua5.1.dll';
+function lua_toboolean(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_tolstring(L: Plua_State; idx: Integer; len: Psize_t): PChar; cdecl external 'lua5.1.dll';
+function lua_objlen(L: Plua_State; idx: Integer): size_t; cdecl external 'lua5.1.dll';
+function lua_tocfunction(L: Plua_State; idx: Integer): lua_CFunction; cdecl external 'lua5.1.dll';
+function lua_touserdata(L: Plua_State; idx: Integer): Pointer; cdecl external 'lua5.1.dll';
+function lua_tothread(L: Plua_State; idx: Integer): Plua_State; cdecl external 'lua5.1.dll';
+function lua_topointer(L: Plua_State; idx: Integer): Pointer; cdecl external 'lua5.1.dll';
 
 
 (*
 ** push functions (C -> stack)
 *)
-procedure lua_pushnil(L: Plua_State); cdecl external 'lua.dll';
-procedure lua_pushnumber(L: Plua_State; n: LUA_NUMBER); cdecl external 'lua.dll';
-procedure lua_pushinteger(L: Plua_State; n: lua_Integer); cdecl external 'lua.dll';
-procedure lua_pushlstring(L: Plua_State; const s: PChar; n: size_t); cdecl external 'lua.dll';
-procedure lua_pushstring(L: Plua_State; const s: PChar); cdecl external 'lua.dll';
-function lua_pushvfstring(L: Plua_State; const fmt: PChar; Argp: Pointer): PChar; cdecl external 'lua.dll';
-function lua_pushfstring(L: Plua_State; const Fmt: PChar): PChar; varargs; cdecl external 'lua.dll';
-procedure lua_pushcclosure(L: Plua_State; fn: lua_CFunction; n: Integer); cdecl external 'lua.dll';
-procedure lua_pushboolean(L: Plua_State; b: Integer); cdecl external 'lua.dll';
-procedure lua_pushlightuserdata(L: Plua_State; p: Pointer); cdecl external 'lua.dll';
-function lua_pushthread(L: Plua_State): Integer; cdecl external 'lua.dll';
+procedure lua_pushnil(L: Plua_State); cdecl external 'lua5.1.dll';
+procedure lua_pushnumber(L: Plua_State; n: LUA_NUMBER); cdecl external 'lua5.1.dll';
+procedure lua_pushinteger(L: Plua_State; n: lua_Integer); cdecl external 'lua5.1.dll';
+procedure lua_pushlstring(L: Plua_State; const s: PChar; n: size_t); cdecl external 'lua5.1.dll';
+procedure lua_pushstring(L: Plua_State; const s: PChar); cdecl external 'lua5.1.dll';
+function lua_pushvfstring(L: Plua_State; const fmt: PChar; Argp: Pointer): PChar; cdecl external 'lua5.1.dll';
+function lua_pushfstring(L: Plua_State; const Fmt: PChar): PChar; varargs; cdecl external 'lua5.1.dll';
+procedure lua_pushcclosure(L: Plua_State; fn: lua_CFunction; n: Integer); cdecl external 'lua5.1.dll';
+procedure lua_pushboolean(L: Plua_State; b: Integer); cdecl external 'lua5.1.dll';
+procedure lua_pushlightuserdata(L: Plua_State; p: Pointer); cdecl external 'lua5.1.dll';
+function lua_pushthread(L: Plua_State): Integer; cdecl external 'lua5.1.dll';
 
 
 (*
 ** get functions (Lua -> stack)
 *)
-procedure lua_gettable(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_getfield(L: Plua_State; idx: Integer; k: PChar); cdecl external 'lua.dll';
-procedure lua_rawget(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_rawgeti(L: Plua_State; idx, n: Integer); cdecl external 'lua.dll';
-procedure lua_createtable(L: Plua_State; narr, nrec: Integer); cdecl external 'lua.dll';
-function lua_newuserdata(L: Plua_State; sz: size_t): Pointer; cdecl external 'lua.dll';
-function lua_getmetatable(L: Plua_State; objindex: Integer): Integer; cdecl external 'lua.dll';
-procedure lua_getfenv(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
+procedure lua_gettable(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_getfield(L: Plua_State; idx: Integer; k: PChar); cdecl external 'lua5.1.dll';
+procedure lua_rawget(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_rawgeti(L: Plua_State; idx, n: Integer); cdecl external 'lua5.1.dll';
+procedure lua_createtable(L: Plua_State; narr, nrec: Integer); cdecl external 'lua5.1.dll';
+function lua_newuserdata(L: Plua_State; sz: size_t): Pointer; cdecl external 'lua5.1.dll';
+function lua_getmetatable(L: Plua_State; objindex: Integer): Integer; cdecl external 'lua5.1.dll';
+procedure lua_getfenv(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
 
 
 (*
 ** set functions (stack -> Lua)
 *)
-procedure lua_settable(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_setfield(L: Plua_State; idx: Integer; k: PChar); cdecl external 'lua.dll';
-procedure lua_rawset(L: Plua_State; idx: Integer); cdecl external 'lua.dll';
-procedure lua_rawseti(L: Plua_State; idx, n: Integer); cdecl external 'lua.dll';
-function lua_setmetatable(L: Plua_State; objindex: Integer): Integer; cdecl external 'lua.dll';
-function lua_setfenv(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
+procedure lua_settable(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_setfield(L: Plua_State; idx: Integer; k: PChar); cdecl external 'lua5.1.dll';
+procedure lua_rawset(L: Plua_State; idx: Integer); cdecl external 'lua5.1.dll';
+procedure lua_rawseti(L: Plua_State; idx, n: Integer); cdecl external 'lua5.1.dll';
+function lua_setmetatable(L: Plua_State; objindex: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_setfenv(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
 
 
 (*
 ** `load' and `call' functions (load and run Lua code)
 *)
-procedure lua_call(L: Plua_State; nargs, nresults: Integer); cdecl external 'lua.dll';
-function lua_pcall(L: Plua_State; nargs, nresults, errfunc: Integer): Integer; cdecl external 'lua.dll';
-function lua_cpcall(L: Plua_State; func: lua_CFunction; ud: Pointer): Integer; cdecl external 'lua.dll';
+procedure lua_call(L: Plua_State; nargs, nresults: Integer); cdecl external 'lua5.1.dll';
+function lua_pcall(L: Plua_State; nargs, nresults, errfunc: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_cpcall(L: Plua_State; func: lua_CFunction; ud: Pointer): Integer; cdecl external 'lua5.1.dll';
 function lua_load(L: Plua_State; reader: lua_Reader; dt: Pointer;
-                        const chunkname: PChar): Integer; cdecl external 'lua.dll';
+                        const chunkname: PChar): Integer; cdecl external 'lua5.1.dll';
 
-function lua_dump(L: Plua_State; writer: lua_Writer; data: Pointer): Integer; cdecl external 'lua.dll';
+function lua_dump(L: Plua_State; writer: lua_Writer; data: Pointer): Integer; cdecl external 'lua5.1.dll';
 
 
 (*
 ** coroutine functions
 *)
-function lua_yield(L: Plua_State; nresults: Integer): Integer; cdecl external 'lua.dll';
-function lua_resume(L: Plua_State; narg: Integer): Integer; cdecl external 'lua.dll';
-function lua_status(L: Plua_State): Integer; cdecl external 'lua.dll';
+function lua_yield(L: Plua_State; nresults: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_resume(L: Plua_State; narg: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_status(L: Plua_State): Integer; cdecl external 'lua5.1.dll';
 
 (*
 ** garbage-collection functions and options
@@ -232,20 +232,20 @@ const
      LUA_GCSETPAUSE =6;
      LUA_GCSETSTEPMUL =7;
 
-function lua_gc(L: Plua_State; what, data: Integer): Integer; cdecl external 'lua.dll';
+function lua_gc(L: Plua_State; what, data: Integer): Integer; cdecl external 'lua5.1.dll';
 
 (*
 ** miscellaneous functions
 *)
 
-function lua_error(L: Plua_State): Integer; cdecl external 'lua.dll';
+function lua_error(L: Plua_State): Integer; cdecl external 'lua5.1.dll';
 
-function lua_next(L: Plua_State; idx: Integer): Integer; cdecl external 'lua.dll';
+function lua_next(L: Plua_State; idx: Integer): Integer; cdecl external 'lua5.1.dll';
 
-procedure lua_concat(L: Plua_State; n: Integer); cdecl external 'lua.dll';
+procedure lua_concat(L: Plua_State; n: Integer); cdecl external 'lua5.1.dll';
 
-function lua_getallocf(L: Plua_State; ud: PPointer): lua_Alloc; cdecl external 'lua.dll';
-procedure lua_setallocf(L: Plua_State; f: lua_Alloc; ud: Pointer); cdecl external 'lua.dll';
+function lua_getallocf(L: Plua_State; ud: PPointer): lua_Alloc; cdecl external 'lua5.1.dll';
+procedure lua_setallocf(L: Plua_State; f: lua_Alloc; ud: Pointer); cdecl external 'lua5.1.dll';
 
 (*
 ** ===============================================================
@@ -328,6 +328,7 @@ type
     currentline: Integer;  (* (l) *)
     nups: Integer;   (* (u) number of upvalues *)
     linedefined: Integer;  (* (S) *)
+    lastlinedefined: Integer;
     short_src: array [0..LUA_IDSIZE - 1] of Char; (* (S) *)
     (* private part *)
     i_ci: Integer;  (* active function *)
@@ -338,17 +339,17 @@ type
   lua_Hook = procedure (L: Plua_State; ar: Plua_Debug); cdecl;
 
 
-function lua_getstack(L: Plua_State; level: Integer; ar: Plua_Debug): Integer; cdecl external 'lua.dll';
-function lua_getinfo(L: Plua_State; const what: PChar; ar: Plua_Debug): Integer; cdecl external 'lua.dll';
-function lua_getlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl external 'lua.dll';
-function lua_setlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl external 'lua.dll';
-function lua_getupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl external 'lua.dll';
-function lua_setupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl external 'lua.dll';
+function lua_getstack(L: Plua_State; level: Integer; ar: Plua_Debug): Integer; cdecl external 'lua5.1.dll';
+function lua_getinfo(L: Plua_State; const what: PChar; ar: Plua_Debug): Integer; cdecl external 'lua5.1.dll';
+function lua_getlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl external 'lua5.1.dll';
+function lua_setlocal(L: Plua_State; const ar: Plua_Debug; n: Integer): PChar; cdecl external 'lua5.1.dll';
+function lua_getupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl external 'lua5.1.dll';
+function lua_setupvalue(L: Plua_State; funcindex: Integer; n: Integer): PChar; cdecl external 'lua5.1.dll';
 
-function lua_sethook(L: Plua_State; func: lua_Hook; mask, count: Integer): Integer; cdecl external 'lua.dll';
-function lua_gethook(L: Plua_State): lua_Hook; cdecl external 'lua.dll';
-function lua_gethookmask(L: Plua_State): Integer; cdecl external 'lua.dll';
-function lua_gethookcount(L: Plua_State): Integer; cdecl external 'lua.dll';
+function lua_sethook(L: Plua_State; func: lua_Hook; mask, count: Integer): Integer; cdecl external 'lua5.1.dll';
+function lua_gethook(L: Plua_State): lua_Hook; cdecl external 'lua5.1.dll';
+function lua_gethookmask(L: Plua_State): Integer; cdecl external 'lua5.1.dll';
+function lua_gethookcount(L: Plua_State): Integer; cdecl external 'lua5.1.dll';
 
 
 implementation

+ 41 - 16
LuaEdit/LuaCore/lualib.pas

@@ -1,5 +1,5 @@
 (*
-** $Id: lualib.pas,v 1.4 2006-12-11 04:27:13 jfgoulet Exp $
+** $Id: lualib.pas,v 1.5 2007-01-20 16:40:27 jfgoulet Exp $
 ** Lua standard libraries
 ** See Copyright Notice in lua.h
 *)
@@ -15,6 +15,7 @@ uses
   lua;
 
 const
+  LUA_PACKLIBNAME = 'package';
   LUA_COLIBNAME = 'coroutine';
   LUA_TABLIBNAME = 'table';
   LUA_IOLIBNAME = 'io';
@@ -24,26 +25,26 @@ const
   LUA_DBLIBNAME = 'debug';
 
 function luaopen_base(L: Plua_State): Integer;
-  cdecl external 'lua.dll';
+  cdecl external 'lua5.1.dll';
 
+function luaopen_package(L: Plua_State): Integer;
+  cdecl external 'lua5.1.dll';
 function luaopen_table(L: Plua_State): Integer;
-  cdecl external 'lua.dll';
+  cdecl external 'lua5.1.dll';
 
 function luaopen_io(L: Plua_State): Integer;
-  cdecl external 'lua.dll';
+  cdecl external 'lua5.1.dll';
 
 function luaopen_string(L: Plua_State): Integer;
-  cdecl external 'lua.dll';
+  cdecl external 'lua5.1.dll';
 
 function luaopen_math(L: Plua_State): Integer;
-  cdecl external 'lua.dll';
+  cdecl external 'lua5.1.dll';
 
 function luaopen_debug(L: Plua_State): Integer;
-  cdecl external 'lua.dll';
+  cdecl external 'lua5.1.dll';
 
 
-function luaopen_loadlib(L: Plua_State): Integer;
-  cdecl external 'lua.dll';
 
 
 (* to help testing the libraries *)
@@ -54,6 +55,7 @@ function luaopen_loadlib(L: Plua_State): Integer;
 
 (* compatibility code *)
 function lua_baselibopen(L: Plua_State): Integer;
+function lua_packlibopen(L: Plua_State): Integer;
 function lua_tablibopen(L: Plua_State): Integer;
 function lua_iolibopen(L: Plua_State): Integer;
 function lua_strlibopen(L: Plua_State): Integer;
@@ -64,12 +66,26 @@ implementation
 
 function lua_baselibopen(L: Plua_State): Integer;
 begin
-  Result := luaopen_base(L);
+  lua_pushcfunction(L, luaopen_base);
+  lua_pushstring(L, '');
+  lua_call(L, 1, 0);
+  Result := 1;
+end;
+
+function lua_packlibopen(L: Plua_State): Integer;
+begin
+  lua_pushcfunction(L, luaopen_package);
+  lua_pushstring(L, 'package');
+  lua_call(L, 1, 0);
+  Result := 1;
 end;
 
 function lua_tablibopen(L: Plua_State): Integer;
 begin
-  Result := luaopen_table(L);
+  lua_pushcfunction(L, luaopen_table);
+  lua_pushstring(L, 'table');
+  lua_call(L, 1, 0);
+  Result := 1;
 end;
 
 function lua_iolibopen(L: Plua_State): Integer;
@@ -78,25 +94,34 @@ begin
   lua_pushstring(L, 'io');
   lua_call(L, 1, 0);
 
-  lua_pushcfunction(L, luaopen_os);
+  {lua_pushcfunction(L, luaopen_os);
   lua_pushstring(L, 'os');
   lua_call(L, 1, 0);
-  Result := 1;
+  Result := 1;}
 end;
 
 function lua_strlibopen(L: Plua_State): Integer;
 begin
-  Result := luaopen_string(L);
+  lua_pushcfunction(L, luaopen_string);
+  lua_pushstring(L, 'string');
+  lua_call(L, 1, 0);
+  Result := 1;
 end;
 
 function lua_mathlibopen(L: Plua_State): Integer;
 begin
-  Result := luaopen_math(L);
+  lua_pushcfunction(L, luaopen_math);
+  lua_pushstring(L, 'math');
+  lua_call(L, 1, 0);
+  Result := 1;
 end;
 
 function lua_dblibopen(L: Plua_State): Integer;
 begin
-  Result := luaopen_debug(L);
+  lua_pushcfunction(L, luaopen_debug);
+  lua_pushstring(L, 'debug');
+  lua_call(L, 1, 0);
+  Result := 1;
 end;
 
 end.