Beispiel #1
0
        public override bool Equals(object obj)
        {
            FpuStackStorage fss = obj as FpuStackStorage;

            if (fss == null)
            {
                return(false);
            }
            return(FpuStackOffset == fss.FpuStackOffset);
        }
Beispiel #2
0
 public virtual Expression VisitFpuStackStorage(FpuStackStorage fpu)
 {
     if (ensureVariables)
     {
         return(binder.EnsureFpuStackVariable(fpu.FpuStackOffset, fpu.DataType));
     }
     else
     {
         return(binder.EnsureFpuStackVariable(fpu.FpuStackOffset, fpu.DataType));
     }
 }
Beispiel #3
0
 public Identifier FindFpuStackVariable(int off)
 {
     foreach (Identifier id in identifiers)
     {
         FpuStackStorage fst = id.Storage as FpuStackStorage;
         if (fst != null && fst.FpuStackOffset == off)
         {
             return(id);
         }
     }
     return(null);
 }
Beispiel #4
0
        public Identifier EnsureFpuStackVariable(int v, DataType dataType)
        {
            if (this.fpus.TryGetValue(v, out var id))
            {
                return(id);
            }
            var fpu = new FpuStackStorage(v, dataType);

            id = new Identifier(fpu.Name, fpu.DataType, fpu);
            this.fpus.Add(v, id);
            ids.Add(id);
            return(id);
        }
Beispiel #5
0
        /// <summary>
        /// The offset of a variable from the return address, as seen from a caller.
        /// </summary>
        /// <param name="var"></param>
        /// <returns></returns>
        public int ExternalOffset(Identifier id)
        {
            if (id == null)
            {
                return(0);
            }
            StackArgumentStorage stVar = id.Storage as StackArgumentStorage;

            if (stVar != null)
            {
                return(stVar.StackOffset);
            }
            FpuStackStorage fstVar = id.Storage as FpuStackStorage;

            if (fstVar != null)
            {
                return(fstVar.FpuStackOffset);
            }

            throw new ArgumentOutOfRangeException("var", "Variable must be an argument.");
        }
Beispiel #6
0
 public Expression VisitFpuStackStorage(FpuStackStorage fpu)
 {
     return(frame.EnsureFpuStackVariable(fpu.FpuStackOffset - site.FpuStackDepthBefore, fpu.DataType));
 }
Beispiel #7
0
 Identifier StorageVisitor <Identifier> .VisitFpuStackStorage(FpuStackStorage fpu)
 {
     throw new NotImplementedException();
 }