fixed an error in moo_seterrbfmt() and moo_seterrufmt()
This commit is contained in:
@ -90,12 +90,13 @@ extend Apex
|
||||
|
||||
## -------------------------------------------------------
|
||||
## -------------------------------------------------------
|
||||
##method(#primitive,#lenient) _shallowCopy.
|
||||
##method(#dual,#primitive,#lenient) _shallowCopy.
|
||||
##method(#dual,#primitive) shallowCopy.
|
||||
|
||||
method(#dual) shallowCopy
|
||||
{
|
||||
<primitive: #_shallow_copy>
|
||||
self primitiveFailed.
|
||||
self primitiveFailed(thisContext method).
|
||||
}
|
||||
|
||||
|
||||
|
@ -112,6 +112,12 @@ class(#character) String(Array)
|
||||
{
|
||||
}
|
||||
*)
|
||||
|
||||
|
||||
(* The strlen method returns the number of characters before a terminating null.
|
||||
* if no terminating null character exists, it returns the same value as the size method *)
|
||||
method(#primitive,#lenient) _strlen.
|
||||
method(#primitive) strlen.
|
||||
}
|
||||
|
||||
## -------------------------------------------------------------------------------
|
||||
|
@ -431,12 +431,34 @@ class ProhibitedMessageException(Exception)
|
||||
{
|
||||
}
|
||||
|
||||
(*
|
||||
pooldic ErrorToException
|
||||
{
|
||||
ErrorCode.EINVAL := InvalidArgumentException.
|
||||
ErrorCode.ENOIMPL := NotImplementedException.
|
||||
}
|
||||
*)
|
||||
|
||||
extend Apex
|
||||
{
|
||||
method(#dual,#liberal) primitiveFailed(method)
|
||||
{
|
||||
| a b msg ec ex |
|
||||
|
||||
(* since method is an argument, the caller can call this method
|
||||
* from a context chain where the method context actually doesn't exist.
|
||||
* when a primitive method is defined using the #primitive method,
|
||||
* the VM invokes this primtiveFailed method without creating
|
||||
* the context for the primitive method.
|
||||
* method(#primitive) xxx.
|
||||
* method(#primitive) xxx { <primitive: #_xxx> ^self primitiveFailed(thisContext method). }
|
||||
* in the former definition, primitiveFailed is called without
|
||||
* an activate context for the method xxx if the primitive fails.
|
||||
* on the other handle, in the latter definition, the context
|
||||
* for the method is activated first before primitiveFailed is
|
||||
* invoked. in the context chain, the method for xxx is found.
|
||||
*)
|
||||
|
||||
(*System logNl: 'Arguments: '.
|
||||
a := 0.
|
||||
b := thisContext vargCount.
|
||||
@ -445,11 +467,13 @@ extend Apex
|
||||
System logNl: (thisContext vargAt: a) asString.
|
||||
a := a + 1.
|
||||
}.*)
|
||||
|
||||
|
||||
ec := thisProcess primError.
|
||||
msg := ec asString.
|
||||
msg := thisProcess primErrorMessage.
|
||||
if (msg isNil) { msg := ec asString }.
|
||||
if (method notNil) { msg := msg & ' - ' & (method owner name) & '>>' & (method name) }.
|
||||
(PrimitiveFailureException withErrorCode: ec) signal: msg.
|
||||
|
||||
(PrimitiveFailureException (* in: method *) withErrorCode: ec) signal: msg.
|
||||
}
|
||||
|
||||
method(#dual) doesNotUnderstand: message_name
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
class(#pointer,#final,#limited) Process(Object)
|
||||
{
|
||||
var initial_context, current_context, state, sp, prev, next, sem, perr.
|
||||
var initial_context, current_context, state, sp, prev, next, sem, perr, perrmsg.
|
||||
|
||||
method prev { ^self.prev }
|
||||
method next { ^self.next }
|
||||
@ -10,30 +10,16 @@ class(#pointer,#final,#limited) Process(Object)
|
||||
method prev: process { self.prev := process }
|
||||
|
||||
method primError { ^self.perr }
|
||||
method primErrorMessage { ^self.perrmsg }
|
||||
|
||||
method resume
|
||||
{
|
||||
<primitive: #_process_resume>
|
||||
self primitiveFailed
|
||||
|
||||
##^Processor resume: self.
|
||||
}
|
||||
|
||||
method _terminate
|
||||
{
|
||||
<primitive: #_process_terminate>
|
||||
self primitiveFailed
|
||||
}
|
||||
|
||||
method _suspend
|
||||
{
|
||||
<primitive: #_process_suspend>
|
||||
self primitiveFailed
|
||||
}
|
||||
method(#primitive) resume.
|
||||
method(#primitive) yield.
|
||||
method(#primitive) _terminate.
|
||||
method(#primitive) _suspend.
|
||||
|
||||
method terminate
|
||||
{
|
||||
##search from the top contextof the process down to intial_contextand find ensure blocks and execute them.
|
||||
##search from the top contextof the process down to intial_context and find ensure blocks and execute them.
|
||||
## if a different process calls 'terminate' on a process,
|
||||
## the ensureblock is not executed in the context of the
|
||||
## process being terminated, but in the context of terminatig process.
|
||||
@ -62,12 +48,6 @@ class(#pointer,#final,#limited) Process(Object)
|
||||
^self _terminate
|
||||
}
|
||||
|
||||
method yield
|
||||
{
|
||||
<primitive: #_process_yield>
|
||||
self primitiveFailed
|
||||
}
|
||||
|
||||
method sp
|
||||
{
|
||||
^self.sp.
|
||||
|
Reference in New Issue
Block a user