Преглед на файлове

# revisions: 40657,40701

git-svn-id: branches/fixes_3_2@43398 -
marco преди 5 години
родител
ревизия
9987e790f8
променени са 4 файла, в които са добавени 67 реда и са изтрити 1 реда
  1. 1 0
      .gitattributes
  2. 37 0
      packages/rtl-objpas/src/inc/rtti.pp
  3. 1 1
      packages/rtl-objpas/src/x86_64/invoke.inc
  4. 28 0
      tests/webtbf/tw34691.pp

+ 1 - 0
.gitattributes

@@ -14693,6 +14693,7 @@ tests/webtbf/tw3395.pp svneol=native#text/plain
 tests/webtbf/tw3395a.pp svneol=native#text/plain
 tests/webtbf/tw34355.pp svneol=native#text/pascal
 tests/webtbf/tw3450.pp svneol=native#text/plain
+tests/webtbf/tw34691.pp svneol=native#text/pascal
 tests/webtbf/tw3473.pp svneol=native#text/plain
 tests/webtbf/tw3480.pp svneol=native#text/plain
 tests/webtbf/tw3480a.pp svneol=native#text/plain

+ 37 - 0
packages/rtl-objpas/src/inc/rtti.pp

@@ -542,6 +542,9 @@ resourcestring
 implementation
 
 uses
+{$ifdef windows}
+  Windows,
+{$endif}
   fgl;
 
 type
@@ -701,6 +704,40 @@ var
   GRttiPool    : TRttiPool;
   FuncCallMgr: TFunctionCallManagerArray;
 
+function AllocateMemory(aSize: PtrUInt): Pointer;
+begin
+{$IF DEFINED(WINDOWS)}
+  Result := VirtualAlloc(Nil, aSize, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
+{$ELSE}
+  Result := GetMem(aSize);
+{$ENDIF}
+end;
+
+function ProtectMemory(aPtr: Pointer; aSize: PtrUInt; aExecutable: Boolean): Boolean;
+{$IF DEFINED(WINDOWS)}
+var
+  oldprot: DWORD;
+{$ENDIF}
+begin
+{$IF DEFINED(WINDOWS)}
+  if aExecutable then
+    Result := VirtualProtect(aPtr, aSize, PAGE_EXECUTE_READ, oldprot)
+  else
+    Result := VirtualProtect(aPtr, aSize, PAGE_READWRITE, oldprot);
+{$ELSE}
+  Result := True;
+{$ENDIF}
+end;
+
+procedure FreeMemory(aPtr: Pointer);
+begin
+{$IF DEFINED(WINDOWS)}
+  VirtualFree(aPtr, 0, MEM_RELEASE);
+{$ELSE}
+  FreeMem(aPtr);
+{$ENDIF}
+end;
+
 function CCToStr(aCC: TCallConv): String; inline;
 begin
   WriteStr(Result, aCC);

+ 1 - 1
packages/rtl-objpas/src/x86_64/invoke.inc

@@ -235,7 +235,7 @@ begin
         end;
         tkBool: begin
           case td^.OrdType of
-            otUByte: val := ShortInt(PBoolean(aArgs[i].ValueRef)^);
+            otUByte: val := ShortInt(System.PBoolean(aArgs[i].ValueRef)^);
             otUWord: val := Byte(PBoolean16(aArgs[i].ValueRef)^);
             otULong: val := SmallInt(PBoolean32(aArgs[i].ValueRef)^);
             otUQWord: val := QWord(PBoolean64(aArgs[i].ValueRef)^);

+ 28 - 0
tests/webtbf/tw34691.pp

@@ -0,0 +1,28 @@
+{ %FAIL }
+
+unit tw34691;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils;
+
+type
+  TObjA = class
+    Icon: String;
+  end;
+
+  {$M+}
+  TObjB = class
+    FObjA: TObjA;
+
+  published
+    property Icon: String read FObjA.Icon;
+  end;
+
+implementation
+
+end.
+