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