ad hoc set constants containing varying number cdecl-like calling
conventions
o added pocall_sysv_abi_cdecl and pocall_ms_abi_cdecl to cstylearrayofconst
o also allow C-style blocks with mwpascal instead of cdecl (mwpascal = cdecl
with "const" = "constref" for record parameters)
o did not touch cases related to name mangling and import/export names,
because those are a real mess and easily break things left and right :/
git-svn-id: trunk@35479 -
+ changed varname/funcname properties to string, saving many conversion
+ array of record
+ pass by reference
- pass local var to a var/out parameter
- pass variable to a var/out parameter
- pass reference to a var/out parameter
- pass array element to a var/out parameter
+ proc types
- implemented as immutable wrapper function
- assign := nil, proctype (not clone), @function, @method
- call explicit and implicit
- compare equal and notequal with nil, proctype, address, function
- assigned(proctype)
- pass as argument
- methods
- mode delphi: proctype:=proc
- mode delphi: functype=funcresulttype
+ class-of
- assign := nil, var
- call class method
- call constructor
- operators =, <>
- class var, property, method
- Self in class method
- typecast
git-svn-id: trunk@35472 -
- 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 -