WITH REPORT; USE REPORT;
PROCEDURE C38202A IS
BEGIN
TEST ("C38202A", "OBJECTS HAVING ACCESS TYPES WITH DESIGNATED " &
"TASK TYPE CAN BE PREFIX OF TASKING ATTRIBUTES");
DECLARE
TASK TYPE TSK IS
ENTRY GO_ON;
END TSK;
TASK DRIVER IS
ENTRY TSK_DONE;
END DRIVER;
TYPE P_TYPE IS ACCESS TSK;
P : P_TYPE;
TASK BODY TSK IS
I : INTEGER RANGE 0 .. 2;
BEGIN
ACCEPT GO_ON;
I := IDENT_INT(5); FAILED ("CONSTAINT_ERROR NOT RAISED IN TASK " &
" TSK - 1A " & INTEGER'IMAGE(I));
EXCEPTION
WHEN CONSTRAINT_ERROR =>
DRIVER.TSK_DONE;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED IN TASK " &
"TSK - 1A ");
DRIVER.TSK_DONE;
END TSK;
TASK BODY DRIVER IS
COUNTER : INTEGER := 1;
BEGIN
P := NEW TSK;
IF NOT P'CALLABLE THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE - 1B");
END IF;
IF P'TERMINATED THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE - 1C");
END IF;
P.GO_ON;
ACCEPT TSK_DONE;
WHILE (NOT P'TERMINATED AND COUNTER <= 3) LOOP
DELAY 10.0;
COUNTER := COUNTER + 1;
END LOOP;
IF COUNTER > 3 THEN
FAILED ("TASK TSK NOT TERMINATED IN SUFFICIENT " &
"TIME - 1D");
END IF;
IF P'CALLABLE THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE - 1E");
END IF;
IF NOT P'TERMINATED THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE - 1F");
END IF;
END DRIVER;
BEGIN
NULL;
END;
DECLARE
TASK TYPE TSK IS
ENTRY GO_ON;
END TSK;
TASK DRIVER IS
ENTRY TSK_DONE;
END DRIVER;
TYPE P_TYPE IS ACCESS TSK;
P : P_TYPE;
TSK_CREATED : BOOLEAN := FALSE;
FUNCTION F1 RETURN P_TYPE IS
BEGIN
RETURN P;
END F1;
TASK BODY TSK IS
I : INTEGER RANGE 0 .. 2;
BEGIN
ACCEPT GO_ON;
I := IDENT_INT(5); FAILED ("CONSTRAINT_ERROR NOT RAISED IN TASK " &
"TSK - 2A " & INTEGER'IMAGE(I));
EXCEPTION
WHEN CONSTRAINT_ERROR =>
DRIVER.TSK_DONE;
WHEN OTHERS =>
FAILED ("WRONG EXCEPTION RAISED IN TASK " &
"TSK - 2A ");
DRIVER.TSK_DONE;
END TSK;
TASK BODY DRIVER IS
COUNTER : INTEGER := 1;
BEGIN
P := NEW TSK; IF NOT F1'CALLABLE THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE WHEN PREFIX IS VALUE FROM " &
"FUNCTION CALL - 2B");
END IF;
IF F1'TERMINATED THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE WHEN PREFIX IS VALUE FROM " &
"FUNCTION CALL - 2C");
END IF;
F1.ALL.GO_ON;
ACCEPT TSK_DONE;
WHILE (NOT F1'TERMINATED AND COUNTER <= 3) LOOP
DELAY 10.0;
COUNTER := COUNTER + 1;
END LOOP;
IF COUNTER > 3 THEN
FAILED ("TASK TSK NOT TERMINATED IN SUFFICIENT " &
"TIME - 2D");
END IF;
IF F1'CALLABLE THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE WHEN PREFIX IS VALUE FROM " &
"FUNCTION CALL - 2E");
END IF;
IF NOT F1'TERMINATED THEN
FAILED ("TASKING ATTRIBUTE RETURNS INCORRECT " &
"VALUE WHEN PREFIX IS VALUE FROM " &
"FUNCTION CALL - 2F");
END IF;
END DRIVER;
BEGIN
NULL;
END;
RESULT;
END C38202A;