touched up primitive failure handling in exec.c
This commit is contained in:
@ -36,7 +36,6 @@ extend Apex
|
||||
{
|
||||
## -------------------------------------------------------
|
||||
## -------------------------------------------------------
|
||||
|
||||
method(#dual) dump
|
||||
{
|
||||
<primitive: #_dump>
|
||||
@ -44,29 +43,22 @@ extend Apex
|
||||
|
||||
## -------------------------------------------------------
|
||||
## -------------------------------------------------------
|
||||
|
||||
method(#dual) yourself
|
||||
{
|
||||
^self.
|
||||
}
|
||||
method(#dual) yourself { ^self }
|
||||
|
||||
## -------------------------------------------------------
|
||||
## INSTANTIATION & INITIALIZATION
|
||||
## -------------------------------------------------------
|
||||
method(#class,#lenient) _basicNew
|
||||
{
|
||||
<primitive: #_basic_new>
|
||||
}
|
||||
method(#class,#lenient) _basicNew: size
|
||||
{
|
||||
<primitive: #_basic_new>
|
||||
}
|
||||
method(#class,#primitive,#lenient) _basicNew.
|
||||
method(#class,#primitive,#lenient) _basicNew: size.
|
||||
|
||||
method(#class,#primitive) basicNew.
|
||||
method(#class,#primitive) basicNew: size.
|
||||
|
||||
(*
|
||||
method(#class) basicNew
|
||||
{
|
||||
| perr |
|
||||
|
||||
<primitive: #_basic_new>
|
||||
<primitive: #Apex__basicNew>
|
||||
self primitiveFailed.
|
||||
|
||||
## perr := thisProcess primError.
|
||||
@ -77,93 +69,51 @@ extend Apex
|
||||
method(#class) basicNew: size
|
||||
{
|
||||
| perr |
|
||||
|
||||
## <primitive: #_basicNew>
|
||||
<primitive: #_basic_new>
|
||||
<primitive: #Apex__basicNew:>
|
||||
self primitiveFailed.
|
||||
|
||||
## perr := thisProcess primError.
|
||||
## if (perr == xxxx) { self cannotInstantiate }
|
||||
## else { self primitiveFailed }.
|
||||
}
|
||||
|
||||
method(#class) ngcNew
|
||||
{
|
||||
<primitive: #_ngc_new>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
method(#class) ngcNew: anInteger
|
||||
{
|
||||
<primitive: #_ngc_new>
|
||||
self primitiveFailed.
|
||||
}
|
||||
}*)
|
||||
|
||||
method(#class) new
|
||||
{
|
||||
| x |
|
||||
x := self basicNew.
|
||||
x initialize. "TODO: assess if it's good to call 'initialize' from new."
|
||||
x initialize. ## TODO: assess if it's good to call 'initialize' from new
|
||||
^x.
|
||||
}
|
||||
|
||||
method(#class) new: anInteger
|
||||
{
|
||||
| x |
|
||||
## TODO: check if the class is a fixed class.
|
||||
## if so, raise an exception.
|
||||
x := self basicNew: anInteger.
|
||||
x initialize. "TODO: assess if it's good to call 'initialize' from new."
|
||||
x initialize. ## TODO: assess if it's good to call 'initialize' from new.
|
||||
^x.
|
||||
}
|
||||
|
||||
method initialize
|
||||
{
|
||||
"a subclass may override this method."
|
||||
(* a subclass may override this method *)
|
||||
^self.
|
||||
}
|
||||
|
||||
method ngcDispose
|
||||
{
|
||||
<primitive: #_ngc_dispose>
|
||||
self primitiveFailed.
|
||||
}
|
||||
## -------------------------------------------------------
|
||||
## -------------------------------------------------------
|
||||
method shallowCopy
|
||||
##method(#primitive,#lenient) _shallowCopy.
|
||||
|
||||
method(#dual) shallowCopy
|
||||
{
|
||||
<primitive: #_shallow_copy>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
|
||||
## -------------------------------------------------------
|
||||
## -------------------------------------------------------
|
||||
|
||||
method class
|
||||
{
|
||||
<primitive: #_class>
|
||||
}
|
||||
|
||||
method(#class) class
|
||||
{
|
||||
<primitive: #_class>
|
||||
^Class
|
||||
}
|
||||
|
||||
## -------------------------------------------------------
|
||||
## -------------------------------------------------------
|
||||
|
||||
method basicSize
|
||||
{
|
||||
<primitive: #_basic_size>
|
||||
self primitiveFailed.
|
||||
}
|
||||
|
||||
method(#class) basicSize
|
||||
{
|
||||
<primitive: #_basic_size>
|
||||
self primitiveFailed.
|
||||
}
|
||||
method(#dual,#primitive,#lenient) _basicSize.
|
||||
method(#dual,#primitive) basicSize.
|
||||
|
||||
method(#dual) basicAt: index
|
||||
{
|
||||
@ -237,6 +187,8 @@ extend Apex
|
||||
* COMMON QUERIES
|
||||
* ------------------------------------------------------------------ *)
|
||||
|
||||
method(#dual,#primitive) class.
|
||||
|
||||
method(#dual) isNil
|
||||
{
|
||||
"^self == nil."
|
||||
|
@ -35,9 +35,9 @@ class(#pointer) Class(Apex)
|
||||
|
||||
method specNumInstVars
|
||||
{
|
||||
## shift right by 7 bits.
|
||||
## see moo-prv.h for details.
|
||||
^self.spec bitShift: -7
|
||||
## shift right by 8 bits.
|
||||
## see MOO_CLASS_SPEC_NAMED_INSTVARS in moo-prv.h for details.
|
||||
^self.spec bitShift: -8
|
||||
}
|
||||
|
||||
(*method inheritsFrom: aSuperclass
|
||||
|
@ -413,8 +413,23 @@ class ProhibitedMessageException(Exception)
|
||||
|
||||
extend Apex
|
||||
{
|
||||
method(#dual) primitiveFailed
|
||||
method(#dual,#variadic) primitiveFailed()
|
||||
{
|
||||
| a b |
|
||||
|
||||
thisContext vargCount dump.
|
||||
a := 1.
|
||||
b := thisContext vargCount.
|
||||
'PRIMITIVE FAILED............................................' dump.
|
||||
self dump.
|
||||
while (a < b)
|
||||
{
|
||||
(thisContext vargAt: a) dump.
|
||||
a := a + 1.
|
||||
}.
|
||||
|
||||
('PRIMITIVE FAILED....' & (thisContext vargAt: 0)) dump.
|
||||
|
||||
PrimitiveFailureException signal: 'PRIMITIVE FAILED'.
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,7 @@ class MyObject(Object)
|
||||
'data too large'
|
||||
'message receiver error'
|
||||
'message sending error'
|
||||
'wrong number of arguments'
|
||||
'range error'
|
||||
'byte-code full'
|
||||
'dictionary full'
|
||||
|
Reference in New Issue
Block a user