+ int try_reload = 1;
+ Lisp_Object tem;
+
+ documentation_property:
+
+ tem = Fget (symbol, prop);
+ if (EQ (tem, make_number (0)))
+ tem = Qnil;
+ if (INTEGERP (tem) || (CONSP (tem) && INTEGERP (XCDR (tem))))
+ {
+ Lisp_Object doc = tem;
+ tem = get_doc_string (tem, 0, 0);
+ if (NILP (tem) && try_reload)
+ {
+ /* The file is newer, we need to reset the pointers. */
+ struct gcpro gcpro1, gcpro2, gcpro3;
+ GCPRO3 (symbol, prop, raw);
+ try_reload = reread_doc_file (Fcar_safe (doc));
+ UNGCPRO;
+ if (try_reload)
+ {
+ try_reload = 0;
+ goto documentation_property;
+ }
+ }
+ }
+ else if (!STRINGP (tem))
+ /* Feval protects its argument. */
+ tem = Feval (tem);