pike.git / src / las.c

version» Context lines:

pike.git/src/las.c:1:   /*\   ||| This file a part of Pike, and is copyright by Fredrik Hubinette   ||| Pike is distributed as GPL (General Public License)   ||| See the files COPYING and DISCLAIMER for more information.   \*/   /**/   #include "global.h" - RCSID("$Id: las.c,v 1.93 1999/10/23 06:51:26 hubbe Exp $"); + RCSID("$Id: las.c,v 1.94 1999/11/05 01:45:30 grubba Exp $");      #include "language.h"   #include "interpret.h"   #include "las.h"   #include "array.h"   #include "object.h"   #include "stralloc.h"   #include "dynamic_buffer.h"   #include "lex.h"   #include "pike_types.h"
pike.git/src/las.c:1915:    CAR(n)->u.sval.subtype == FUNCTION_BUILTIN && /* driver fun? */    CAR(n)->u.sval.u.efun->optimize)    {    if((tmp1=CAR(n)->u.sval.u.efun->optimize(n)))    {    goto use_tmp1;    }    }    break;    +  case F_RANGE: +  /* X[Y..Z] +  * Warn if Z is a constant <= 0. +  */ +  if (CDR(n)->token == F_ARG_LIST && +  CDDR(n)->token == F_CONSTANT && +  ((CDDR(n)->u.sval.type == T_INT && +  CDDR(n)->u.sval.u.integer <= 0) || +  (CDDR(n)->u.sval.type == T_FLOAT && +  CDDR(n)->u.sval.u.float_number <= 0.0))) { +  yywarning("Range end is not positive."); +  } +  break; +     case F_ARG_LIST:    case F_LVALUE_LIST:    if(!CAR(n)) goto use_cdr;    if(!CDR(n)) goto use_car;       /*    * { X; break; Y; } -> { X; return; }    * { X; return; Y; } -> { X; return; }    * { X; continue; Y; } -> { X; return; }    */
pike.git/src/las.c:1959:    /* !x && !y -> !(x || y) */    if(CAR(n)->token==F_NOT && CDR(n)->token==F_NOT)    {    tmp1=mknode(F_NOT,mknode(F_LOR,CAAR(n),CADR(n)),0);    CAAR(n)=CADR(n)=0;    goto use_tmp1;    }    break;       case '?': -  /* (! X) ? Y : Z -> X ? Z : Y */ +  /* (! X) ? Y : Z -> X ? Z : Y */    if(CAR(n)->token == F_NOT)    {    tmp1=mknode('?',CAAR(n),mknode(':',CDDR(n),CADR(n)));    CAAR(n)=CDDR(n)=CADR(n)=0;    goto use_tmp1;    } -  +  /* 0 ? Y : Z -> Z */ +  if (node_is_false(CAR(n))) { +  tmp1 = CDDR(n); +  CDDR(n) = 0; +  goto use_tmp1; +  } +  /* 1 ? Y : Z -> Y */ +  if (node_is_true(CAR(n))) { +  tmp1 = CADR(n); +  CADR(n) = 0; +  goto use_tmp1; +  }    break;       case F_ADD_EQ:    if(CDR(n)->token == F_CONSTANT && CDR(n)->u.sval.type == T_INT)    {    /* a+=0 -> a */    if(CDR(n)->u.sval.u.integer == 0) goto use_car;       /* a+=1 -> ++a */    if(CDR(n)->u.sval.u.integer == 1)