#include "Node.h"

#include <stdio.h>

//  oop mName;
//  oop mVariable;

VariableNode::VariableNode(oop name)
{
  mName= name;
  mLevel= 0;
  mVariable= 0;
}

oop VariableNode::withName(oop name)
{
  return new VariableNode(name);
}

oop VariableNode::name(void)
{
  return mName;
}

oop VariableNode::encodeLvalue(oop encoder)
{
  mVariable= encoder->lookup(mName);
  return this;
}

oop VariableNode::encode(oop encoder)
{
  mVariable= encoder->lookup(mName);
  mLocation= encoder->pushStack();
  return this;
}

oop VariableNode::gen(oop unit)
{
  oop stream= unit->outputStream();
  stream->format("  _%d= ", mLocation);
  mVariable->gen(unit);
  stream->format(";\n");
  return this;
}

oop VariableNode::genLvalue(oop unit)
{
  mVariable->gen(unit);
  return this;
}

oop VariableNode::printOn(oop stream)
{
  Node::printOn(stream);
  stream->format("(")->print(mName);
  if (mVariable) stream->format("=")->print(mVariable);
  stream->format(")");
  return this;
}
