﻿using Nemerle;
using Nemerle.Collections;
using Nemerle.Extensions;
using Nemerle.Text;
using Nemerle.Utility;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;

namespace Nitra.Typing
{
  [Record]
  public abstract class SingleDefSymbol : Symbol
  {
    Definition : Location { get; }

    public this(definition : Location, name : string)
    {
      base(name);
      Definition = definition;
    }

    public this(definition : Located, name : string)
    {
      this(definition.Location, name)
    }

    public this(loc : Located)
    {
      this(loc.GetText(), loc.Location);
    }

    public this(loc : Location)
    {
      this(loc.GetText(), loc);
    }

    public override Locations : list[Location] { get { [Definition] } }
    public override FirstLocation : Location { get { Definition } }
  }
}
