Bug #10315
Address edgecases for DYNAMIC-INVOKE
Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
Due date:
% Done:
0%
billable:
No
vendor_id:
GCD
case_num:
version_reported:
version_resolved:
reviewer:
production:
No
env_name:
topics:
Related issues
History
#1 Updated by Paul Bodale about 1 year ago
This task was created to address the cases for complete support of DYNAMIC-INVOKE builtin function that were left out in the task #6490.
- All tests except assigning to buffers are passing conversion and compilation phases
- Here are the known problems and unimplemented features:
- Arithmetic ops:
- In progress the expression
1 / DYNAMIC-INVOKE(clsRef, "returnExtent")is valid and returns?when assigned to a variable and an array of?when assigned to an extent. FWD doesn't currently support this. var1 / var2 / DYNAMIC-INVOKE(clsRef, "voidMethod")returns?BUTvar1 / DYNAMIC-INVOKE(clsRef, "voidMethod")andDYNAMIC-INVOKE(clsRef, "voidMethod") / var1throw error. FWD throws error in the first case but behaves correctly on the other 2.- Wrong errors are thrown for some cases of -, + and * operations.
- In progress the expression
- Block statements:
DO WHILE DYNAMIC-INVOKE(clsRef, "retVarChar")doesn't throw error but it should.REPEAT WHILE DYNAMIC-INVOKE(clsRef, "retVarChar")doesn't throw error but it should.
- Call types:
- (object method)
SetParameter(1, "INTEGER", "INPUT", DYNAMIC-INVOKE(clsRef, "returnExtent3"))(object method) doesn't throw error but it should. - SetParameter methods have different behavior the object based one throwing error on the spot when trying to set a parameter not declared as extent and the other one throwing the error at the invocation call.
- calling internal procedures in some cases results in the wrong errors.
- calling methods in some cases results in the wrong errors.
- (object method)
- Widgets/Handles:
- (this is non-related) Dynamic combo-box doesn't have the same behavior.
- Logical ops:
DYNAMIC-INVOKE(clsRef, "returnExtent") AND logicalVaris a valid logical expression and it seems like the call is considered to beFALSE. FWD fails.- Same for the
ORoperator. IF DYNAMIC-INVOKE(clsRef, "returnExtent") THENis a valid statement and it evaluates toFALSE. FWD fails.IF NOT DYNAMIC-INVOKE(clsRef, "returnExtent") THENis a valid statement and it evaluates toTRUE. FWD fails.
- Return statement:
- Unimplemented behavior of error handling. Some errors are thrown to the caller and stop execution, others are not thrown to the caller and handled in the CATCH block and others are thrown to the caller and also handled in the CATCH block.
- Wrong behavior of functions in some cases.
- Wrong behavior of methods in some cases.
DYNAMIC-FUNCTIONreturning extent is not implemented.
- Dynamic property:
- wrong errors being thrown in some cases
- Assignments
- Assignments to database tables, buffers and TEMP-TABLES except when using :: result in the failing of compilation phase.
Tests are located in tests/base_language/builtin_functions/accepted_params/dynamic_invoke/*
#2 Updated by Constantin Asofiei 12 months ago
- Related to Feature #6490: DYNAMIC-INVOKE which returns an extent added
#3 Updated by Paul Bodale 6 months ago
- Related to Feature #4373: finish core OO 4GL support added