Hi, Attached patch modifies compiler to enable typed addresses ({$T+}) for fpc and objfpc modes by default. It fixes the rtl and compiler to compile again. Most of these fixes are simple pointer to array vs. pointer to element of array changes, but some reveal ugly code IMHO ;-).
Anyway, any opinions on whether it is useful to enforce typed addresses by default ? Micha
Index: rtl/unix/unix.pp =================================================================== --- rtl/unix/unix.pp (revision 4765) +++ rtl/unix/unix.pp (working copy) @@ -858,7 +858,7 @@ end; textrec(f).bufptr:[EMAIL PROTECTED](f).buffer; {Save the process ID - needed when closing } - pl:=@(textrec(f).userdata[2]); + pl:=pcint(@(textrec(f).userdata[2])); pl^:=pid; textrec(f).closefunc:[EMAIL PROTECTED]; end; @@ -971,7 +971,7 @@ f:=pipi; end; {Save the process ID - needed when closing } - pl:=@(filerec(f).userdata[2]); + pl:=pcint(@(filerec(f).userdata[2])); pl^:=pid; end; POpen:=0; @@ -1034,11 +1034,11 @@ close(pipo); close(pipi); {Save the process ID - needed when closing } - pl:=@(textrec(StreamIn).userdata[2]); + pl:=pcint(@(textrec(StreamIn).userdata[2])); pl^:=pid; textrec(StreamIn).closefunc:[EMAIL PROTECTED]; {Save the process ID - needed when closing } - pl:=@(textrec(StreamOut).userdata[2]); + pl:=pcint(@(textrec(StreamOut).userdata[2])); pl^:=pid; textrec(StreamOut).closefunc:[EMAIL PROTECTED]; AssignStream:=Pid; @@ -1124,15 +1124,15 @@ Close(PipeOut); Close(PipeIn); // Save the process ID - needed when closing - pl := @(TextRec(StreamIn).userdata[2]); + pl := pcint(@(TextRec(StreamIn).userdata[2])); pl^ := pid; TextRec(StreamIn).closefunc := @PCloseText; // Save the process ID - needed when closing - pl := @(TextRec(StreamOut).userdata[2]); + pl := pcint(@(TextRec(StreamOut).userdata[2])); pl^ := pid; TextRec(StreamOut).closefunc := @PCloseText; // Save the process ID - needed when closing - pl := @(TextRec(StreamErr).userdata[2]); + pl := pcint(@(TextRec(StreamErr).userdata[2])); pl^ := pid; TextRec(StreamErr).closefunc := @PCloseText; AssignStream := pid; Index: rtl/unix/cthreads.pp =================================================================== --- rtl/unix/cthreads.pp (revision 4765) +++ rtl/unix/cthreads.pp (working copy) @@ -223,7 +223,7 @@ // don't create detached, we need to be able to join (waitfor) on // the newly created thread! //pthread_attr_setdetachstate(@thread_attr, PTHREAD_CREATE_DETACHED); - if pthread_create(@threadid, @thread_attr, @ThreadMain,ti) <> 0 then begin + if pthread_create(ppthread_t(@threadid), @thread_attr, @ThreadMain,ti) <> 0 then begin threadid := TThreadID(0); end; CBeginThread:=threadid; Index: rtl/unix/cwstring.pp =================================================================== --- rtl/unix/cwstring.pp (revision 4765) +++ rtl/unix/cwstring.pp (working copy) @@ -153,7 +153,7 @@ destpos:=pchar(dest); outleft:=outlength; lockiconv(lock_wide2ansi); - while iconv(iconv_wide2ansi,@srcpos,@srclen,@destpos,@outleft)=size_t(-1) do + while iconv(iconv_wide2ansi,ppchar(@srcpos),@srclen,@destpos,@outleft)=size_t(-1) do begin case fpgetCerrno of ESysEILSEQ: @@ -210,7 +210,7 @@ destpos:=pchar(dest); outleft:=outlength*2; lockiconv(lock_ansi2wide); - while iconv(iconv_ansi2wide,@srcpos,@len,@destpos,@outleft)=size_t(-1) do + while iconv(iconv_ansi2wide,@srcpos,psize(@len),@destpos,@outleft)=size_t(-1) do begin case fpgetCerrno of ESysEILSEQ: @@ -286,7 +286,7 @@ destpos:=pchar(dest); outleft:=outlength*4; lockiconv(lock_ansi2ucs4); - while iconv(iconv_ansi2ucs4,@srcpos,@len,@destpos,@outleft)=size_t(-1) do + while iconv(iconv_ansi2ucs4,@srcpos,psize(@len),@destpos,@outleft)=size_t(-1) do begin case fpgetCerrno of ESysE2BIG: Index: rtl/unix/sysdir.inc =================================================================== --- rtl/unix/sysdir.inc (revision 4765) +++ rtl/unix/sysdir.inc (working copy) @@ -32,7 +32,7 @@ exit; Move(s[1], Buffer, Length(s)); Buffer[Length(s)] := #0; - If Fpmkdir(@buffer, MODE_MKDIR)<0 Then + If Fpmkdir(@buffer[0], MODE_MKDIR)<0 Then Errno2Inoutres Else InOutRes:=0; @@ -49,7 +49,7 @@ exit; Move(s[1], Buffer, Length(s)); Buffer[Length(s)] := #0; - If Fprmdir(@buffer)<0 Then + If Fprmdir(@buffer[0])<0 Then Errno2Inoutres Else InOutRes:=0; @@ -64,7 +64,7 @@ exit; Move(s[1], Buffer, Length(s)); Buffer[Length(s)] := #0; - If Fpchdir(@buffer)<0 Then + If Fpchdir(@buffer[0])<0 Then Errno2Inoutres Else InOutRes:=0; @@ -93,7 +93,7 @@ begin dir:=''; {$ifdef usegetcwd} - if Fpgetcwd(@buf,sizeof(buf))<>nil then + if Fpgetcwd(@buf[0],sizeof(buf))<>nil then dir:=strpas(buf); {$else} thedir:=''; Index: rtl/unix/dos.pp =================================================================== --- rtl/unix/dos.pp (revision 4765) +++ rtl/unix/dos.pp (working copy) @@ -648,7 +648,7 @@ Move(f.SearchSpec[1], DirName[0], f.NamePos); DirName[f.NamePos] := #0; End; - f.DirPtr := fpopendir(@(DirName)); + f.DirPtr := fpopendir(@DirName[0]); If f.DirPtr <> nil Then begin ArrayPos:=FindLastUsed; @@ -673,7 +673,7 @@ if p=nil then FName:='' else - FName:=Strpas(@p^.d_name); + FName:=Strpas(@p^.d_name[0]); If FName='' Then Finished:=True Else @@ -767,7 +767,7 @@ LinAttr : longint; Begin DosError:=0; - if FPStat(@textrec(f).name,info)<0 then + if FPStat(@textrec(f).name[0],info)<0 then begin Attr:=0; DosError:=3; @@ -779,7 +779,7 @@ Attr:=$10 else Attr:=$0; - if fpAccess(@textrec(f).name,W_OK)<0 then + if fpAccess(@textrec(f).name[0],W_OK)<0 then Attr:=Attr or $1; if filerec(f).name[0]='.' then Attr:=Attr or $2; @@ -816,7 +816,7 @@ UnPackTime(Time,DT); modtime:=DTToUnixDate(DT); end; - if fputime(@filerec(f).name,@utim)<0 then + if fputime(@filerec(f).name[0],@utim)<0 then begin Time:=0; doserror:=3; Index: rtl/linux/gpm.pp =================================================================== --- rtl/linux/gpm.pp (revision 4765) +++ rtl/linux/gpm.pp (working copy) @@ -534,7 +534,7 @@ strcopy(addr.path, GPM_NODE_CTL); i:=sizeof(addr.family)+length(GPM_NODE_CTL); - if fpconnect(gpm_fd,@addr,i)<0 then + if fpconnect(gpm_fd,psockaddr(@addr),i)<0 then begin { gpm_report(GPM_PR_INFO,GPM_MESS_DOUBLE_S,GPM_NODE_CTL,strerror(errno));} {Well, try to open a chr device called /dev/gpmctl. This should Index: rtl/linux/unxfunc.inc =================================================================== --- rtl/linux/unxfunc.inc (revision 4765) +++ rtl/linux/unxfunc.inc (working copy) @@ -33,13 +33,13 @@ Function PClose(Var F:text) :cint; var - pl : ^cint; + pl : pcint; res : cint; pid : cint; begin fpclose(Textrec(F).Handle); { closed our side, Now wait for the other - this appears to be needed ?? } - pl:=@(textrec(f).userdata[2]); + pl:=pcint(@(textrec(f).userdata[2])); { avoid alignment error on sparc } move(pl^,pid,sizeof(pid)); fpwaitpid(pid,@res,0); @@ -54,7 +54,7 @@ begin fpclose(filerec(F).Handle); { closed our side, Now wait for the other - this appears to be needed ?? } - pl:=@(filerec(f).userdata[2]); + pl:=pcint(@(filerec(f).userdata[2])); { avoid alignment error on sparc } move(pl^,pid,sizeof(pid)); fpwaitpid(pid,@res,0); Index: rtl/linux/oldlinux.pp =================================================================== --- rtl/linux/oldlinux.pp (revision 4765) +++ rtl/linux/oldlinux.pp (working copy) @@ -2792,7 +2792,7 @@ sr.reg2:=Textrec(F).Handle; SysCall (syscall_nr_close,sr); { closed our side, Now wait for the other - this appears to be needed ?? } - pl:=@(textrec(f).userdata[2]); + pl:=plongint(@(textrec(f).userdata[2])); waitpid(pl^,@res,0); pclose:=res shr 8; end; @@ -2807,7 +2807,7 @@ sr.reg2:=FileRec(F).Handle; SysCall (Syscall_nr_close,sr); { closed our side, Now wait for the other - this appears to be needed ?? } - pl:=@(filerec(f).userdata[2]); + pl:=plongint(@(filerec(f).userdata[2])); waitpid(pl^,@res,0); pclose:=res shr 8; end; @@ -4516,7 +4516,7 @@ textrec(f).bufptr:[EMAIL PROTECTED](f).buffer; end; {Save the process ID - needed when closing } - pl:=@(textrec(f).userdata[2]); + pl:=plongint(@(textrec(f).userdata[2])); pl^:=pid; textrec(f).closefunc:[EMAIL PROTECTED]; end; @@ -4602,7 +4602,7 @@ f:=pipi; end; {Save the process ID - needed when closing } - pl:=@(filerec(f).userdata[2]); + pl:=plongint(@(filerec(f).userdata[2])); pl^:=pid; end; end; @@ -4666,11 +4666,11 @@ close(pipo); close(pipi); {Save the process ID - needed when closing } - pl:=@(textrec(StreamIn).userdata[2]); + pl:=plongint(@(textrec(StreamIn).userdata[2])); pl^:=pid; textrec(StreamIn).closefunc:[EMAIL PROTECTED]; {Save the process ID - needed when closing } - pl:=@(textrec(StreamOut).userdata[2]); + pl:=plongint(@(textrec(StreamOut).userdata[2])); pl^:=pid; textrec(StreamOut).closefunc:[EMAIL PROTECTED]; AssignStream:=Pid; @@ -4757,15 +4757,15 @@ Close(PipeOut); Close(PipeIn); // Save the process ID - needed when closing - pl := @(TextRec(StreamIn).userdata[2]); + pl := plongint(@(TextRec(StreamIn).userdata[2])); pl^ := pid; TextRec(StreamIn).closefunc := @PCloseText; // Save the process ID - needed when closing - pl := @(TextRec(StreamOut).userdata[2]); + pl := plongint(@(TextRec(StreamOut).userdata[2])); pl^ := pid; TextRec(StreamOut).closefunc := @PCloseText; // Save the process ID - needed when closing - pl := @(TextRec(StreamErr).userdata[2]); + pl := plongint(@(TextRec(StreamErr).userdata[2])); pl^ := pid; TextRec(StreamErr).closefunc := @PCloseText; AssignStream := pid; @@ -5059,15 +5059,15 @@ d:=Readdir(dirstream); while (d<>nil) do begin - name:=n+'/'+strpas(@(d^.name)); + name:=n+'/'+strpas(@(d^.name[0])); fstat(name,st); if linuxerror=0 then begin if ((st.mode and $E000)=$4000) and { if it is a directory } - (strpas(@(d^.name))<>'.') and { but not ., .. and fd subdirs } - (strpas(@(d^.name))<>'..') and - (strpas(@(d^.name))<>'') and - (strpas(@(d^.name))<>'fd') then + (strpas(@(d^.name[0]))<>'.') and { but not ., .. and fd subdirs } + (strpas(@(d^.name[0]))<>'..') and + (strpas(@(d^.name[0]))<>'') and + (strpas(@(d^.name[0]))<>'fd') then begin {we found a directory, search inside it} if mysearch(name) then begin {the device is here} Index: rtl/inc/mouse.inc =================================================================== --- rtl/inc/mouse.inc (revision 4765) +++ rtl/inc/mouse.inc (working copy) @@ -25,8 +25,8 @@ Procedure ClearMouseEventQueue; begin - PendingMouseHead:[EMAIL PROTECTED]; - PendingMouseTail:[EMAIL PROTECTED]; + PendingMouseHead:[EMAIL PROTECTED]; + PendingMouseTail:[EMAIL PROTECTED]; PendingMouseEvents:=0; FillChar(LastMouseEvent,sizeof(TMouseEvent),0); end; @@ -119,7 +119,7 @@ MouseEvent:=PendingMouseHead^; inc(PendingMouseHead); if PtrInt(PendingMouseHead)=Ptrint(@PendingMouseEvent)+sizeof(PendingMouseEvent) then - PendingMouseHead:[EMAIL PROTECTED]; + PendingMouseHead:[EMAIL PROTECTED]; dec(PendingMouseEvents); if (LastMouseEvent.x<>MouseEvent.x) or (LastMouseEvent.y<>MouseEvent.y) then @@ -162,7 +162,7 @@ PendingMouseTail^:=MouseEvent; inc(PendingMouseTail); if PtrInt(PendingMouseTail)=Ptrint(@PendingMouseEvent)+sizeof(PendingMouseEvent) then - PendingMouseTail:[EMAIL PROTECTED]; + PendingMouseTail:[EMAIL PROTECTED]; inc(PendingMouseEvents); end else Index: rtl/inc/variants.pp =================================================================== --- rtl/inc/variants.pp (revision 4765) +++ rtl/inc/variants.pp (working copy) @@ -3481,7 +3481,7 @@ function FindVarData(const V: Variant): PVarData; begin - result:[EMAIL PROTECTED]; + result:=pvardata(@V); while result^.vtype=varVariant or VarByRef do result:=PVarData(result^.VPointer); end; Index: rtl/inc/text.inc =================================================================== --- rtl/inc/text.inc (revision 4765) +++ rtl/inc/text.inc (working copy) @@ -939,7 +939,7 @@ inc(p);} while p<maxp do begin - q:[EMAIL PROTECTED]; + q:[EMAIL PROTECTED]; while (q^<>#0) and (p^<>q^) do inc(q); if p^=q^ then Index: rtl/inc/objects.pp =================================================================== --- rtl/inc/objects.pp (revision 4765) +++ rtl/inc/objects.pp (working copy) @@ -981,13 +981,14 @@ FUNCTION TObject.Is_Object(P:Pointer):Boolean; TYPE PVMT=^VMT; + PPVMT=^PVMT; VMT=RECORD Size,NegSize:Longint; ParentLink:PVMT; END; -VAR SP:^PVMT; Q:PVMT; +VAR SP:PPVMT; Q:PVMT; BEGIN - SP:[EMAIL PROTECTED]; + SP:=PPVMT(@SELF); Q:=SP^; Is_Object:=False; While Q<>Nil Do Begin Index: rtl/inc/objpas.inc =================================================================== --- rtl/inc/objpas.inc (revision 4765) +++ rtl/inc/objpas.inc (working copy) @@ -303,7 +303,7 @@ FieldTable := PFieldTable((Pointer(CurClassType) + vmtFieldTable)^); if FieldTable <> nil then begin - FieldInfo := @FieldTable^.Fields; + FieldInfo := @FieldTable^.Fields[0]; for i := 0 to FieldTable^.FieldCount - 1 do begin if UpCase(FieldInfo^.Name) = UName then @@ -311,7 +311,7 @@ fieldaddress := Pointer(Self) + FieldInfo^.FieldOffset; exit; end; - FieldInfo := @FieldInfo^.Name + 1 + Length(FieldInfo^.Name); + FieldInfo := PFieldInfo(PByte(@FieldInfo^.Name) + 1 + Length(FieldInfo^.Name)); {$ifdef FPC_REQUIRES_PROPER_ALIGNMENT} { align to largest field of TFieldInfo } FieldInfo := Align(FieldInfo, SizeOf(PtrUInt)); Index: rtl/inc/sockovl.inc =================================================================== --- rtl/inc/sockovl.inc (revision 4765) +++ rtl/inc/sockovl.inc (working copy) @@ -42,7 +42,7 @@ Function RecvFrom(Sock : Longint; Var Buf; Buflen,Flags : Longint; Var Addr ; var AddrLen :longint) : longint; begin - RecvFrom:=fprecvfrom(Sock,@buf,buflen,flags,@Addr,@AddrLen); + RecvFrom:=fprecvfrom(Sock,@buf,buflen,flags,@Addr,psocklen(@AddrLen)); end; Function Bind(Sock:Longint;Const Addr;AddrLen:Longint):Boolean; @@ -57,7 +57,7 @@ Function Accept(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint; begin - Accept:=fpaccept(sock,@addr,@addrlen); + Accept:=fpaccept(sock,@addr,psocklen(@addrlen)); end; Function Connect(Sock:Longint;Const Addr;Addrlen:Longint): boolean; @@ -73,12 +73,12 @@ Function GetSocketName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint; begin - GetSocketName:=fpgetsockname(sock,@addr,@addrlen); + GetSocketName:=fpgetsockname(sock,@addr,psocklen(@addrlen)); end; Function GetPeerName(Sock:Longint;Var Addr;Var Addrlen:Longint):Longint; begin - GetPeerName:=fpgetPeerName(sock,@addr,@addrlen); + GetPeerName:=fpgetPeerName(sock,@addr,psocklen(@addrlen)); end; Function SetSocketOptions(Sock,Level,OptName:Longint;const OptVal;optlen:longint):Longint; @@ -88,12 +88,12 @@ Function GetSocketOptions(Sock,Level,OptName:Longint;Var OptVal;Var optlen:longint):Longint; begin - GetSocketOptions:=fpgetsockopt(Sock,Level,OptName,@OptVal,@OptLen); + GetSocketOptions:=fpgetsockopt(Sock,Level,OptName,@OptVal,psocklen(@OptLen)); end; Function SocketPair(Domain,SocketType,Protocol:Longint;var Pair:TSockArray):Longint; begin - SocketPair:=fpsocketpair(domain,sockettype,protocol,@pair); + SocketPair:=fpsocketpair(domain,sockettype,protocol,@pair[1]); end; {****************************************************************************** Index: rtl/inc/dynarr.inc =================================================================== --- rtl/inc/dynarr.inc (revision 4765) +++ rtl/inc/dynarr.inc (working copy) @@ -340,18 +340,18 @@ procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer; dimCnt: SizeInt; lengthVec: PSizeInt); var - preallocated : array[0..10] of PSizeInt; + preallocated : array[0..10] of SizeInt; i : SizeInt; p : PSizeInt; begin if dimCnt<=length(preallocated) then - p:[EMAIL PROTECTED] + p:[EMAIL PROTECTED] else getmem(p,sizeof(SizeInt)*dimCnt); for i:=0 to dimCnt-1 do p[i]:=lengthVec[dimCnt-1-i]; int_dynarray_setlength(a,typeInfo,dimCnt,p); - if p<>@preallocated then + if p<>@preallocated[0] then freemem(p); end; Index: rtl/objpas/sysutils/sysstr.inc =================================================================== --- rtl/objpas/sysutils/sysstr.inc (revision 4765) +++ rtl/objpas/sysutils/sysstr.inc (working copy) @@ -1921,7 +1921,7 @@ Begin Buf[FloatToTextFmt(@Buf[0],Value,Pchar(Format))]:=#0; - Result:=StrPas(@Buf); + Result:=StrPas(@Buf[0]); End; function FormatCurr(const Format: string; Value: Currency): string; Index: rtl/objpas/sysutils/dati.inc =================================================================== --- rtl/objpas/sysutils/dati.inc (revision 4765) +++ rtl/objpas/sysutils/dati.inc (working copy) @@ -708,10 +708,10 @@ DecodeDateFully(DateTime, Year, Month, Day, DayOfWeek); DecodeTime(DateTime, Hour, Minute, Second, MilliSecond); ResultLen := 0; - ResultCurrent := @ResultBuffer; + ResultCurrent := @ResultBuffer[0]; StoreFormat(FormatStr); ResultBuffer[ResultLen] := #0; - result := StrPas(@ResultBuffer); + result := StrPas(@ResultBuffer[0]); end ; { DateTimeToString formats DateTime to the given format in FormatStr } Index: rtl/objpas/sysutils/sysuintf.inc =================================================================== --- rtl/objpas/sysutils/sysuintf.inc (revision 4765) +++ rtl/objpas/sysutils/sysuintf.inc (working copy) @@ -73,19 +73,20 @@ end; end; - function HexByte(p: PChar): Char; + function HexByte(p: PChar): Byte; begin - Result:=Char((HexChar(p[0]) shl 4) + HexChar(p[1])); + Result:=(HexChar(p[0]) shl 4) + HexChar(p[1]); end; var i: integer; - src, dest: PChar; + src: PChar; + dest: PByte; begin if ((Length(S)<>38) or (s[1]<>'{')) then raise EConvertError.CreateFmt(SInvalidGUID, [s]); - dest:[EMAIL PROTECTED]; + dest:[EMAIL PROTECTED]; src:=PChar(s); inc(src); for i:=0 to 3 do Index: rtl/objpas/typinfo.pp =================================================================== --- rtl/objpas/typinfo.pp (revision 4765) +++ rtl/objpas/typinfo.pp (working copy) @@ -500,7 +500,7 @@ hp:=GetTypeData(Typeinfo); // the class info rtti the property rtti follows immediatly pd:=aligntoptr(pointer(pointer(@hp^.UnitName)+Length(hp^.UnitName)+1)); - Result:[EMAIL PROTECTED]; + Result:=PPropInfo(@pd^.PropList); for i:=1 to pd^.PropCount do begin // found a property of that name ? Index: compiler/cutils.pas =================================================================== --- compiler/cutils.pas (revision 4765) +++ compiler/cutils.pas (working copy) @@ -842,7 +842,7 @@ i:=1; len:=0; varcounter:=0; - varptr:[EMAIL PROTECTED]; + varptr:[EMAIL PROTECTED]; while i<=length(s) do begin if (s[i]='$') and (i<length(s)) then @@ -863,7 +863,7 @@ inc(i); until s[i]='}'; varvalues[varcounter]:=Pstring(varptr); - if varptr>@varvaluedata+maxdata then + if varptr>@varvaluedata[0]+maxdata then internalerrorproc(200411152); Pstring(varptr)^:=get_var_value(varname); inc(len,length(Pstring(varptr)^)); Index: compiler/cp8859_1.pas =================================================================== --- compiler/cp8859_1.pas (revision 4765) +++ compiler/cp8859_1.pas (working copy) @@ -270,7 +270,7 @@ unicodemap : tunicodemap = ( cpname : '8859-1'; - map : @map; + map : @map[0]; lastchar : 255; next : nil; internalmap : true Index: compiler/cp850.pas =================================================================== --- compiler/cp850.pas (revision 4765) +++ compiler/cp850.pas (working copy) @@ -270,7 +270,7 @@ unicodemap : tunicodemap = ( cpname : 'cp850'; - map : @map; + map : @map[0]; lastchar : 255; next : nil; internalmap : true Index: compiler/globals.pas =================================================================== --- compiler/globals.pas (revision 4765) +++ compiler/globals.pas (working copy) @@ -1816,7 +1816,7 @@ var p: pbyte; begin - p := @r; + p := pbyte(@r); {$ifdef CPU_ARM} inc(p,4); {$else} Index: compiler/ncal.pas =================================================================== --- compiler/ncal.pas (revision 4765) +++ compiler/ncal.pas (working copy) @@ -1411,12 +1411,14 @@ result:=vmttree; end; + type + pcallparanode = ^tcallparanode; procedure tcallnode.bind_parasym; var i : integer; pt : tcallparanode; - oldppt : ^tcallparanode; + oldppt : pcallparanode; varargspara, currpara : tparavarsym; used_by_callnode : boolean; @@ -1425,14 +1427,14 @@ temp : ttempcreatenode; begin pt:=tcallparanode(left); - oldppt:[EMAIL PROTECTED]; + oldppt:=pcallparanode(@left); { flag all callparanodes that belong to the varargs } i:=paralength; while (i>procdefinition.maxparacount) do begin include(pt.callparaflags,cpf_varargs_para); - oldppt:[EMAIL PROTECTED]; + oldppt:=pcallparanode(@pt.right); pt:=tcallparanode(pt.right); dec(i); end; @@ -1518,7 +1520,7 @@ if not assigned(pt) then internalerror(200310052); pt.parasym:=currpara; - oldppt:[EMAIL PROTECTED]; + oldppt:=pcallparanode(@pt.right); pt:=tcallparanode(pt.right); end; Index: compiler/cp437.pas =================================================================== --- compiler/cp437.pas (revision 4765) +++ compiler/cp437.pas (working copy) @@ -270,7 +270,7 @@ unicodemap : tunicodemap = ( cpname : 'cp437'; - map : @map; + map : @map[0]; lastchar : 255; next : nil; internalmap : true Index: compiler/scanner.pas =================================================================== --- compiler/scanner.pas (revision 4765) +++ compiler/scanner.pas (working copy) @@ -269,12 +269,14 @@ if s='TP' then aktmodeswitches:=tpmodeswitches else - if s='FPC' then - aktmodeswitches:=fpcmodeswitches - else - if s='OBJFPC' then - aktmodeswitches:=objfpcmodeswitches - else + if s='FPC' then begin + aktmodeswitches:=fpcmodeswitches; + include(aktlocalswitches, cs_typed_addresses); + end else + if s='OBJFPC' then begin + aktmodeswitches:=objfpcmodeswitches; + include(aktlocalswitches, cs_typed_addresses); + end else if s='GPC' then aktmodeswitches:=gpcmodeswitches else Index: compiler/systems/t_emx.pas =================================================================== --- compiler/systems/t_emx.pas (revision 4765) +++ compiler/systems/t_emx.pas (working copy) @@ -115,7 +115,7 @@ end; var aout_str_size:longint; - aout_str_tab:array[0..2047] of byte; + aout_str_tab:array[0..2047] of char; aout_sym_count:longint; aout_sym_tab:array[0..5] of nlist; @@ -258,7 +258,7 @@ blockwrite(out_file,aout_text,aout_text_size); blockwrite(out_file,aout_treloc_tab,sizeof(reloc)*aout_treloc_count); blockwrite(out_file,aout_sym_tab,sizeof(aout_sym_tab[0])*aout_sym_count); - longint((@aout_str_tab)^):=aout_str_size; + plongint(@aout_str_tab)^:=aout_str_size; blockwrite(out_file,aout_str_tab,aout_str_size); end; Index: compiler/systems/t_os2.pas =================================================================== --- compiler/systems/t_os2.pas (revision 4765) +++ compiler/systems/t_os2.pas (working copy) @@ -115,7 +115,7 @@ end; var aout_str_size:longint; - aout_str_tab:array[0..2047] of byte; + aout_str_tab:array[0..2047] of char; aout_sym_count:longint; aout_sym_tab:array[0..5] of nlist; @@ -258,7 +258,7 @@ blockwrite(out_file,aout_text,aout_text_size); blockwrite(out_file,aout_treloc_tab,sizeof(reloc)*aout_treloc_count); blockwrite(out_file,aout_sym_tab,sizeof(aout_sym_tab[0])*aout_sym_count); - longint((@aout_str_tab)^):=aout_str_size; + plongint(@aout_str_tab)^:=aout_str_size; blockwrite(out_file,aout_str_tab,aout_str_size); end; Index: compiler/x86/aasmcpu.pas =================================================================== --- compiler/x86/aasmcpu.pas (revision 4765) +++ compiler/x86/aasmcpu.pas (working copy) @@ -1550,7 +1550,7 @@ ea_data : ea; begin len:=0; - codes:[EMAIL PROTECTED]; + codes:[EMAIL PROTECTED]; repeat c:=ord(codes^); inc(codes); @@ -1707,7 +1707,7 @@ $0, $A, $A, $B, $8, $4); var c : byte; - pb, + pb : pbyte; codes : pchar; bytes : array[0..3] of byte; rfield, @@ -1936,16 +1936,16 @@ if not process_ea(oper[opidx]^,ea_data,rfield) then Message(asmw_e_invalid_effective_address); - pb:[EMAIL PROTECTED]; - pb^:=chr(ea_data.modrm); + pb:[EMAIL PROTECTED]; + pb^:=ea_data.modrm; inc(pb); if ea_data.sib_present then begin - pb^:=chr(ea_data.sib); + pb^:=ea_data.sib; inc(pb); end; - s:=pb-pchar(@bytes); + s:[EMAIL PROTECTED]; objdata.writebytes(bytes,s); case ea_data.bytes of Index: compiler/nadd.pas =================================================================== --- compiler/nadd.pas (revision 4765) +++ compiler/nadd.pas (working copy) @@ -606,8 +606,8 @@ c2[0]:=char(byte(tordconstnode(right).value)); c2[1]:=#0; l2:=1; - s1:[EMAIL PROTECTED]; - s2:[EMAIL PROTECTED]; + s1:[EMAIL PROTECTED]; + s2:[EMAIL PROTECTED]; concatstrings:=true; end else if (lt=stringconstn) and (rt=ordconstn) and is_char(rd) then @@ -616,7 +616,7 @@ l1:=tstringconstnode(left).len; c2[0]:=char(byte(tordconstnode(right).value)); c2[1]:=#0; - s2:[EMAIL PROTECTED]; + s2:[EMAIL PROTECTED]; l2:=1; concatstrings:=true; end @@ -625,7 +625,7 @@ c1[0]:=char(byte(tordconstnode(left).value)); c1[1]:=#0; l1:=1; - s1:[EMAIL PROTECTED]; + s1:[EMAIL PROTECTED]; s2:=tstringconstnode(right).value_str; l2:=tstringconstnode(right).len; concatstrings:=true; Index: compiler/utils/fpcmkcfg.pp =================================================================== --- compiler/utils/fpcmkcfg.pp (revision 4765) +++ compiler/utils/fpcmkcfg.pp (working copy) @@ -82,7 +82,7 @@ AddToList(List,'BUILDDATE',DateToStr(Date)); AddToList(List,'BUILDTIME',TimeToStr(Time)); Cfg:=TStringList.Create; - Cfg.Text:=StrPas(Addr(DefaultConfig)); + Cfg.Text:=StrPas(Addr(DefaultConfig[0][1])); end; Procedure Done; @@ -190,9 +190,9 @@ begin case IDEBuildin of 1: - Cfg.Text:=StrPas(Addr(fpcfg)); + Cfg.Text:=StrPas(Addr(fpcfg[0][1])); 2: - Cfg.Text:=StrPas(Addr(fpini)); + Cfg.Text:=StrPas(Addr(fpini[0][1])); end; AddToList(List,'TEMPLATEFILE','builtin');
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel