標準関数と文法の変更
ジェネリックス:インデックス への移動
ジェネリックスをサポートする標準関数の変更リストは次のとおりです。
次に例を示します。
インスタンス化型 : TFoo<Integer,String> 開いた生成型 : TFoo<Integer,T> ジェネリック型 : TFoo<,> 型パラメータ: T
標準関数:
procedure Initialize(var X; Count:Cardinal); [Win32] procedure Finalize(var X); [Win32] インスタンス化型 : 使用できる 開いた生成型 : 使用できる ジェネリック型 : 使用できない 型パラメータ :使用できる function High(X:TypeId): Integer|Int64|UInt64; function Low(X:TypeId): Integer|Int64|UInt64; インスタンス化型 : 使用できる 開いた生成型 : 使用できない ジェネリック型 : 使用できない 型パラメータ : 使用できない function Default(X:TYPE_ID): valueOfTypeId>; インスタンス化型 : 使用できる 開いた生成型 : 使用できる ジェネリック型 : 使用できない 型パラメータ : 使用できる function New; // New( PtrVar ); [Win32] // New( PtrToRecordOrObjectVar,<CtorIdent> ); [Win32] // New( PtrToRecordOrObjectVar, <CtorIdent> ( CtorParams ) ); [Win32] // P := New( PtrType ); [Win32] // P := New( PtrTypeOfRecordOrObject, <CtorIdent> ); [Win32] // P := New( PtrTypeOfRecordOrObject, <CtorIdent> ( CtorParams ) ); [Win32] インスタンス化型 : 使用できる 開いた生成型 : 使用できない ジェネリック型 : 使用できない 型パラメータ : 使用できない function SizeOf(TYPE_ID): PosInt; インスタンス化型 : 使用できる 開いた生成型 : 使用できる ジェネリック型 : 使用できない 型パラメータ : 使用できる function TypeInfo; function TypeHandle; function TypeId; // function TypeHandle(Identifier): Pointer; [Win32] // function TypeInfo(Identifier): Pointer; [Win32] // function TypeOf(object): Pointer; [Win32] インスタンス化型 : 使用できる 開いた生成型 : 使用できる ジェネリック型 : 使用できない 型パラメータ : 使用できる
Delphi 言語文法の変更
これらの変更はジェネリックスやジェネリック型をサポートするためのものです。
{ Type Declarations } TypeDeclaration -> [ CAttrs ] Ident '=' Type -> [ CAttrs ] Ident '=' RecordTypeDecl -> [ CAttrs ] Ident '=' ClassTypeDecl -> [ CAttrs ] Ident '=' InterfaceTypeDecl -> [ CAttrs ] Ident '=' ClassHelperTypeDecl -> [ CAttrs ] Ident '=' RecordHelperTypeDecl -> [ CAttrs ] Ident '=' ObjectTypeDecl {Win32 のみ} -> [ CAttrs ] Ident '=' DispatchInterfaceType {Win32 のみ} -> [ CAttrs ] Ident '=' TYPE TypeId {NEW} -> [ CAttrs ] Ident TypeParams '=' RecordTypeDecl {NEW} -> [ CAttrs ] Ident TypeParams '=' ClassTypeDecl {NEW} -> [ CAttrs ] Ident TypeParams '=' InterfaceTypeDecl {NEW} -> [ CAttrs ] Ident TypeParams '=' Type {NEW} TypeParams -> '<' TypeParamDeclList '>' {NEW} TypeParamDeclList -> TypeParamDecl/';'... {NEW} TypeParamDecl -> TypeParamList [ ':' ConstraintList ] {NEW} TypeParamList -> ( [ CAttrs ] [ '+' | '-' [ CAttrs ] ] Ident )/','... {NEW} ConstraintList -> Constraint/','... {NEW} Constraint -> CONSTRUCTOR {NEW} -> RECORD {NEW} -> CLASS {NEW} -> TypeId MethodResolutionClause -> FUNCTION InterfaceIdent '.' {OLD} Ident '=' Ident ';' {NEW} Ident [ TypeArgs ] '=' Ident [ TypeArgs ] ';' -> PROCEDURE InterfaceIdent '.' {OLD} Ident '=' Ident ';' {NEW} Ident [ TypeArgs ] '=' Ident [ TypeArgs ] ';' FunctionHeading -> [ CLASS ] FUNCTION Ident {NEW} [ FormalTypeParamList ] [ FormalParameterList ] ':' TypeIdStringFile ProcedureHeading -> [ CALSS ] PROCEDURE Ident {NEW} [ FormalTypeParamList ] [ FormalParameterList ] ClassOperatorHeading -> CLASS OPERATOR OperatorIdent {NEW} [ FormalTypeParamList ] FormalParameterList : TypeIdStringFile ConstructorHeading -> CONSTRUCTOR Ident {NEW} [ FormalTypeParamList ] [ FormalParameterList ] RecordConstructorHeading -> CONSTRUCTOR Ident {NEW} [ FormalTypeParamList ] FormalParameterList DestructorHeading -> DESTRUCTOR Ident {NEW} [ FormalTypeParamList ] [ FormalParameterList ] MethodBodyHeading -> [ CLASS ] FUNCTION NSTypeId '.' Ident {NEW} [ FormalTypeParamList ] [ FormalParameterList ] ':' TypeIdStringFile -> [ CLASS ] PROCEDURE NSTypeId '.' Ident {NEW} [ FormalTypeParamList ] [ FormalParameterList ] ProcedureTypeHeading -> PROCEDURE {NEW} [ FormalTypeParamList ] [ FormalParameterList ] FunctionTypeHeading -> FUNCTION {NEW} [ FormalTypeParamList ] [ FormalParameterList ] ':' TypeIdStringFile FormalTypeParamList -> '<' TypeParamDeclList >' { Types } Type -> TypeId -> SimpleType -> StructualType -> PointerType -> StringType -> ProcedureType -> VariantType {Win32 のみ} -> ClassRefType -> TypeRefType {NEW}-> ClassTypeId TypeArgs {NEW}-> RecordTypeId TypeArgs {NEW}-> InterfaceIdent TypeArgs {NEW} TypeArgs -> '<' ( TypeId | STRING )/','... '>' { Attributes } CAttrExpr -> ConstExpr -> TYPEOF '(' TypeId ')' {NEW} -> TYPEOF '(' TypeId '<' [ ','... ] '>' ')' {NEW} -> TYPEOF '(' TypeId '<' TypeId/','... '>' ')'