/[cvs]/stack/stack.c
ViewVC logotype

Diff of /stack/stack.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.29 by teddy, Tue Feb 5 12:14:42 2002 UTC revision 1.31 by teddy, Tue Feb 5 22:25:04 2002 UTC
# Line 178  int push_sym(environment *env, const cha Line 178  int push_sym(environment *env, const cha
178    new_symbol= hash(env->symbols, in_string);    new_symbol= hash(env->symbols, in_string);
179    new_value->content.ptr= *new_symbol;    new_value->content.ptr= *new_symbol;
180    
181    if(new_value->content.ptr==NULL) { /* If symbol was undefined */    if(*new_symbol==NULL) { /* If symbol was undefined */
182    
183      /* Create a new symbol */      /* Create a new symbol */
184      *new_symbol= malloc(sizeof(symbol));      (*new_symbol)= malloc(sizeof(symbol));
185      (*new_symbol)->val= NULL;   /* undefined value */      (*new_symbol)->val= NULL;   /* undefined value */
186      (*new_symbol)->next= NULL;      (*new_symbol)->next= NULL;
187      (*new_symbol)->id= malloc(strlen(in_string)+1);      (*new_symbol)->id= malloc(strlen(in_string)+1);
# Line 348  stackitem* copy(stackitem* in_item) Line 348  stackitem* copy(stackitem* in_item)
348    return out_item;    return out_item;
349  }  }
350    
351    extern void rcl(environment *env)
352    {
353      value *val;
354    
355      if(env->head == NULL) {
356        printerr("Stack empty");
357        return;
358      }
359    
360      if(env->head->item->type!=symb) {
361        printerr("Not a symbol");
362        return;
363      }
364      val=((symbol *)(env->head->item->content.ptr))->val;
365      toss(env);            /* toss the symbol */
366      push_val(&(env->head), val); /* Return its bound value */
367    }
368    
369  /* If the top element is a symbol, determine if it's bound to a  /* If the top element is a symbol, determine if it's bound to a
370     function value, and if it is, toss the symbol and execute the     function value, and if it is, toss the symbol and execute the
# Line 392  extern void eval(environment *env) Line 409  extern void eval(environment *env)
409      return;      return;
410    }    }
411    
 /*    push(&(env->head), copy(env->head)); */  
 /*    swap(env); */  
 /*    toss(env); */  
412  }  }
413    
414  /* Make a list. */  /* Make a list. */

Legend:
Removed from v.1.29  
changed lines
  Added in v.1.31

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26