added experimental code for builtin object equality test, still commented out
This commit is contained in:
		| @ -108,6 +108,8 @@ static int _equal_objects (moo_t* moo, moo_oop_t rcv, moo_oop_t arg) | ||||
|  | ||||
| 				default: | ||||
| 				{ | ||||
| 					moo_oow_t i, size; | ||||
|  | ||||
| 					if (rcv == moo->_nil) return arg == moo->_nil? 1: 0; | ||||
| 					if (rcv == moo->_true) return arg == moo->_true? 1: 0; | ||||
| 					if (rcv == moo->_false) return arg == moo->_false? 1: 0; | ||||
| @ -119,7 +121,21 @@ static int _equal_objects (moo_t* moo, moo_oop_t rcv, moo_oop_t arg) | ||||
| 					moo_seterrbfmt (moo, MOO_ENOIMPL, "no builtin comparison implemented for %O and %O", rcv, arg); /* TODO: better error code */ | ||||
| 					return -1; | ||||
| 				#else | ||||
| 					for (i = 0; i < MOO_OBJ_GET_SIZE(rcv); i++) | ||||
|  | ||||
| 					if (moo->_process && MOO_OBJ_GET_CLASS(rcv) == moo->_process) | ||||
| 					{ | ||||
| 						/* the stack in a process object doesn't need to be  | ||||
| 						 * scanned in full. the slots above the stack pointer  | ||||
| 						 * are garbages. */ | ||||
| 						size = MOO_PROCESS_NAMED_INSTVARS + | ||||
| 							  MOO_OOP_TO_SMOOI(((moo_oop_process_t)rcv)->sp) + 1; | ||||
| 						MOO_ASSERT (moo, size <= MOO_OBJ_GET_SIZE(rcv)); | ||||
| 					} | ||||
| 					else | ||||
| 					{ | ||||
| 						size = MOO_OBJ_GET_SIZE(rcv); | ||||
| 					} | ||||
| 					for (i = 0; i < size; i++) | ||||
| 					{ | ||||
| 						/* TODO: remove recursion */ | ||||
|  | ||||
| @ -127,6 +143,8 @@ static int _equal_objects (moo_t* moo, moo_oop_t rcv, moo_oop_t arg) | ||||
| 						 * this primitive method doesn't honor it. */ | ||||
| 						if (!_equal_objects(moo, ((moo_oop_oop_t)rcv)->slot[i], ((moo_oop_oop_t)arg)->slot[i])) return 0; | ||||
| 					} | ||||
|  | ||||
| 					/* the default implementation doesn't take the trailer space into account */ | ||||
| 					return 1; | ||||
| 				#endif | ||||
| 				} | ||||
|  | ||||
		Reference in New Issue
	
	Block a user