Anzeigen: Object Pascal C++
Anzeigeeinstellungen

Änderungen von Standardfunktionen und Grammatik

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Generics - Index

Im Folgenden sind die zur Unterstützung von Generics erforderlichen Änderungen von Standardfunktionen aufgeführt.

Beispiele:

         Instantiierter Typ      : TFoo<Integer,String>
        Offen konstruierter Typ  : TFoo<Integer,T>
        Generischer Typ        : TFoo<,>
        Typparameter:        T

Standardfunktionen:

        procedure Initialize(var X; Count:Cardinal);                        [Win32]
        procedure Finalize(var X);                                          [Win32]
                Instantiierter Typ      : zulässig
                Offen konstruierter Typ  : zulässig
                Generischer Typ        : NICHT zulässig
                Typparameter       :zulässig

        function High(X:TypeId): Integer|Int64|UInt64;
        function Low(X:TypeId): Integer|Int64|UInt64;
                Instantiierter Typ      : zulässig
                Offen konstruierter Typ  : NICHT zulässig
                Generischer Typ        : NICHT zulässig
                Typparameter: NICHT zulässig

        function Default(X:TYPE_ID): valueOfTypeId>;
                Instantiierter Typ      : zulässig
                Offen konstruierter Typ  : zulässig
                Generischer Typ        : NICHT zulässig
                Typparameter: zulässig

        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]
                Instantiierter Typ      : zulässig
                Offen konstruierter Typ  : NICHT zulässig
                Generischer Typ        : NICHT zulässig
                Typparameter: NICHT zulässig

        function SizeOf(TYPE_ID): PosInt;
                Instantiierter Typ      : zulässig
                Offen konstruierter Typ  : zulässig
                Generischer Typ        : NICHT zulässig
                Typparameter: zulässig

        function TypeInfo;
        function TypeHandle;
        function TypeId;
        // function TypeHandle(Identifier): Pointer;                  [Win32]

        // function TypeInfo(Identifier): Pointer;                    [Win32]

        // function TypeOf(object): Pointer;                          [Win32]
               Instantiierter Typ      : zulässig
                Offen konstruierter Typ  : zulässig
                Generischer Typ        : NICHT zulässig
                Typparameter: zulässig

Grammatische Änderungen der Object Pascal-Sprache

Diese Änderungen waren zur Unterstützung generischer oder Generic-Typen erforderlich.

 { Typdeklarationen }

            TypeDeclaration -> [ CAttrs ] Ident '=' Type
                                    -> [ CAttrs ] Ident '=' RecordTypeDecl
                                    -> [ CAttrs ] Ident '=' ClassTypeDecl
                                    -> [ CAttrs ] Ident '=' InterfaceTypeDecl
                                    -> [ CAttrs ] Ident '=' ClassHelperTypeDecl
                                    -> [ CAttrs ] Ident '=' RecordHelperTypeDecl
                                    -> [ CAttrs ] Ident '=' ObjectTypeDecl             {nur Win32}
                                    -> [ CAttrs ] Ident '=' DispatchInterfaceType      {nur Win32}
                                    -> [ CAttrs ] Ident '=' TYPE TypeId

            {NEU}           -> [ CAttrs ] Ident TypeParams '=' RecordTypeDecl
            {NEU}           -> [ CAttrs ] Ident TypeParams '=' ClassTypeDecl
            {NEU}           -> [ CAttrs ] Ident TypeParams '=' InterfaceTypeDecl
            {NEU}           -> [ CAttrs ] Ident TypeParams '=' Type

            {NEU} TypeParams -> '<' TypeParamDeclList '>'

            {NEU} TypeParamDeclList -> TypeParamDecl/';'...

            {NEU} TypeParamDecl -> TypeParamList [ ':' ConstraintList ]

            {NEU} TypeParamList -> ( [ CAttrs ] [ '+' | '-' [ CAttrs ] ] Ident )/','...

            {NEU} ConstraintList -> Constraint/','...

            {NEU} Constraint -> CONSTRUCTOR
            {NEU}            -> RECORD
            {NEU}            -> CLASS
            {NEU}            -> TypeId

            MethodResolutionClause -> FUNCTION InterfaceIdent '.'
            {ALT}                     Ident               '=' Ident              ';'
            {NEU}                     Ident [ TypeArgs ]  '=' Ident [ TypeArgs ] ';'
                                                            -> PROCEDURE InterfaceIdent '.'
            {ALT}                     Ident               '=' Ident              ';'
            {NEU}                     Ident [ TypeArgs ]  '=' Ident [ TypeArgs ] ';'

            FunctionHeading -> [ CLASS ] FUNCTION Ident
            {NEU}               [ FormalTypeParamList ]
                                      [ FormalParameterList ] ':' TypeIdStringFile

            ProcedureHeading -> [ CALSS ] PROCEDURE Ident
            {NEU}                [ FormalTypeParamList ]
                                       [ FormalParameterList ]

            ClassOperatorHeading -> CLASS OPERATOR OperatorIdent
            {NEU}                    [ FormalTypeParamList ]
                                           FormalParameterList : TypeIdStringFile

            ConstructorHeading -> CONSTRUCTOR Ident
            {NEU}                  [ FormalTypeParamList ]
                                         [ FormalParameterList ]

            RecordConstructorHeading -> CONSTRUCTOR Ident
            {NEU}                        [ FormalTypeParamList ]
                                               FormalParameterList

            DestructorHeading -> DESTRUCTOR Ident
            {NEU}                 [ FormalTypeParamList ]
                                        [ FormalParameterList ]

            MethodBodyHeading -> [ CLASS ] FUNCTION NSTypeId '.' Ident
            {NEU}                 [ FormalTypeParamList ]
                                        [ FormalParameterList ] ':' TypeIdStringFile
                                   -> [ CLASS ] PROCEDURE NSTypeId '.' Ident
            {NEU}                 [ FormalTypeParamList ]
                                        [ FormalParameterList ]

            ProcedureTypeHeading -> PROCEDURE
            {NEU}                    [ FormalTypeParamList ]
                                           [ FormalParameterList ]

            FunctionTypeHeading -> FUNCTION
            {NEU}                   [ FormalTypeParamList ]
            [ FormalParameterList ] ':' TypeIdStringFile

            FormalTypeParamList -> '<' TypeParamDeclList >'


            { Typen }

            Type -> TypeId
                     -> SimpleType
                     -> StructualType
                     -> PointerType
                     -> StringType
                     -> ProcedureType
                     -> VariantType                                                {nur Win32}
                     -> ClassRefType
                     -> TypeRefType
            {NEU}-> ClassTypeId TypeArgs
            {NEU}-> RecordTypeId TypeArgs
            {NEU}-> InterfaceIdent TypeArgs

            {NEU} TypeArgs -> '<' ( TypeId | STRING )/','... '>'


            { Attribute }

            CAttrExpr -> ConstExpr
                              -> TYPEOF '(' TypeId ')'
            {NEU}     -> TYPEOF '(' TypeId '<' [ ','... ] '>' ')'
            {NEU}     -> TYPEOF '(' TypeId '<' TypeId/','... '>' ')'

Siehe auch

Meine Werkzeuge
In anderen Sprachen