Sorry for the slow response. Perhaps you've already worked it out, but
anyway a few options...

You "could" pass thisContext as a block parameter

initialize
        errorBlock := [ :tPduError :aContext | Error signal:'Method: ' ,
aContext selector
asString , '  with result: ', tPduError item asString ].

 pduDestruct
          result = T_PDU_ERROR PDU_STATUS_NOERROR ifFalse: [ errorBlock
value: result value: thisContext

------------------------------------
But rather I suggest a better option is to separate this logic into its own
error class...

Error subclass: #PduError
    ... instanceVariables: 'result selector'

PduError class >> result: aResult context: aContext
    ^ self new initializeResult: aResult selector: aContext  selector
asString

PduError >> initializeResult: aResult selector: selectorString
    result := aResult.
    selector :=  selectorString

PduEror>>messageText
    as you like - refer to other implementors for example

  PduError>>printOn:
   as you like - refer to other implementors for example


  pduDestruct
        | result |
        result := call ffiPDUDestruct.
        result = T_PDU_ERROR PDU_STATUS_NOERROR ifFalse: [
               (PduError result: aResult context: thisContext) signal ]


cheers -ben

On Sat, 27 Jun 2020 at 22:56, ASAM <vmax28...@gmail.com> wrote:

> Hello,
> I would like to output the method name as a string in case of an error.
>
> what I've already done is this: (with thisContext selector asString)
>
> pduDestruct
>         | result |
>         result := call ffiPDUDestruct.
>         result = T_PDU_ERROR PDU_STATUS_NOERROR
> ifFalse: [ Error signal:'Method: ' , thisContext selector asString , '
> with
> result: ', result item asString ]
>
>
> but now I use it more often. And wanted to rebuild it like that.
>
> initialize
>         errorBlock := [ :tPduError | Error signal:'Method: ' , thisContext
> selector
> asString , '  with result: ', tPduError item asString ].
>
>
> pduDestruct
>         | result |
>         result := call ffiPDUDestruct.
>         result = T_PDU_ERROR PDU_STATUS_NOERROR ifFalse: [ errorBlock
> value: result
> ]
>
>
> but that doesn't work because "this Context selector toString" now returns
> 'initialize'.
>
> Can someone give me a hint how to solve this?
> Is "thisContext selector asString" the only way to get the name of the
> method at runtime?
>
> Thanks in advance.
>

Reply via email to