Funktion
Mit der INVOKE-Anweisung wird eine Methode aufgerufen.
Format
INVOKE bezeichner-1 {bezeichner-2 | literal-1}
[USING { [BY REFERENCE] {bezeichner-3 | OMITTED}
| [BY CONTENT] {bezeichner-5 | arithmetischer-ausdruck-1 | literal-2}
| [BY VALUE] {bezeichner-5 | arithmetischer-ausdruck-1 | literal-2}
}... ]
[RETURNING bezeichner-4]
[ON EXCEPTION unbedingte-anweisung-1]
[NOT ON EXCEPTION unbedingte-anweisung-2]
[END-INVOKE]
Syntaxregeln
bezeichner-1 muss eine Objektreferenz oder ein Klassenname sein.
literal-1 muss ein alphanumerisches Literal sein. Es darf aber keine figurative Konstante sein.
Falls bezeichner-1 eine universelle Objektreferenz ist, darf weder die BY CONTENT noch die BY VALUE-Angabe spezifiziert sein. Die Angabe BY REFERENCE wird, sofern sie nicht angegeben ist, implizit angenommen.
bezeichner-2 muss ein alphanumerisches Datenelement sein.
bezeichner-3 muss ein Datenelement sein, das in der FILE SECTION, WORKING-STORAGE SECTION, LOCAL-STORAGE SECTION oder LINKAGE SECTION definiert ist.
Wird bezeichner-5 oder sein entsprechender formaler Parameter (in der PROCEDURE DIVISION-Überschrift) mit der BY VALUE-Angabe spezifiziert, so darf er nur von der Klasse numerisch, objekt oder zeiger sein.
bezeichner-4 muss ein Datenelement sein, das in der FILE SECTION, WORKING-STORAGE SECTION, LOCAL-STORAGE SECTION oder LINKAGE SECTION definiert ist.
Falls bezeichner-2 angegeben ist, muss bezeichner-1 eine universelle Objektreferenz sein.
Ist bezeichner-1 keine universelle Objektreferenz ist, gelten die Konformitätsregeln für Parameter und Rückgabeelemente.
Ist bezeichner-1 keine universelle Objektreferenz und ist die Angabe BY CONTENT oder BY REFERENCE für ein Argument spezifiziert, dann muss BY REFERENCE auch für den entsprechenden formalen Parameter in der PROCEDURE DIVISION-Überschrift angegeben werden.
BY CONTENT darf nicht weggelassen werden, wenn bezeichner-5 als Empfangsfeld zugelassen ist.
Ist die Angabe BY VALUE für ein Argument spezifiziert, so muss sie auch für den entsprechenden formalen Parameter in der PROCEDURE DIVISION-Überschrift angegeben sein.
Ist OMITTED angegeben, so muss die Angabe OPTIONAL für den entsprechenden formalen Parameter in der PROCEDURE DIVISION-Überschrift spezifiziert sein.
Wenn bezeichner-1 eine universelle Objektreferenz ist, dürfen die formalen Parameter sowie das formale Rückgabe-Element nicht mit der ANY LENGTH-Klausel definiert sein.
Wenn bezeichner-3 oder bezeichner-4 mit der ANY LENGTH-Klausel definiert ist, muss der entsprechende formale Parameter ebenfalls mit der ANY LENGTH-Klausel definiert sein. Wenn bezeichner-5 mit der ANY LENGTH-Klausel definiert ist, darf der entsprechende formale Parameter nicht mit der ANY LENGTH-Klausel definiert sein.
Wenn der mit bezeichner-5 korrespondierende formale Parameter mit der ANY LENGTH-Klausel definiert ist, muss bezeichner-5 von der Klasse alphabetisch oder alphanumerisch sein.
bezeichner-5 und jeder in arithmetischer-ausdruck-1 spezifizierte Bezeichner ist ein sendender Operand.
bezeichner-4 ist ein Empfangsfeld.
bezeichner-3 muss auf einen Adressbezeichner oder ein Datenelement verweisen, der in der FILE SECTION, WORKING-STORAGE SECTION, LOCAL-STORAGE SECTION oder LINKAGE-SECTION definiert ist.
Wenn die BY REFERENCE-Angabe für bezeichner-3, der kein Adressbezeichner ist, spezifiziert oder impliziert ist, stellt bezeichner-3 sowohl ein Sende-, als auch Empfangsfeld dar. Andernfalls spezifiziert bezeichner-3 ein Sendefeld.
Anmerkung:
Die Angabe BY REFERENCE ADDRESS OF datenname wird behandelt wie BY CONTENT ADDRESS OF datenname.
Allgemeine Regeln
bezeichner-1 kennzeichnet eine Objektinstanz. Falls bezeichner-1 ein Klassenname ist, steht er für das Fabrik-Objekt dieser Klasse. Literal-1 oder der Inhalt von bezeichner-2 kennzeichnet eine Methode, von der diese Objektinstanz bearbeiten wird.
literal-1 oder der Inhalt von bezeichner-2 ist der Name der gerufenen Methode, wie er im zugehörigen METHOD-ID Paragraf angegeben ist (als COBOL-Wort).Die Reihenfolge der Argumente in der USING-Angabe der INVOKE-Anweisung und die entsprechenden formalen Parameter in der USING-Angabe der PROCEDURE DIVISION-Überschrift der aufgerufenen Methode bestimmen die Zuordnung von Argumenten zu formalen Parametern. Diese Zuordnung ist positionsabhängig und unabhängig von Namen. Das erste Argument entspricht also dem ersten formalen Parameter, das zweite dem zweiten und das n-te dem n-ten Parameter.
Ein Argument, das lediglich aus einem einzelnen Bezeichner oder Literal besteht, wird als Bezeichner oder Literal betrachtet und nicht als arithmetischer Ausdruck.
Falls bezeichner-1 Null ist, entsteht die Ausnahmesituation EC-OO-NULL. Es wird keine Methode aktiviert und die Ausführung erfolgt wie in Absatz 6f.
Falls bezeichner-1 keine universelle Objektreferenz ist und ein Argument ohne eine der Angaben BY REFERENCE, BY CONTENT oder BY VALUE spezifiziert ist, wird dieses Argument wie folgt behandelt:
Es wird BY REFERENCE angenommen, wenn die BY REFERENCE-Angabe für den entsprechenden formalen Parameter spezifiziert oder implizit gegeben ist und das Argument ein Bezeichner ist, der als Empfangsfeld zulässig ist.
Es wird BY CONTENT angenommen, wenn die BY REFERENCE-Angabe für den entsprechenden formalen Parameter spezifiziert oder implizit gegeben ist und das Argument ein Literal , ein arithmetischer Ausdruck oder irgendein anderer Bezeichner ist, der nicht als Empfangsfeld zulässig ist.
Es wird BY VALUE angenommen, wenn die BY VALUE-Angabe für den entsprechenden formalen Parameter spezifiziert ist.
Die Ausführung der INVOKE-Anweisung läuft wie folgt ab:
Zuerst werden arithmetischer-ausdruck-1, bezeichner-1, bezeichner-2, bezeichner-3 und bezeichner-5 berechnet. Weiter wird am Anfang der Ausführung der INVOKE-Anweisung die Element-Identifizierung für bezeichner-4 vorgenommen. Falls dabei eine Ausnahmebedingung entsteht, wird keine Methode aufgerufen und die Ausführung verläuft wie in Absatz 6f beschrieben.
Das Laufzeitsystem versucht die aufgerufene Methode zu finden. Kann die Methode nicht gefunden werden oder sind die Betriebsmittel, die zur Ausführung der Methode erforderlich sind, nicht verfügbar, entsteht die Ausnahmesituation EC-OO-METHOD. Die Methode wird nicht aktiviert und die Ausführung erfolgt wie in Abschnitt 6f angegeben.
Ist bezeichner-1 eine universelle Objektreferenz müssen die Konformitätsregeln für Parameter und Rückgabeelemente erfüllt sein. Liegt eine Verletzung dieser Regeln vor, entsteht die Ausnahmesituation EC-OO-UNIVERSAL, die Methode wird nicht aktiviert und die Ausführung erfolgt wie in Abschnitt 6f beschrieben.
Die in der INVOKE-Anweisung angegebene Methode wird zur Ausführung bereitgestellt und die Steuerung wird an diese aufgerufene Methode übergeben (konform den Aufrufkonventionen).
Nachdem die aufgerufene Methode die Steuerung zurückgegeben hat, wird, falls vorhanden, unbedingte-anweisung-2 ausgeführt und an das Ende der INVOKE-Anweisung verzweigt.
Ist eine der Ausnahmesituationen EC-OO-NULL, EC-OO-METHOD oder EC-OO-UNIVERSAL entstanden, so ergibt sich folgender Ablauf:
Ist ON EXCEPTION angegeben, so wird zu unbedingte-anweisung-1 und anschließend an das Ende der INVOKE-Anweisung verzweigt. Der zugehörige Ausnahmezustand wird nicht ausgelöst.
Ist ON EXCEPTION nicht angegeben und die Überprüfung der Ausnahmesituation eingeschaltet, so wird der zugehörige Ausnahmezustand ausgelöst und in die entsprechende USE-Prozedur verzweigt. Nach Ausführung von RESUME NEXT StATEMENT in der USE-Prozedur wird unbedingte-anweisung-2 ignoriert und bei der nächsten ausführbaren Anweisung nach Ende der INVOKE-Anweisung fortgesetzt.
Ist ON EXCEPTION nicht angegeben, die Überprüfung der Ausnahmesituation nicht eingeschaltet, aber NOT ON EXCEPTION angegeben, so wird unbedingte-anweisung-2 ignoriert und bei der nächsten ausführbaren Anweisung nach Ende der INVOKE-Anweisung fortgesetzt.
Ist weder ON EXCEPTION noch NOT ON EXCEPTION angegeben und die Überprüfung der Ausnahmesituation nicht eingeschaltet, wird der Programmlauf abgebrochen.
Ist eine RETURNING-Angabe spezifiziert, wird das Ergebnis der aufgerufenen Methode in bezeichner-4 abgelegt.
Ist eine OMITTED-Angabe spezifiziert oder ein Argument ganz weggelassen, dann ist die Omitted-Argument-Bedingung für diesen Parameter in der aufgerufenen Methode wahr.
Ist für einen Parameter die Omitted-Argument-Bedingung wahr und wird darauf in einer aufgerufenen Methode (außer in einer Omitted-Argument Bedingung) Bezug genommen, so ist das Verhalten undefiniert.