#include "Node.h"

extern oop s__5fsize_value_;
extern oop s_WordArray;

// oop mElements;

WordArrayNode::WordArrayNode(oop elements)
{
  mElements= elements;
}

oop WordArrayNode::withElements(oop elements)
{
  return new WordArrayNode(elements);
}

oop WordArrayNode::encode(oop encoder)
{
  LiteralNode::encode(encoder);
  encoder->translationUnit()->lookupClass(s_WordArray);
  encoder->translationUnit()->declareSelector(s__5fsize_value_);
  return this;
}

oop WordArrayNode::genDefinition(oop unit)
{
  LiteralNode::genDefinition(unit);
  oop stream= unit->outputStream();
  stream->format("unsigned _l_%d[%d]= {\n", mTag, mElements->size());
  iterate(mElements, iter)
    {
      stream->space(2);
      iter.element()->genWord(unit);
      stream->format(",\n");
    }
  stream->format("};\n");
  return this;
}

oop WordArrayNode::genInitialisation(oop unit)
{
  oop stream= unit->outputStream();
  stream->format("  l_%d= _bind(v_WordArray, s__5fsize_value_)(v_WordArray, (oop)%d, (oop)_l_%d);\n",
		 mTag,
		 mElements->size(),
		 mTag);
  return this;
}

oop WordArrayNode::printOn(oop stream)
{
  return stream
    ->format("WordArrayNode(")
    ->print(mElements)
    ->format(")");
}
