set processor's primitive error information before handling #lenient
This commit is contained in:
parent
d73427cbae
commit
feb1825c41
@ -285,16 +285,6 @@ extend Apex
|
|||||||
<primitive: #Apex_perform>
|
<primitive: #Apex_perform>
|
||||||
self primitiveFailed
|
self primitiveFailed
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------------------------
|
|
||||||
* COMMON ERROR/EXCEPTION HANDLERS
|
|
||||||
* ------------------------------------------------------------------ */
|
|
||||||
method(#dual) error: msgText
|
|
||||||
{
|
|
||||||
/* TODO: implement this
|
|
||||||
Error signal: msgText. */
|
|
||||||
msgText dump.
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class Object(Apex)
|
class Object(Apex)
|
||||||
|
@ -489,6 +489,11 @@ class IndexNotFoundException(NotFoundException)
|
|||||||
|
|
||||||
extend Apex
|
extend Apex
|
||||||
{
|
{
|
||||||
|
method(#dual) error: text
|
||||||
|
{
|
||||||
|
Exception signal: text.
|
||||||
|
}
|
||||||
|
|
||||||
method(#dual,#liberal) primitiveFailed(method)
|
method(#dual,#liberal) primitiveFailed(method)
|
||||||
{
|
{
|
||||||
| a b msg ec ex |
|
| a b msg ec ex |
|
||||||
|
@ -9,20 +9,27 @@ class(#limited) InputOutputStud(Object) from "io"
|
|||||||
|
|
||||||
class FileAccessor(InputOutputStud) from "io.file"
|
class FileAccessor(InputOutputStud) from "io.file"
|
||||||
{
|
{
|
||||||
|
pooldic Flag
|
||||||
|
{
|
||||||
|
O_RDONLY := 0,
|
||||||
|
O_WRONLY := 1
|
||||||
|
//O_RDONLY from "O_RDONLY",
|
||||||
|
//O_WRONLY from "O_WRONLY"
|
||||||
|
}
|
||||||
|
|
||||||
method(#primitive,#lenient) _open: path flags: flags.
|
method(#primitive,#lenient) _open: path flags: flags.
|
||||||
|
|
||||||
method(#class) on: path for: flags
|
method(#class) on: path for: flags
|
||||||
{
|
{
|
||||||
| fa |
|
| fa |
|
||||||
fa := self new _open: path flags: flags.
|
fa := self new _open: path flags: flags.
|
||||||
if (fa isError) { self error: "unable to open file" }.
|
if (fa isError) { self error: "Unable to open file %s - %s" strfmt(path, thisProcess primErrorMessage) }.
|
||||||
self addToBeFinalized.
|
fa addToBeFinalized.
|
||||||
^fa.
|
^fa.
|
||||||
}
|
}
|
||||||
|
|
||||||
method close
|
method close
|
||||||
{
|
{
|
||||||
"CLOSING HANDLLE>..................." dump.
|
|
||||||
self _close.
|
self _close.
|
||||||
self removeToBeFinalized.
|
self removeToBeFinalized.
|
||||||
}
|
}
|
||||||
|
@ -69,7 +69,7 @@ class System(Apex)
|
|||||||
class := self at: class_name. // System at: class_name.
|
class := self at: class_name. // System at: class_name.
|
||||||
if (class isError)
|
if (class isError)
|
||||||
{
|
{
|
||||||
self error: ('Cannot find the class - ' & class_name).
|
self error: ("Unable to find the class - " & class_name).
|
||||||
}.
|
}.
|
||||||
|
|
||||||
self _initialize.
|
self _initialize.
|
||||||
|
@ -4802,14 +4802,6 @@ static int start_method (moo_t* moo, moo_oop_method_t method, moo_oow_t nargs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
activate_primitive_method_body:
|
activate_primitive_method_body:
|
||||||
if (MOO_METHOD_GET_PREAMBLE_FLAGS(preamble) & MOO_METHOD_PREAMBLE_FLAG_LENIENT)
|
|
||||||
{
|
|
||||||
/* convert soft failure to error return */
|
|
||||||
moo->sp = stack_base;
|
|
||||||
MOO_STACK_PUSH (moo, MOO_ERROR_TO_OOP(moo->errnum));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set the error number in the current process for 'thisProcess primError' */
|
/* set the error number in the current process for 'thisProcess primError' */
|
||||||
moo->processor->active->perr = MOO_ERROR_TO_OOP(moo->errnum);
|
moo->processor->active->perr = MOO_ERROR_TO_OOP(moo->errnum);
|
||||||
if (moo->errmsg.len > 0)
|
if (moo->errmsg.len > 0)
|
||||||
@ -4832,6 +4824,14 @@ static int start_method (moo_t* moo, moo_oop_method_t method, moo_oow_t nargs)
|
|||||||
moo->processor->active->perrmsg = moo->_nil;
|
moo->processor->active->perrmsg = moo->_nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (MOO_METHOD_GET_PREAMBLE_FLAGS(preamble) & MOO_METHOD_PREAMBLE_FLAG_LENIENT)
|
||||||
|
{
|
||||||
|
/* convert soft failure to error return */
|
||||||
|
moo->sp = stack_base;
|
||||||
|
MOO_STACK_PUSH (moo, moo->processor->active->perr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
MOO_ASSERT (moo, MOO_OBJ_GET_FLAGS_TRAILER(method));
|
MOO_ASSERT (moo, MOO_OBJ_GET_FLAGS_TRAILER(method));
|
||||||
if (MOO_METHOD_GET_CODE_SIZE(method) == 0) /* this trailer size field is not a small integer */
|
if (MOO_METHOD_GET_CODE_SIZE(method) == 0) /* this trailer size field is not a small integer */
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user