- type cast class-of
- type cast Self in class method
- bark on statement without call, e.g. "i;"
- mode delphi procedure types
- give each message an unique id
git-svn-id: trunk@35470 -
code from one unit to another, but in splitting some methods
I made a couple of mistakes :/ (causing global variables to be
initialised three times)
git-svn-id: trunk@35461 -
* fpc_Initialize: Initialize operator is called after recordrtti(data,typeinfo,@int_initialize);
* fpc_Finalize: Finalize operator is called before recordrtti(data,typeinfo,@int_finalize);
* fpc_Addref: AddRef operator is called after recordrtti(data,typeinfo,@int_addref);
* fpc_Copy: Copy operator (if exists) is called instead of default copy behavior
* replace RTTIRecordRttiInfoToInitInfo function (which was introduced only to speed-up InitializeArray/FinalizeArray) with a more advanced RTTIRecordOp function. Result of RTTIRecordRttiInfoToInitInfo is now returned in initrtti parameter. Additionally as new result is returned PRecordInfoInit which is usefully in basic RTL functions: fpc_Initialize, fpc_Finalize, fpc_Addref, fpc_Copy
git-svn-id: trunk@35446 -
compiler/ncgrtti.pas
+ write_record_operators procedure which fills simple VMT like table for MO.
* recorddef_rtti save MO (if exists)
* objectdef_rtti_fields save nil pointer/entry for objects rtti (have same RTL parts like for records)
compiler/options.pas
+ new define FPC_HAS_MANAGEMENT_OPERATORS
compiler/symconst.pas
+ new item itp_init_record_operators for tinternaltypeprefix enum
+ new entry '$init_record_operators$' in internaltypeprefixName
rtl/inc/rtti.inc
+ new field RecordOp (pointer to MO VMT table) in TRecordInfoInit
+ new types to handle MO VMT: TRTTIRecordOpVMT, PRTTIRecordOpVMT, TRTTIRecCopyOp, TRTTIRecVarOp
rtl/objpas/typinfo.pp
+ RecordOp field for TRecInitData record
git-svn-id: trunk@35445 -
+ search_management_operator function to find Tprocdef for selected management operator in record definition
tokens.pas:
+ new constants: first_managment_operator and last_managment_operator used in search_management_operator
git-svn-id: trunk@35444 -
ppu.pas:
* increase ppu version
symconst.pas:
+ new enum tmanagementoperator and set tmanagementoperators
symtable.pas, trecordsymtable:
+ new field managementoperators
+ new method includemanagementoperator
symdef.pas, trecorddef.ppuload and trecorddef.ppuwrite:
* save/load for managementoperators
git-svn-id: trunk@35439 -
pastree:
- allow custom data to be chained.
pparser:
- procedure modifier assembler
- Self[]
- Self.member
- fixed some wrong parents
pasresolver:
- aString[i]:=
- check proc external modifier
- test if WithExprScope is set
- Self[]
- Self.member
fppas2js:
- proc assembler modifier
- assigned(class-instance)
- class default property
- low(array), high(array)
- multi dim arrays [index1,index2] -> [index1][index2]
- string: read and write char aString[]
- procedure modifier external name 'funcname'
- option to add "use strict";
- with-do using local var
- with record do i:=v;
- with classinstance do begin create; i:=v; f(); i:=a[]; end;
- Self[]
- Self.member
git-svn-id: trunk@35428 -
sysv_abi_cdecl calling conventions on x86-64 to force using the SYSV/
Microsoft ABI on platforms that don't use it by default (mainly to ease
porting pure assembler routines)
git-svn-id: trunk@35425 -
directly in inline assembly: that's only possible if it's a register
parameter where the address of the record was passed (rather than the
record itself)
git-svn-id: trunk@35424 -