#include "Node.h"

#include <assert.h>

extern oop s_Character;
extern oop s__5fvalue_;

//  int mValue;

CharacterNode::CharacterNode(int value)
{
  mValue= value;
}

oop CharacterNode::fromString(oop string)
{
  oop raw= StringNode::unescape(string);
  if (raw->size() != 1)
    string->error("illegal character constant: '$%s'", string);
  return new CharacterNode(raw->byteAt(0));
}

oop CharacterNode::encode(oop encoder)
{
  LiteralNode::encode(encoder);
  encoder->translationUnit()->lookupClass(s_Character);
  encoder->translationUnit()->declareSelector(s__5fvalue_);
  return this;
}

oop CharacterNode::genInitialisation(oop unit)
{
  unit->outputStream()->format("  l_%d= _bind(v_Character, s__5fvalue_)(v_Character, (oop)%d);\n", mTag, mValue);
  return this;
}

oop CharacterNode::printOn(oop stream)
{
  stream->format("CharacterNode(%d)", mValue);
  return this;
}
