//------------------------------------------------------------ // XDataに実体を書き込む。 public void XDataWriteEntity(XDataWriter aWriter) { aWriter.WriteCommentLine("BCObjectTypeList"); using (new XDataWriter.IndentScope(aWriter)) { // アライメントとラベル aWriter.WriteAlignLine(4); aWriter.WriteLabelLine(XDATA_LABEL); // 数 aWriter.WriteUInt32Line("count", (uint)mList.Count); // リファレンス foreach (var entry in mList) { entry.XDataWriteReference(aWriter); } } // 実体 { foreach (var entry in mList) { entry.XDataWriteEntry(aWriter); } } }
//------------------------------------------------------------ // XDataに実体を書き込む。 public void XDataWriteEntity(XDataWriter aWriter, string aOwnerPath) { aWriter.WriteCommentLine("BCFunctionList(" + aOwnerPath + ")"); using (new XDataWriter.IndentScope(aWriter)) { // アライメントとラベル aWriter.WriteAlignLine(4); aWriter.WriteLabelLine(XDATA_LABEL + ":" + aOwnerPath); // 数 aWriter.WriteUInt32Line("count", (uint)mList.Count); // リファレンス foreach (var entry in mList) { entry.XDataWriteReference(aWriter); } } // 実体 { foreach (var entry in mList) { entry.XDataWriteEntity(aWriter); } } }
//------------------------------------------------------------ // XDataに実体を書き込む。 public void XDataWriteEntity(XDataWriter aWriter) { // フルパスのメモ string fullPath = mFunctionSymbolNode.GetUniqueFullPath(); // 実体 aWriter.WriteCommentLine("BCFunction(" + fullPath + ")"); using (new XDataWriter.IndentScope(aWriter)) { // アライメントとラベル aWriter.WriteAlignLine(4); aWriter.WriteLabelLine(XDATA_LABEL + ":" + fullPath); // シンボル名 aWriter.WriteStringLine("name", mFunctionSymbolNode.GetIdentifier().String()); // 命令コード aWriter.WriteReferenceLine(XDATA_LABEL_OP_CODE + ":" + fullPath); } // その他 {// 命令コード aWriter.WriteCommentLine("BCOpCode(" + fullPath + ")-" + mBCOpCodeList.Count * 4 + "bytes"); using (new XDataWriter.IndentScope(aWriter)) { // アライメントとラベル aWriter.WriteAlignLine(4); aWriter.WriteLabelLine(XDATA_LABEL_OP_CODE + ":" + fullPath); uint index = 0; foreach (var entry in mBCOpCodeList) { entry.XDataWrite(aWriter, index); ++index; } } } }
//------------------------------------------------------------ // XDataに実体を書き込む。 public void XDataWriteEntity(XDataWriter aWriter) { aWriter.WriteCommentLine("BCSymbolTable"); using (new XDataWriter.IndentScope(aWriter)) { // アライメントとラベル aWriter.WriteAlignLine(8); aWriter.WriteLabelLine(XDATA_LABEL); // 要素数 aWriter.WriteUInt32Line("count", (uint)mList.Count); // 各シンボル foreach (var entry in mList) { // 値 entry.XDataWriteEntity(aWriter); } } }
//------------------------------------------------------------ // XDataに実体を書き込む。 public void XDataWriteEntry(XDataWriter aWriter) { // フルパスのメモ string fullPath = mTypeSymbolNode.GetUniqueFullPath(); // 実体 aWriter.WriteCommentLine("BCObjectType(" + fullPath + ")"); using (new XDataWriter.IndentScope(aWriter)) { // アライメントとラベル。 aWriter.WriteAlignLine(4); aWriter.WriteLabelLine(XDATA_LABEL + ":" + fullPath); // パス aWriter.WriteStringLine("path", fullPath); // 関数リスト mFunctionList.XDataWriteReference(aWriter, fullPath); } // その他 mFunctionList.XDataWriteEntity(aWriter, fullPath); }
//------------------------------------------------------------ // XDataに実体を書き込む。 public void XDataWriteEntity(XDataWriter aWriter) { aWriter.WriteCommentLine("BCConstantValueTable"); using (new XDataWriter.IndentScope(aWriter)) { // アライメントとラベル aWriter.WriteAlignLine(8); aWriter.WriteLabelLine(XDATA_LABEL); // テーブルのサイズ aWriter.WriteUInt32Line("size", mSize); // 各定数 uint pos = 0; foreach (var entry in mList) { // オフセット位置までpadding uint offset = entry.Offset(); if (pos < offset) { uint padSize = offset - pos; aWriter.WriteIndent(); aWriter.WriteComment("padding (" + padSize + ")"); for (uint i = 0; i < padSize; ++i) { aWriter.WriteUInt8(0xFF); } aWriter.WriteLine(); } pos = offset; // 値 entry.XDataWriteEntity(aWriter); pos += entry.Size(); } } }