Branch: Tag:

1999-11-18

1999-11-18 16:53:59 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Added support for F_POP_VALUE nodes.

Rev: src/las.c:1.112

5:   \*/   /**/   #include "global.h" - RCSID("$Id: las.c,v 1.111 1999/11/18 02:46:03 mast Exp $"); + RCSID("$Id: las.c,v 1.112 1999/11/18 16:53:59 grubba Exp $");      #include "language.h"   #include "interpret.h"
528:    }    break;    +  case F_POP_VALUE: +  copy_shared_string(res->type, void_type_string); +  +  if(a) res->tree_info |= a->tree_info; +  if(b) res->tree_info |= b->tree_info; +  break; +     case F_MAGIC_SET_INDEX:    res->node_info |= OPT_ASSIGNMENT;    /* FALL_THROUGH */
1395:   {    node **n;    if(!a || !*a) return (node **)NULL; -  if((*a)->token == F_CAST) return last_cmd(&_CAR(*a)); +  if(((*a)->token == F_CAST) || +  ((*a)->token == F_POP_VALUE)) return last_cmd(&_CAR(*a));    if(((*a)->token != F_ARG_LIST) &&    ((*a)->token != F_COMMA_EXPR)) return a;    if(CDR(*a))    { -  if(CDR(*a)->token != F_CAST && CAR(*a)->token != F_ARG_LIST && -  CAR(*a)->token != F_COMMA_EXPR) +  if(CDR(*a)->token != F_CAST && +  CDR(*a)->token != F_POP_VALUE && +  CAR(*a)->token != F_ARG_LIST && /* FIXME: typo? */ +  CAR(*a)->token != F_COMMA_EXPR) /* FIXME: typo? */    return &_CDR(*a);    if((n=last_cmd(&_CDR(*a))))    return n;    }    if(CAR(*a))    { -  if(CAR(*a)->token != F_CAST && CAR(*a)->token != F_ARG_LIST && +  if(CAR(*a)->token != F_CAST && +  CAR(*a)->token != F_POP_VALUE && +  CAR(*a)->token != F_ARG_LIST &&    CAR(*a)->token != F_COMMA_EXPR)    return &_CAR(*a);    if((n=last_cmd(&_CAR(*a))))
1516:    low_print_tree(_CAR(foo),0);    break;    +  case F_POP_VALUE: +  fprintf(stderr, "{"); +  low_print_tree(_CAR(foo), 0); +  fprintf(stderr, "}"); +  break; +     case F_CAST:    {    char *s;
1883:    case F_APPLY:    return n->type != void_type_string;    +  case F_POP_VALUE:    case F_FOREACH:    case F_INC_NEQ_LOOP:    case F_DEC_NEQ_LOOP:
3235:   static int is_null_branch(node *n)   {    if(!n) return 1; -  if(n->token==F_CAST && n->type==void_type_string) +  if((n->token==F_CAST && n->type==void_type_string) || +  n->token == F_POP_VALUE)    return is_null_branch(CAR(n));    if(n->token==F_ARG_LIST)    return is_null_branch(CAR(n)) && is_null_branch(CDR(n));
3262:    continue;    }    -  if(n->token == F_CAST && n->type==void_type_string) +  if((n->token == F_CAST && n->type==void_type_string) || +  n->token == F_POP_VALUE)    {    n=CAR(n);    continue;