Exemplo n.º 1
0
        /// <summary>
        /// Sets the string data entry for the specified offset.
        /// </summary>
        /// <param name="offset">File offset.</param>
        /// <param name="lines">String data.</param>
        /// <param name="pseudoOpcode">Pseudo-opcode for this line.</param>
        /// <param name="formatter">Formatter dependency.</param>
        /// <param name="formatDescriptor">FormatDescriptor dependency.</param>
        /// <param name="pseudoOpNames">PseudoOpNames dependency.</param>
        public void SetStringEntry(int offset, List <string> lines, string pseudoOpcode,
                                   Formatter formatter, FormatDescriptor formatDescriptor,
                                   PseudoOp.PseudoOpNames pseudoOpNames)
        {
            Debug.Assert(lines != null);
            FormattedStringEntry fse = new FormattedStringEntry(lines, pseudoOpcode,
                                                                formatter, formatDescriptor, pseudoOpNames);

            mStringEntries[offset] = fse;
        }
Exemplo n.º 2
0
            /// <summary>
            /// Checks the entry's dependencies.
            /// </summary>
            /// <remarks>
            /// The data analyzer regenerates stuff in Anattribs, so we can't expect to have
            /// the same FormatDescriptor object.
            /// </remarks>
            /// <returns>True if the dependencies match.</returns>
            public bool CheckDeps(Formatter formatter, FormatDescriptor formatDescriptor,
                                  PseudoOp.PseudoOpNames pseudoOpNames)
            {
                bool ok = (ReferenceEquals(mFormatter, formatter) &&
                           ReferenceEquals(mPseudoOpNames, pseudoOpNames) &&
                           mFormatDescriptor == formatDescriptor);

                //if (!ok) {
                //    Debug.WriteLine("CheckDeps:" +
                //        (ReferenceEquals(mFormatter, formatter) ? "" : " fmt") +
                //        (ReferenceEquals(mPseudoOpNames, pseudoOpNames) ? "" : " pop") +
                //        (mFormatDescriptor == formatDescriptor ? "" : " dfd"));
                //}
                return(ok);
            }
Exemplo n.º 3
0
            public FormattedStringEntry(List <string> lines, string popcode, Formatter formatter,
                                        FormatDescriptor formatDescriptor, PseudoOp.PseudoOpNames pseudoOpNames)
            {
                // Can't be sure the list won't change, so duplicate it.
                Lines = new List <string>(lines.Count);
                foreach (string str in lines)
                {
                    Lines.Add(str);
                }
                PseudoOpcode = popcode;

                mFormatter        = formatter;
                mFormatDescriptor = formatDescriptor;
                mPseudoOpNames    = pseudoOpNames;
            }
Exemplo n.º 4
0
 /// <summary>
 /// Retrieves the formatted string data for the specified offset.
 /// </summary>
 /// <param name="offset">File offset.</param>
 /// <param name="formatter">Formatter dependency.</param>
 /// <param name="formatDescriptor">FormatDescriptor dependency.</param>
 /// <param name="pseudoOpNames">PseudoOpNames dependency.</param>
 /// <param name="PseudoOpcode">Pseudo-op for this string.</param>
 /// <returns>A reference to the string list.  The caller must not modify the
 ///   list.</returns>
 public List <string> GetStringEntry(int offset, Formatter formatter,
                                     FormatDescriptor formatDescriptor, PseudoOp.PseudoOpNames pseudoOpNames,
                                     out string PseudoOpcode)
 {
     PseudoOpcode = null;
     if (!mStringEntries.TryGetValue(offset, out FormattedStringEntry entry))
     {
         return(null);
     }
     if (!entry.CheckDeps(formatter, formatDescriptor, pseudoOpNames))
     {
         //Debug.WriteLine("  stale entry at +" + offset.ToString("x6"));
         return(null);
     }
     PseudoOpcode = entry.PseudoOpcode;
     return(entry.Lines);
 }