summaryrefslogtreecommitdiff
path: root/compiler/rautils.pas
diff options
context:
space:
mode:
authorjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-01-21 22:16:42 +0000
committerjonas <jonas@3ad0048d-3df7-0310-abae-a5850022a9f2>2007-01-21 22:16:42 +0000
commitd93ffbb33d341e8d4f1eecef69fff1abdb20fa84 (patch)
tree44b05ec3f48df7527f6a6203083dd98b492c0a5a /compiler/rautils.pas
parent6aec5cf02545216bca610ba5267de3bcd42dabb0 (diff)
downloadfpc-d93ffbb33d341e8d4f1eecef69fff1abdb20fa84.tar.gz
* fixed calling qualified methods in assembler + tests for ppc/ppc64/
i386/x86_64 git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@6112 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'compiler/rautils.pas')
-rw-r--r--compiler/rautils.pas14
1 files changed, 12 insertions, 2 deletions
diff --git a/compiler/rautils.pas b/compiler/rautils.pas
index d132e8da91..5b2c9caef5 100644
--- a/compiler/rautils.pas
+++ b/compiler/rautils.pas
@@ -184,7 +184,7 @@ Function EscapeToPascal(const s:string): string;
---------------------------------------------------------------------}
procedure AsmSearchSym(const s:string;var srsym:tsym;var srsymtable:TSymtable);
-Function GetRecordOffsetSize(s:string;Var Offset: aint;var Size:aint):boolean;
+Function GetRecordOffsetSize(s:string;Var Offset: aint;var Size:aint; var mangledname: string):boolean;
Function SearchType(const hs:string;var size:aint): Boolean;
Function SearchRecordType(const s:string): boolean;
Function SearchIConstant(const s:string; var l:aint): boolean;
@@ -1259,7 +1259,7 @@ Begin
end;
-Function GetRecordOffsetSize(s:string;Var Offset: aint;var Size:aint):boolean;
+Function GetRecordOffsetSize(s:string;Var Offset: aint;var Size:aint; var mangledname: string):boolean;
{ search and returns the offset and size of records/objects of the base }
{ with field name setup in field. }
{ returns FALSE if not found. }
@@ -1275,6 +1275,7 @@ Begin
GetRecordOffsetSize:=FALSE;
Offset:=0;
Size:=0;
+ mangledname:='';
i:=pos('.',s);
if i=0 then
i:=255;
@@ -1348,6 +1349,15 @@ Begin
st:=tobjectdef(vardef).symtable;
end;
end;
+ procsym:
+ begin
+ st:=nil;
+ if Tprocsym(sym).ProcdefList.Count>1 then
+ Message(asmr_w_calling_overload_func);
+ mangledname:=tprocdef(tprocsym(sym).ProcdefList[0]).mangledname;
+ GetRecordOffsetSize:=(s='');
+ exit;
+ end;
end;
end;
{ Support Field.Type as typecasting }