Browse Source

* handle untyped const parameters like var/out/constref parameters

git-svn-id: trunk@41831 -
svenbarth 6 years ago
parent
commit
ab35c92816

+ 2 - 0
packages/rtl-objpas/src/i386/invoke.inc

@@ -195,6 +195,8 @@ begin
       AddRegArg(PtrUInt(aArgs[i].ValueRef))
       AddRegArg(PtrUInt(aArgs[i].ValueRef))
     else if aArgs[i].Info.ParamFlags * [pfOut, pfVar, pfConstRef] <> [] then
     else if aArgs[i].Info.ParamFlags * [pfOut, pfVar, pfConstRef] <> [] then
       AddRegArg(PtrUInt(aArgs[i].ValueRef))
       AddRegArg(PtrUInt(aArgs[i].ValueRef))
+    else if (pfConst in aArgs[i].Info.ParamFlags) and not Assigned(aArgs[i].Info.ParamType) then
+      AddRegArg(PtrUInt(aArgs[i].ValueRef))
     else begin
     else begin
       td := GetTypeData(aArgs[i].Info.ParamType);
       td := GetTypeData(aArgs[i].Info.ParamType);
       case aArgs[i].Info.ParamType^.Kind of
       case aArgs[i].Info.ParamType^.Kind of

+ 4 - 0
packages/rtl-objpas/src/x86_64/invoke.inc

@@ -165,6 +165,8 @@ begin
       val := PtrUInt(aArgs[i].ValueRef)
       val := PtrUInt(aArgs[i].ValueRef)
     else if aArgs[i].Info.ParamFlags * [pfOut, pfVar, pfConstRef] <> [] then
     else if aArgs[i].Info.ParamFlags * [pfOut, pfVar, pfConstRef] <> [] then
       val := PtrUInt(aArgs[i].ValueRef)
       val := PtrUInt(aArgs[i].ValueRef)
+    else if (pfConst in aArgs[i].Info.ParamFlags) and not Assigned(aArgs[i].Info.ParamType) then
+      val := PtrUInt(aArgs[i].ValueRef)
     else begin
     else begin
       td := GetTypeData(aArgs[i].Info.ParamType);
       td := GetTypeData(aArgs[i].Info.ParamType);
       case aArgs[i].Info.ParamType^.Kind of
       case aArgs[i].Info.ParamType^.Kind of
@@ -559,6 +561,8 @@ begin
       fArgInfos[argidx].Deref := True
       fArgInfos[argidx].Deref := True
     else if fArgs[i].ParamFlags * [pfOut, pfVar, pfConstRef] <> [] then
     else if fArgs[i].ParamFlags * [pfOut, pfVar, pfConstRef] <> [] then
       fArgInfos[argidx].Deref := True
       fArgInfos[argidx].Deref := True
+    else if (pfConst in fArgs[i].ParamFlags) and not Assigned(fArgs[i].ParamType) then
+      fArgInfos[argidx].Deref := True
     else begin
     else begin
       td := GetTypeData(fArgs[i].ParamType);
       td := GetTypeData(fArgs[i].ParamType);
       case fArgs[i].ParamType^.Kind of
       case fArgs[i].ParamType^.Kind of