Project

General

Profile

Bug #10315

Address edgecases for DYNAMIC-INVOKE

Added by Paul Bodale about 1 year ago. Updated about 1 year ago.

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

Related to Base Language - Feature #6490: DYNAMIC-INVOKE which returns an extent Closed
Related to Base Language - Feature #4373: finish core OO 4GL support New

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.

Here is the status of the support for DYNAMIC-INVOKE as of the creation of this task:
- 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 ? BUT var1 / DYNAMIC-INVOKE(clsRef, "voidMethod") and DYNAMIC-INVOKE(clsRef, "voidMethod") / var1 throw 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.
  • 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.
  • Widgets/Handles:
    • (this is non-related) Dynamic combo-box doesn't have the same behavior.
  • Logical ops:
    • DYNAMIC-INVOKE(clsRef, "returnExtent") AND logicalVar is a valid logical expression and it seems like the call is considered to be FALSE. FWD fails.
    • Same for the OR operator.
    • IF DYNAMIC-INVOKE(clsRef, "returnExtent") THEN is a valid statement and it evaluates to FALSE. FWD fails.
    • IF NOT DYNAMIC-INVOKE(clsRef, "returnExtent") THEN is a valid statement and it evaluates to TRUE. 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-FUNCTION returning 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

Also available in: Atom PDF