lpc4/lib/
lpc4/lib/doc/efun/
lpc4/lib/doc/lfun/
lpc4/lib/doc/operators/
lpc4/lib/doc/simul_efuns/
lpc4/lib/doc/types/
lpc4/lib/etc/
lpc4/lib/include/
lpc4/lib/include/arpa/
lpc4/lib/obj/d/
lpc4/lib/save/
lpc4/lib/secure/
lpc4/lib/std/
lpc4/lib/std/living/
void do_lvalue(node *n)
{
  switch(n->token)
  {
  case F_LOCAL:
    ins_f_byte(F_PUSH_LOCAL_LVALUE);
    ins_byte(n->u.s.a.number);
    break;

  case F_GLOBAL:
    ins_f_byte(F_PUSH_GLOBAL_LVALUE);
    ins_byte(n->u.s.a.number);
    break;

  case F_INDEX:
    docode(n->u.s.a.node);
    docode(n->u.s.b.node);
    ins_f_byte(F_PUSH_INDEXED_LVALUE);
    break;

  default:
    error("Illegal lvalue.\n");
    ins_int(0);
    break;
  }
}

void do_assign(node *to,node *from)
{
  switch(n->token)
  {
  case F_LOCAL:
    do_docode(from);
    ins_f_byte(F_ASSIGN_LOCAL);
    ins_byte(to->u.s.a.number);
    break;
    
  case F_GLOBAL:
    do_docode(from);
    ins_f_byte(F_ASSIGN_GLOBAL);
    ins_byte(to->u.s.a.number);
    break;

  case F_INDEX:
    do_lvalue(to->u.s.a.node);
    do_docode(to->u.s.b.node);
    do_docode(from);
    ins_f_byte(F_ASSIGN_INDEX);
    break;

  default:
    error("Illegal lvalue.\n");
    ins_int(0);
    break;
  }
}





void foo()
{
  switch()
  {
  case F_PUSH_LOCAL_LVALUE:
    sp++;
    sp->type=T_LVALUE_POINTER;
    sp->subtype=T_ANY;
    sp->u.svalue=fp+EXTRACT_UCHAR(pc);
    pc++;
    break;

  case F_RESOLV_INDEXED_LVALUE:
  {
    struct vector *v;
    int i;
    switch(sp[-1].type)
    {
    default:
      error("Indexing on illigal type.\n");

    case T_POINTER:
      if(sp[0].type!=T_NUMBER) error("Index is not an integer.\n");
      i=sp[0].u.number;
      if(i<0) i+=sp[-1].u.vec->size;
      if(i<0 || i>=sp[-1].u.vec->size) error("Index out of range.\n");
      sp[0].u.number=i;
      sp[0].type=T_LVALUE_VECTOR_INDEX;
      break;

    case T_MAPPING:
      sp++;
      sp->type=T_LVALUE_MAPPING_INDEX:
    }
  }

  case F_LVALUE_TO_SVALUE:
  {
    switch(sp[-1].type)
    {
    case T_LVALUE_POINTER:
      assign_svalue_no_free(sp,sp->u.svalue);
      break;

    case T_LVALUE_VECTOR_INDEX:
      assign_svalue(sp,sp[-1].u.vec->item+sp->u.number);
      free_svalue(sp-1);
      sp[-1]=*sp;
      sp--;
      break;

    case T_LVALUE_MAPPING_INDEX:
      i=assoc(sp[-2].u.vec->item[0].u.vec,sp[-1]);
      if(i==-1)
      {
	assign_svalue(
      }else{
      }
    }
  }
  }
}