12.01.2011 13:21, Jeppe Johansen wrote:
a) NoHandler must have the same arguments and calling convention as
TestProc?
With this solution, no. This uses only symbol names

This I don't understand. What happen when I call

DoSomething(1, 'test');

But DoSomething is not resolved and instead HandleDoSomethingUnresolved() is called? Is there a chance to access my arguments from that handler or no?

What happen if I pass some argument by reference and expect a result or do a function call:

Value := CallSomething(); // What Value equal to if CallSomething is not resolved?

b) What happen if NoHandler is not found?
Then TestProc cannot be resolved to any symbol, and will generate a weak
undefined reference. Eg. it won't complain about an undefined reference

I don't see where you reference the "weakinitial" symbol in your patch that's why I'm asking this question. If NoHandler is not referenced it will be stripped away during the linking process?

Generally I want to have an ability to handle a case where I call an unresolved symbol but I want to be sure that I receive arguments and my handler will not be striped from the executable.

I'd better suggest the next syntax:

procedure NoHandler;
begin
end;

procedure TestProc; weakexternal name 'TestProc' set NoHandler;

In this case I'm sure that:
1. NoHandler is a valid identifier which points to a procedure.
2. I can check that NoHandler has compatible with TestProc definition.
3. I can reference NoHandler so it will not be removed away from the executable.

Although I may be just don't understand your proposal.

Best regards,
Paul Ishenin

_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to