public override bool Process(ProcessArgs args)
        {
            if(args.FinalPass)
                args.Writer.Write(m_val);
            else
                args.Intermediate.Add(this);

            return true;
        }
        public override bool Process(ProcessArgs args)
        {
            if (!args.Symbols.ContainsKey(m_val))
            {
                args.Intermediate.Add(this);
                return false;
            }

            long targetAddress = args.Symbols[m_val];
            long localAddress = args.GetOffset() + args.Base;

            dynamic resolved = 0;
            if (Is64Bit)
            {
                localAddress += sizeof(long);
                resolved = targetAddress - (Absolute ? 0L : localAddress);
            }
            else
            {
                localAddress += sizeof(int);
                resolved = (int)(targetAddress - (Absolute ? 0L : localAddress));
            }

            if (args.FinalPass)
                args.Writer.Write(resolved);
            else
            {
                byte[] val = BitConverter.GetBytes(resolved);
                foreach (var b in val)
                    args.Intermediate.Add(new AddressIndependentByte(b));
            }

            return true;
        }
 public override bool Process(ProcessArgs args)
 {
     args.Symbols.Add(m_val, args.GetOffset() + args.Base);
     return true;
 }
 public abstract bool Process(ProcessArgs args);
 public override bool Process(ProcessArgs args)
 {
     throw new Exception("This shouldn't exist at the point where process is called");
 }