comparison src/bytecode.c @ 5581:56144c8593a8

Mechanically change INT to FIXNUM in our sources. src/ChangeLog addition: 2011-10-09 Aidan Kehoe <kehoea@parhasard.net> [...] Mechanically change INT (where it refers to non-bignum Lisp integers) to FIXNUM in our sources. Done for the following functions, enums, and macros: Lisp_Type_Int_Even, Lisp_Type_Int_Odd, INT_GCBITS, INT_VALBITS, make_int(), INTP(), XINT(), CHECK_INT(), XREALINT(), INT_PLUS(), INT_MINUS(), EMACS_INT_MAX (to MOST_POSITIVE_FIXNUM), EMACS_INT_MIN (to MOST_NEGATIVE_FIXNUM), NUMBER_FITS_IN_AN_EMACS_INT() to NUMBER_FITS_IN_A_FIXNUM(), XFLOATINT, XCHAR_OR_INT, INT_OR_FLOAT. The EMACS_INT typedef was not changed, it does not describe non-bignum Lisp integers. Script that did the change available in http://mid.gmane.org/20067.17650.181273.12014@parhasard.net . modules/ChangeLog addition: 2011-10-09 Aidan Kehoe <kehoea@parhasard.net> [...] Mechanically change INT to FIXNUM, where the usage describes non-bignum Lisp integers. See the src/ChangeLog entry for more details. man/ChangeLog addition: 2011-10-09 Aidan Kehoe <kehoea@parhasard.net> * internals/internals.texi (How Lisp Objects Are Represented in C): * internals/internals.texi (Integers and Characters): Mechanically change INT to FIXNUM, where the usage describes non-bignum Lisp integers.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 09 Oct 2011 09:51:57 +0100
parents 58b38d5b32d0
children 427a72c6ee17
comparison
equal deleted inserted replaced
5580:a0e81357194e 5581:56144c8593a8
221 meter_code (Opcode prev_opcode, Opcode this_opcode) 221 meter_code (Opcode prev_opcode, Opcode this_opcode)
222 { 222 {
223 if (byte_metering_on) 223 if (byte_metering_on)
224 { 224 {
225 Lisp_Object *p = XVECTOR_DATA (XVECTOR_DATA (Vbyte_code_meter)[this_opcode]); 225 Lisp_Object *p = XVECTOR_DATA (XVECTOR_DATA (Vbyte_code_meter)[this_opcode]);
226 p[0] = INT_PLUS1 (p[0]); 226 p[0] = FIXNUM_PLUS1 (p[0]);
227 if (prev_opcode) 227 if (prev_opcode)
228 p[prev_opcode] = INT_PLUS1 (p[prev_opcode]); 228 p[prev_opcode] = FIXNUM_PLUS1 (p[prev_opcode]);
229 } 229 }
230 } 230 }
231 231
232 #endif /* BYTE_CODE_METER */ 232 #endif /* BYTE_CODE_METER */
233 233
235 static Lisp_Object 235 static Lisp_Object
236 bytecode_negate (Lisp_Object obj) 236 bytecode_negate (Lisp_Object obj)
237 { 237 {
238 retry: 238 retry:
239 239
240 if (INTP (obj)) return make_integer (- XINT (obj)); 240 if (FIXNUMP (obj)) return make_integer (- XFIXNUM (obj));
241 if (FLOATP (obj)) return make_float (- XFLOAT_DATA (obj)); 241 if (FLOATP (obj)) return make_float (- XFLOAT_DATA (obj));
242 if (CHARP (obj)) return make_integer (- ((int) XCHAR (obj))); 242 if (CHARP (obj)) return make_integer (- ((int) XCHAR (obj)));
243 if (MARKERP (obj)) return make_integer (- ((int) marker_position (obj))); 243 if (MARKERP (obj)) return make_integer (- ((int) marker_position (obj)));
244 #ifdef HAVE_BIGNUM 244 #ifdef HAVE_BIGNUM
245 if (BIGNUMP (obj)) BIGNUM_ARITH_RETURN (obj, neg); 245 if (BIGNUMP (obj)) BIGNUM_ARITH_RETURN (obj, neg);
289 #ifdef WITH_NUMBER_TYPES 289 #ifdef WITH_NUMBER_TYPES
290 switch (promote_args (&obj1, &obj2)) 290 switch (promote_args (&obj1, &obj2))
291 { 291 {
292 case FIXNUM_T: 292 case FIXNUM_T:
293 { 293 {
294 EMACS_INT ival1 = XREALINT (obj1), ival2 = XREALINT (obj2); 294 EMACS_INT ival1 = XREALFIXNUM (obj1), ival2 = XREALFIXNUM (obj2);
295 return ival1 < ival2 ? -1 : ival1 > ival2 ? 1 : 0; 295 return ival1 < ival2 ? -1 : ival1 > ival2 ? 1 : 0;
296 } 296 }
297 #ifdef HAVE_BIGNUM 297 #ifdef HAVE_BIGNUM
298 case BIGNUM_T: 298 case BIGNUM_T:
299 return bignum_cmp (XBIGNUM_DATA (obj1), XBIGNUM_DATA (obj2)); 299 return bignum_cmp (XBIGNUM_DATA (obj1), XBIGNUM_DATA (obj2));
316 retry: 316 retry:
317 317
318 { 318 {
319 EMACS_INT ival1, ival2; 319 EMACS_INT ival1, ival2;
320 320
321 if (INTP (obj1)) ival1 = XINT (obj1); 321 if (FIXNUMP (obj1)) ival1 = XFIXNUM (obj1);
322 else if (CHARP (obj1)) ival1 = XCHAR (obj1); 322 else if (CHARP (obj1)) ival1 = XCHAR (obj1);
323 else if (MARKERP (obj1)) ival1 = marker_position (obj1); 323 else if (MARKERP (obj1)) ival1 = marker_position (obj1);
324 else goto arithcompare_float; 324 else goto arithcompare_float;
325 325
326 if (INTP (obj2)) ival2 = XINT (obj2); 326 if (FIXNUMP (obj2)) ival2 = XFIXNUM (obj2);
327 else if (CHARP (obj2)) ival2 = XCHAR (obj2); 327 else if (CHARP (obj2)) ival2 = XCHAR (obj2);
328 else if (MARKERP (obj2)) ival2 = marker_position (obj2); 328 else if (MARKERP (obj2)) ival2 = marker_position (obj2);
329 else goto arithcompare_float; 329 else goto arithcompare_float;
330 330
331 return ival1 < ival2 ? -1 : ival1 > ival2 ? 1 : 0; 331 return ival1 < ival2 ? -1 : ival1 > ival2 ? 1 : 0;
335 335
336 { 336 {
337 double dval1, dval2; 337 double dval1, dval2;
338 338
339 if (FLOATP (obj1)) dval1 = XFLOAT_DATA (obj1); 339 if (FLOATP (obj1)) dval1 = XFLOAT_DATA (obj1);
340 else if (INTP (obj1)) dval1 = (double) XINT (obj1); 340 else if (FIXNUMP (obj1)) dval1 = (double) XFIXNUM (obj1);
341 else if (CHARP (obj1)) dval1 = (double) XCHAR (obj1); 341 else if (CHARP (obj1)) dval1 = (double) XCHAR (obj1);
342 else if (MARKERP (obj1)) dval1 = (double) marker_position (obj1); 342 else if (MARKERP (obj1)) dval1 = (double) marker_position (obj1);
343 else 343 else
344 { 344 {
345 obj1 = wrong_type_argument (Qnumber_char_or_marker_p, obj1); 345 obj1 = wrong_type_argument (Qnumber_char_or_marker_p, obj1);
346 goto retry; 346 goto retry;
347 } 347 }
348 348
349 if (FLOATP (obj2)) dval2 = XFLOAT_DATA (obj2); 349 if (FLOATP (obj2)) dval2 = XFLOAT_DATA (obj2);
350 else if (INTP (obj2)) dval2 = (double) XINT (obj2); 350 else if (FIXNUMP (obj2)) dval2 = (double) XFIXNUM (obj2);
351 else if (CHARP (obj2)) dval2 = (double) XCHAR (obj2); 351 else if (CHARP (obj2)) dval2 = (double) XCHAR (obj2);
352 else if (MARKERP (obj2)) dval2 = (double) marker_position (obj2); 352 else if (MARKERP (obj2)) dval2 = (double) marker_position (obj2);
353 else 353 else
354 { 354 {
355 obj2 = wrong_type_argument (Qnumber_char_or_marker_p, obj2); 355 obj2 = wrong_type_argument (Qnumber_char_or_marker_p, obj2);
367 #ifdef WITH_NUMBER_TYPES 367 #ifdef WITH_NUMBER_TYPES
368 switch (promote_args (&obj1, &obj2)) 368 switch (promote_args (&obj1, &obj2))
369 { 369 {
370 case FIXNUM_T: 370 case FIXNUM_T:
371 { 371 {
372 EMACS_INT ival1 = XREALINT (obj1), ival2 = XREALINT (obj2); 372 EMACS_INT ival1 = XREALFIXNUM (obj1), ival2 = XREALFIXNUM (obj2);
373 switch (opcode) 373 switch (opcode)
374 { 374 {
375 case Bplus: ival1 += ival2; break; 375 case Bplus: ival1 += ival2; break;
376 case Bdiff: ival1 -= ival2; break; 376 case Bdiff: ival1 -= ival2; break;
377 case Bmult: 377 case Bmult:
510 510
511 retry: 511 retry:
512 512
513 float_p = 0; 513 float_p = 0;
514 514
515 if (INTP (obj1)) ival1 = XINT (obj1); 515 if (FIXNUMP (obj1)) ival1 = XFIXNUM (obj1);
516 else if (CHARP (obj1)) ival1 = XCHAR (obj1); 516 else if (CHARP (obj1)) ival1 = XCHAR (obj1);
517 else if (MARKERP (obj1)) ival1 = marker_position (obj1); 517 else if (MARKERP (obj1)) ival1 = marker_position (obj1);
518 else if (FLOATP (obj1)) ival1 = 0, float_p = 1; 518 else if (FLOATP (obj1)) ival1 = 0, float_p = 1;
519 else 519 else
520 { 520 {
521 obj1 = wrong_type_argument (Qnumber_char_or_marker_p, obj1); 521 obj1 = wrong_type_argument (Qnumber_char_or_marker_p, obj1);
522 goto retry; 522 goto retry;
523 } 523 }
524 524
525 if (INTP (obj2)) ival2 = XINT (obj2); 525 if (FIXNUMP (obj2)) ival2 = XFIXNUM (obj2);
526 else if (CHARP (obj2)) ival2 = XCHAR (obj2); 526 else if (CHARP (obj2)) ival2 = XCHAR (obj2);
527 else if (MARKERP (obj2)) ival2 = marker_position (obj2); 527 else if (MARKERP (obj2)) ival2 = marker_position (obj2);
528 else if (FLOATP (obj2)) ival2 = 0, float_p = 1; 528 else if (FLOATP (obj2)) ival2 = 0, float_p = 1;
529 else 529 else
530 { 530 {
545 ival1 /= ival2; 545 ival1 /= ival2;
546 break; 546 break;
547 case Bmax: if (ival1 < ival2) ival1 = ival2; break; 547 case Bmax: if (ival1 < ival2) ival1 = ival2; break;
548 case Bmin: if (ival1 > ival2) ival1 = ival2; break; 548 case Bmin: if (ival1 > ival2) ival1 = ival2; break;
549 } 549 }
550 return make_int (ival1); 550 return make_fixnum (ival1);
551 } 551 }
552 else 552 else
553 { 553 {
554 double dval1 = FLOATP (obj1) ? XFLOAT_DATA (obj1) : (double) ival1; 554 double dval1 = FLOATP (obj1) ? XFLOAT_DATA (obj1) : (double) ival1;
555 double dval2 = FLOATP (obj2) ? XFLOAT_DATA (obj2) : (double) ival2; 555 double dval2 = FLOATP (obj2) ? XFLOAT_DATA (obj2) : (double) ival2;
923 DISCARD (n); 923 DISCARD (n);
924 #ifdef BYTE_CODE_METER 924 #ifdef BYTE_CODE_METER
925 if (byte_metering_on && SYMBOLP (TOP)) 925 if (byte_metering_on && SYMBOLP (TOP))
926 { 926 {
927 Lisp_Object val = Fget (TOP, Qbyte_code_meter, Qnil); 927 Lisp_Object val = Fget (TOP, Qbyte_code_meter, Qnil);
928 if (INTP (val)) 928 if (FIXNUMP (val))
929 Fput (TOP, Qbyte_code_meter, make_int (XINT (val) + 1)); 929 Fput (TOP, Qbyte_code_meter, make_fixnum (XFIXNUM (val) + 1));
930 } 930 }
931 #endif 931 #endif
932 TOP_LVALUE = TOP; /* Ignore multiple values. */ 932 TOP_LVALUE = TOP; /* Ignore multiple values. */
933 TOP_LVALUE = Ffuncall (n + 1, TOP_ADDRESS); 933 TOP_LVALUE = Ffuncall (n + 1, TOP_ADDRESS);
934 break; 934 break;
1101 1101
1102 case Bnumberp: 1102 case Bnumberp:
1103 #ifdef WITH_NUMBER_TYPES 1103 #ifdef WITH_NUMBER_TYPES
1104 TOP_LVALUE = NUMBERP (TOP) ? Qt : Qnil; 1104 TOP_LVALUE = NUMBERP (TOP) ? Qt : Qnil;
1105 #else 1105 #else
1106 TOP_LVALUE = INT_OR_FLOATP (TOP) ? Qt : Qnil; 1106 TOP_LVALUE = FIXNUM_OR_FLOATP (TOP) ? Qt : Qnil;
1107 #endif 1107 #endif
1108 break; 1108 break;
1109 1109
1110 case Bfixnump: 1110 case Bfixnump:
1111 TOP_LVALUE = INTP (TOP) ? Qt : Qnil; 1111 TOP_LVALUE = FIXNUMP (TOP) ? Qt : Qnil;
1112 break; 1112 break;
1113 1113
1114 case Beq: 1114 case Beq:
1115 { 1115 {
1116 Lisp_Object arg = POP; 1116 Lisp_Object arg = POP;
1209 { 1209 {
1210 #ifdef HAVE_BIGNUM 1210 #ifdef HAVE_BIGNUM
1211 TOP_LVALUE = Fsub1 (TOP); 1211 TOP_LVALUE = Fsub1 (TOP);
1212 #else 1212 #else
1213 Lisp_Object arg = TOP; 1213 Lisp_Object arg = TOP;
1214 TOP_LVALUE = INTP (arg) ? INT_MINUS1 (arg) : Fsub1 (arg); 1214 TOP_LVALUE = FIXNUMP (arg) ? FIXNUM_MINUS1 (arg) : Fsub1 (arg);
1215 #endif 1215 #endif
1216 break; 1216 break;
1217 } 1217 }
1218 case Badd1: 1218 case Badd1:
1219 { 1219 {
1220 #ifdef HAVE_BIGNUM 1220 #ifdef HAVE_BIGNUM
1221 TOP_LVALUE = Fadd1 (TOP); 1221 TOP_LVALUE = Fadd1 (TOP);
1222 #else 1222 #else
1223 Lisp_Object arg = TOP; 1223 Lisp_Object arg = TOP;
1224 TOP_LVALUE = INTP (arg) ? INT_PLUS1 (arg) : Fadd1 (arg); 1224 TOP_LVALUE = FIXNUMP (arg) ? FIXNUM_PLUS1 (arg) : Fadd1 (arg);
1225 #endif 1225 #endif
1226 break; 1226 break;
1227 } 1227 }
1228 1228
1229 case Beqlsign: 1229 case Beqlsign:
1279 Lisp_Object arg2 = POP; 1279 Lisp_Object arg2 = POP;
1280 Lisp_Object arg1 = TOP; 1280 Lisp_Object arg1 = TOP;
1281 #ifdef HAVE_BIGNUM 1281 #ifdef HAVE_BIGNUM
1282 TOP_LVALUE = bytecode_arithop (arg1, arg2, opcode); 1282 TOP_LVALUE = bytecode_arithop (arg1, arg2, opcode);
1283 #else 1283 #else
1284 TOP_LVALUE = INTP (arg1) && INTP (arg2) ? 1284 TOP_LVALUE = FIXNUMP (arg1) && FIXNUMP (arg2) ?
1285 INT_PLUS (arg1, arg2) : 1285 FIXNUM_PLUS (arg1, arg2) :
1286 bytecode_arithop (arg1, arg2, opcode); 1286 bytecode_arithop (arg1, arg2, opcode);
1287 #endif 1287 #endif
1288 break; 1288 break;
1289 } 1289 }
1290 1290
1293 Lisp_Object arg2 = POP; 1293 Lisp_Object arg2 = POP;
1294 Lisp_Object arg1 = TOP; 1294 Lisp_Object arg1 = TOP;
1295 #ifdef HAVE_BIGNUM 1295 #ifdef HAVE_BIGNUM
1296 TOP_LVALUE = bytecode_arithop (arg1, arg2, opcode); 1296 TOP_LVALUE = bytecode_arithop (arg1, arg2, opcode);
1297 #else 1297 #else
1298 TOP_LVALUE = INTP (arg1) && INTP (arg2) ? 1298 TOP_LVALUE = FIXNUMP (arg1) && FIXNUMP (arg2) ?
1299 INT_MINUS (arg1, arg2) : 1299 FIXNUM_MINUS (arg1, arg2) :
1300 bytecode_arithop (arg1, arg2, opcode); 1300 bytecode_arithop (arg1, arg2, opcode);
1301 #endif 1301 #endif
1302 break; 1302 break;
1303 } 1303 }
1304 1304
1311 TOP_LVALUE = bytecode_arithop (TOP, arg, opcode); 1311 TOP_LVALUE = bytecode_arithop (TOP, arg, opcode);
1312 break; 1312 break;
1313 } 1313 }
1314 1314
1315 case Bpoint: 1315 case Bpoint:
1316 PUSH (make_int (BUF_PT (current_buffer))); 1316 PUSH (make_fixnum (BUF_PT (current_buffer)));
1317 break; 1317 break;
1318 1318
1319 case Binsert: 1319 case Binsert:
1320 /* Says it can GC. */ 1320 /* Says it can GC. */
1321 /* GCPRO_STACK; */ 1321 /* GCPRO_STACK; */
1405 /* GCPRO_STACK; */ 1405 /* GCPRO_STACK; */
1406 TOP_LVALUE = Fset_buffer (TOP); 1406 TOP_LVALUE = Fset_buffer (TOP);
1407 break; 1407 break;
1408 1408
1409 case Bpoint_max: 1409 case Bpoint_max:
1410 PUSH (make_int (BUF_ZV (current_buffer))); 1410 PUSH (make_fixnum (BUF_ZV (current_buffer)));
1411 break; 1411 break;
1412 1412
1413 case Bpoint_min: 1413 case Bpoint_min:
1414 PUSH (make_int (BUF_BEGV (current_buffer))); 1414 PUSH (make_fixnum (BUF_BEGV (current_buffer)));
1415 break; 1415 break;
1416 1416
1417 case Bskip_chars_forward: 1417 case Bskip_chars_forward:
1418 { 1418 {
1419 Lisp_Object arg = POP; 1419 Lisp_Object arg = POP;
1590 TOP_LVALUE = Fsubseq (TOP, arg1, arg2); 1590 TOP_LVALUE = Fsubseq (TOP, arg1, arg2);
1591 break; 1591 break;
1592 } 1592 }
1593 1593
1594 case Bcurrent_column: 1594 case Bcurrent_column:
1595 PUSH (make_int (current_column (current_buffer))); 1595 PUSH (make_fixnum (current_column (current_buffer)));
1596 break; 1596 break;
1597 1597
1598 case Bchar_after: 1598 case Bchar_after:
1599 TOP_LVALUE = Fchar_after (TOP, Qnil); 1599 TOP_LVALUE = Fchar_after (TOP, Qnil);
1600 break; 1600 break;
1742 1742
1743 check_integer_range (upper, Qzero, 1743 check_integer_range (upper, Qzero,
1744 make_integer (Vmultiple_values_limit)); 1744 make_integer (Vmultiple_values_limit));
1745 check_integer_range (first, Qzero, upper); 1745 check_integer_range (first, Qzero, upper);
1746 1746
1747 speccount = make_int (bind_multiple_value_limits (XINT (first), 1747 speccount = make_fixnum (bind_multiple_value_limits (XFIXNUM (first),
1748 XINT (upper))); 1748 XFIXNUM (upper)));
1749 PUSH (upper); 1749 PUSH (upper);
1750 PUSH (speccount); 1750 PUSH (speccount);
1751 break; 1751 break;
1752 } 1752 }
1753 1753
1754 case Bmultiple_value_call: 1754 case Bmultiple_value_call:
1755 { 1755 {
1756 n = XINT (POP); 1756 n = XFIXNUM (POP);
1757 DISCARD_PRESERVING_MULTIPLE_VALUES_UNSAFE (n - 1); 1757 DISCARD_PRESERVING_MULTIPLE_VALUES_UNSAFE (n - 1);
1758 /* Discard multiple values for the first (function) argument: */ 1758 /* Discard multiple values for the first (function) argument: */
1759 TOP_LVALUE = TOP; 1759 TOP_LVALUE = TOP;
1760 TOP_LVALUE = multiple_value_call (n, TOP_ADDRESS); 1760 TOP_LVALUE = multiple_value_call (n, TOP_ADDRESS);
1761 break; 1761 break;
1801 { 1801 {
1802 if ((opcode < Bvarref) || 1802 if ((opcode < Bvarref) ||
1803 (opcode == 0251) || 1803 (opcode == 0251) ||
1804 (opcode > Bassq && opcode < Bconstant)) 1804 (opcode > Bassq && opcode < Bconstant))
1805 invalid_byte_code ("invalid opcode in instruction stream", 1805 invalid_byte_code ("invalid opcode in instruction stream",
1806 make_int (opcode)); 1806 make_fixnum (opcode));
1807 } 1807 }
1808 1808
1809 /* Check that IDX is a valid offset into the `constants' vector */ 1809 /* Check that IDX is a valid offset into the `constants' vector */
1810 static void 1810 static void
1811 check_constants_index (int idx, Lisp_Object constants) 1811 check_constants_index (int idx, Lisp_Object constants)
2238 /* XSTRING_LENGTH() is more efficient than string_char_length(), 2238 /* XSTRING_LENGTH() is more efficient than string_char_length(),
2239 which would be slightly more `proper' */ 2239 which would be slightly more `proper' */
2240 program = alloca_array (Opbyte, 1 + 2 * XSTRING_LENGTH (f->instructions)); 2240 program = alloca_array (Opbyte, 1 + 2 * XSTRING_LENGTH (f->instructions));
2241 optimize_byte_code (f->instructions, f->constants, 2241 optimize_byte_code (f->instructions, f->constants,
2242 program, &program_length, &varbind_count); 2242 program, &program_length, &varbind_count);
2243 f->specpdl_depth = (unsigned short) (XINT (Flength (f->arglist)) + 2243 f->specpdl_depth = (unsigned short) (XFIXNUM (Flength (f->arglist)) +
2244 varbind_count); 2244 varbind_count);
2245 f->instructions = 2245 f->instructions =
2246 make_opaque (program, program_length * sizeof (Opbyte)); 2246 make_opaque (program, program_length * sizeof (Opbyte));
2247 } 2247 }
2248 2248
2655 /* used only by Snarf-documentation. */ 2655 /* used only by Snarf-documentation. */
2656 void 2656 void
2657 set_compiled_function_documentation (Lisp_Compiled_Function *f, 2657 set_compiled_function_documentation (Lisp_Compiled_Function *f,
2658 Lisp_Object new_doc) 2658 Lisp_Object new_doc)
2659 { 2659 {
2660 assert (INTP (new_doc) || STRINGP (new_doc)); 2660 assert (FIXNUMP (new_doc) || STRINGP (new_doc));
2661 2661
2662 if (f->flags.documentationp) 2662 if (f->flags.documentationp)
2663 { 2663 {
2664 if (f->flags.interactivep && f->flags.domainp) 2664 if (f->flags.interactivep && f->flags.domainp)
2665 XCAR (f->doc_and_interactive) = new_doc; 2665 XCAR (f->doc_and_interactive) = new_doc;
2757 Return the maximum stack depth of the compiled-function object FUNCTION. 2757 Return the maximum stack depth of the compiled-function object FUNCTION.
2758 */ 2758 */
2759 (function)) 2759 (function))
2760 { 2760 {
2761 CHECK_COMPILED_FUNCTION (function); 2761 CHECK_COMPILED_FUNCTION (function);
2762 return make_int (compiled_function_stack_depth (XCOMPILED_FUNCTION (function))); 2762 return make_fixnum (compiled_function_stack_depth (XCOMPILED_FUNCTION (function)));
2763 } 2763 }
2764 2764
2765 DEFUN ("compiled-function-doc-string", Fcompiled_function_doc_string, 1, 1, 0, /* 2765 DEFUN ("compiled-function-doc-string", Fcompiled_function_doc_string, 1, 1, 0, /*
2766 Return the doc string of the compiled-function object FUNCTION, if available. 2766 Return the doc string of the compiled-function object FUNCTION, if available.
2767 Functions that had their doc strings snarfed into the DOC file will have 2767 Functions that had their doc strings snarfed into the DOC file will have
2879 Elemcount program_length; 2879 Elemcount program_length;
2880 Opbyte *program; 2880 Opbyte *program;
2881 2881
2882 CHECK_STRING (instructions); 2882 CHECK_STRING (instructions);
2883 CHECK_VECTOR (constants); 2883 CHECK_VECTOR (constants);
2884 check_integer_range (stack_depth, Qzero, make_int (USHRT_MAX)); 2884 check_integer_range (stack_depth, Qzero, make_fixnum (USHRT_MAX));
2885 2885
2886 /* Optimize the `instructions' string, just like when executing a 2886 /* Optimize the `instructions' string, just like when executing a
2887 regular compiled function, but don't save it for later since this is 2887 regular compiled function, but don't save it for later since this is
2888 likely to only be executed once. */ 2888 likely to only be executed once. */
2889 program = alloca_array (Opbyte, 1 + 2 * XSTRING_LENGTH (instructions)); 2889 program = alloca_array (Opbyte, 1 + 2 * XSTRING_LENGTH (instructions));
2892 SPECPDL_RESERVE (varbind_count); 2892 SPECPDL_RESERVE (varbind_count);
2893 return execute_optimized_program (program, 2893 return execute_optimized_program (program,
2894 #ifdef ERROR_CHECK_BYTE_CODE 2894 #ifdef ERROR_CHECK_BYTE_CODE
2895 program_length, 2895 program_length,
2896 #endif 2896 #endif
2897 XINT (stack_depth), 2897 XFIXNUM (stack_depth),
2898 XVECTOR_DATA (constants)); 2898 XVECTOR_DATA (constants));
2899 } 2899 }
2900 2900
2901 2901
2902 void 2902 void