comparison src/bytecode.c @ 27782:f53ecb062478

(Fbyte_code) <Bvarset>: Inline most common case.
author Gerd Moellmann <gerd@gnu.org>
date Sun, 20 Feb 2000 15:55:38 +0000
parents 9400865ec7cf
children 09ce77df2610
comparison
equal deleted inserted replaced
27781:f84c7b8308c5 27782:f53ecb062478
542 AFTER_POTENTIAL_GC (); 542 AFTER_POTENTIAL_GC ();
543 } 543 }
544 break; 544 break;
545 } 545 }
546 546
547 case Bvarset:
548 case Bvarset+1:
549 case Bvarset+2:
550 case Bvarset+3:
551 case Bvarset+4:
552 case Bvarset+5:
553 op -= Bvarset;
554 goto varset;
555
547 case Bvarset+7: 556 case Bvarset+7:
548 op = FETCH2; 557 op = FETCH2;
549 goto varset; 558 goto varset;
550 559
551 case Bvarset: case Bvarset+1: case Bvarset+2: case Bvarset+3:
552 case Bvarset+4: case Bvarset+5:
553 op -= Bvarset;
554 goto varset;
555
556 case Bvarset+6: 560 case Bvarset+6:
557 op = FETCH; 561 op = FETCH;
558 varset: 562 varset:
559 set_internal (vectorp[op], POP, current_buffer, 0); 563 {
560 /* Fset (vectorp[op], POP); */ 564 Lisp_Object sym, val;
565 extern int keyword_symbols_constant_flag;
566
567 sym = vectorp[op];
568 val = POP;
569
570 /* Inline the most common case. */
571 if (SYMBOLP (sym)
572 && !EQ (val, Qunbound)
573 && !MISCP (XSYMBOL (sym)->value)
574 /* I think this should either be checked in the byte
575 compiler, or there should be a flag indicating that
576 a symbol might be constant in Lisp_Symbol, instead
577 of checking this here over and over again. --gerd. */
578 && !EQ (sym, Qnil)
579 && !EQ (sym, Qt)
580 && !(XSYMBOL (sym)->name->data[0] == ':'
581 && EQ (XSYMBOL (sym)->obarray, initial_obarray)
582 && keyword_symbols_constant_flag
583 && !EQ (val, sym)))
584 XSYMBOL (sym)->value = val;
585 else
586 set_internal (sym, val, current_buffer, 0);
587 }
561 break; 588 break;
562 589
563 case Bdup: 590 case Bdup:
564 { 591 {
565 Lisp_Object v1; 592 Lisp_Object v1;