comparison src/alloc.c @ 66777:25bf8ea82843

(valid_lisp_object_p): New function to validate that an object is really a valid Lisp_Object.
author Kim F. Storm <storm@cua.dk>
date Wed, 09 Nov 2005 23:14:12 +0000
parents 6ab8d86f8a2b
children e485868e3caf
comparison
equal deleted inserted replaced
66776:2acb0afcc57a 66777:25bf8ea82843
4482 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS 4482 #if GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS
4483 check_gcpros (); 4483 check_gcpros ();
4484 #endif 4484 #endif
4485 } 4485 }
4486 4486
4487
4488 #endif /* GC_MARK_STACK != 0 */ 4487 #endif /* GC_MARK_STACK != 0 */
4488
4489
4490
4491 /* Return 1 if OBJ is a valid lisp object.
4492 Return 0 if OBJ is NOT a valid lisp object.
4493 Return -1 if we cannot validate OBJ.
4494 */
4495
4496 int
4497 valid_lisp_object_p (obj)
4498 Lisp_Object obj;
4499 {
4500 #if !GC_MARK_STACK
4501 /* Cannot determine this. */
4502 return -1;
4503 #else
4504 void *p;
4505 struct mem_node *m;
4506
4507 if (INTEGERP (obj))
4508 return 1;
4509
4510 p = (void *) XPNTR (obj);
4511
4512 if (PURE_POINTER_P (p))
4513 return 1;
4514
4515 m = mem_find (p);
4516
4517 if (m == MEM_NIL)
4518 return 0;
4519
4520 switch (m->type)
4521 {
4522 case MEM_TYPE_NON_LISP:
4523 return 0;
4524
4525 case MEM_TYPE_BUFFER:
4526 return live_buffer_p (m, p);
4527
4528 case MEM_TYPE_CONS:
4529 return live_cons_p (m, p);
4530
4531 case MEM_TYPE_STRING:
4532 return live_string_p (m, p);
4533
4534 case MEM_TYPE_MISC:
4535 return live_misc_p (m, p);
4536
4537 case MEM_TYPE_SYMBOL:
4538 return live_symbol_p (m, p);
4539
4540 case MEM_TYPE_FLOAT:
4541 return live_float_p (m, p);
4542
4543 case MEM_TYPE_VECTOR:
4544 case MEM_TYPE_PROCESS:
4545 case MEM_TYPE_HASH_TABLE:
4546 case MEM_TYPE_FRAME:
4547 case MEM_TYPE_WINDOW:
4548 return live_vector_p (m, p);
4549
4550 default:
4551 break;
4552 }
4553
4554 return 0;
4555 #endif
4556 }
4557
4489 4558
4490 4559
4491 4560
4492 /*********************************************************************** 4561 /***********************************************************************
4493 Pure Storage Management 4562 Pure Storage Management
4965 total += total_string_size; 5034 total += total_string_size;
4966 total += total_vector_size * sizeof (Lisp_Object); 5035 total += total_vector_size * sizeof (Lisp_Object);
4967 total += total_floats * sizeof (struct Lisp_Float); 5036 total += total_floats * sizeof (struct Lisp_Float);
4968 total += total_intervals * sizeof (struct interval); 5037 total += total_intervals * sizeof (struct interval);
4969 total += total_strings * sizeof (struct Lisp_String); 5038 total += total_strings * sizeof (struct Lisp_String);
4970 5039
4971 gc_relative_threshold = total * XFLOAT_DATA (Vgc_cons_percentage); 5040 gc_relative_threshold = total * XFLOAT_DATA (Vgc_cons_percentage);
4972 } 5041 }
4973 else 5042 else
4974 gc_relative_threshold = 0; 5043 gc_relative_threshold = 0;
4975 5044