EmueraException.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. using System;
  2. using System.Collections.Generic;
  3. namespace NTERA.EmuEra.Game.EraEmu.Sub
  4. {
  5. [Serializable]
  6. internal abstract class EmueraException : ApplicationException
  7. {
  8. protected EmueraException(string errormes, ScriptPosition position)
  9. : base(errormes)
  10. {
  11. Position = position;
  12. }
  13. protected EmueraException(string errormes)
  14. : base(errormes)
  15. {
  16. Position = null;
  17. }
  18. public ScriptPosition Position;
  19. }
  20. /// <summary>
  21. /// emuera本体に起因すると思われるエラー
  22. /// </summary>
  23. [Serializable]
  24. internal sealed class ExeEE : EmueraException
  25. {
  26. public ExeEE(string errormes)
  27. : base(errormes)
  28. {
  29. }
  30. public ExeEE(string errormes, ScriptPosition position)
  31. : base(errormes, position)
  32. {
  33. }
  34. }
  35. /// <summary>
  36. /// スクリプト側に起因すると思われるエラー
  37. /// </summary>
  38. [Serializable]
  39. internal class CodeEE : EmueraException
  40. {
  41. public CodeEE(string errormes, ScriptPosition position)
  42. : base(errormes, position)
  43. {
  44. }
  45. public CodeEE(string errormes)
  46. : base(errormes)
  47. {
  48. }
  49. }
  50. /// <summary>
  51. /// 未実装エラー
  52. /// </summary>
  53. [Serializable]
  54. internal sealed class NotImplCodeEE : CodeEE
  55. {
  56. public NotImplCodeEE(ScriptPosition position)
  57. : base("This function cannot be used in the current version", position)
  58. {
  59. }
  60. public NotImplCodeEE()
  61. : base("This function cannot be used in the current version")
  62. {
  63. }
  64. }
  65. /// <summary>
  66. /// Save, Load中のエラー
  67. /// </summary>
  68. [Serializable]
  69. internal sealed class FileEE : EmueraException
  70. {
  71. public FileEE(string errormes)
  72. : base(errormes)
  73. { }
  74. }
  75. /// <summary>
  76. /// エラー箇所を表示するための位置データ。整形前のデータなのでエラー表示以外の理由で参照するべきではない。
  77. /// </summary>
  78. public class ScriptPosition : IEquatable<ScriptPosition>, IEqualityComparer<ScriptPosition>
  79. {
  80. public ScriptPosition(string srcLine)
  81. {
  82. LineNo = -1;
  83. RowLine = srcLine != null ? string.Intern(srcLine) : srcLine;
  84. Filename = "";
  85. }
  86. public ScriptPosition(string srcFile, int srcLineNo, string srcLine)
  87. {
  88. LineNo = srcLineNo;
  89. RowLine = srcLine != null ? string.Intern(srcLine) : srcLine;
  90. Filename = srcFile ?? "";
  91. }
  92. public readonly int LineNo;
  93. public readonly string RowLine;
  94. public readonly string Filename;
  95. public override string ToString()
  96. {
  97. if(LineNo == -1)
  98. return base.ToString();
  99. return Filename + ":" + LineNo;
  100. }
  101. #region IEqualityComparer<ScriptPosition> メンバ
  102. public bool Equals(ScriptPosition x, ScriptPosition y)
  103. {
  104. if((x == null)||(y == null))
  105. return false;
  106. return ((x.Filename == y.Filename) && (x.LineNo == y.LineNo));
  107. }
  108. public int GetHashCode(ScriptPosition obj)
  109. {
  110. return Filename.GetHashCode() ^ LineNo.GetHashCode();
  111. }
  112. #endregion
  113. #region IEquatable<ScriptPosition> メンバ
  114. public bool Equals(ScriptPosition other)
  115. {
  116. return Equals(this, other);
  117. }
  118. #endregion
  119. }
  120. }