You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

149 rivejä
8.1 KiB

  1. unit uengShaderFileTypes;
  2. {$mode objfpc}{$H+}
  3. {$I uengShaderFile.inc}
  4. interface
  5. uses
  6. Classes, SysUtils
  7. {$IFDEF USE_BITSPACE_UTILS}
  8. , uutlSerialization, uutlCommon
  9. {$ENDIF}
  10. ;
  11. type
  12. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  13. {$IFDEF USE_BITSPACE_UTILS}
  14. IengShaderFileWriter = uutlSerialization.IutlFileWriter;
  15. IengShaderFileReader = uutlSerialization.IutlFileReader;
  16. TengShaderFileReader = uutlSerialization.TutlSimpleFileReader;
  17. TengShaderFileWriter = uutlSerialization.TutlSimpleFileWriter;
  18. TIntfObjNoRefCount = uutlCommon.TutlInterfaceNoRefCount;
  19. {$ENDIF}
  20. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  21. EengShaderPart = class(Exception)
  22. public
  23. Line: Integer;
  24. Col: Integer;
  25. Filename: String;
  26. constructor Create(const aMsg: String; const aLine, aCol: Integer; const aFilename: String); overload;
  27. end;
  28. EengShaderPartInternal = class(EengShaderPart);
  29. EengExpression = class(EengShaderPart);
  30. EengInvalidToken = class(EengShaderPartInternal)
  31. constructor Create(const aClassName: String; const aToken: String; const aLine, aCol: Integer; const aFilename: String); overload;
  32. end;
  33. EengUnexpectedToken = class(EengShaderPart)
  34. constructor Create(const aToken, aExpected: String; const aLine, aCol: Integer; const aFilename: String); overload;
  35. end;
  36. EengInvalidParamter = class(EengShaderPart)
  37. constructor Create(const aParam, aExpected: String; const aLine, aCol: Integer; const aFilename: String); overload;
  38. end;
  39. EengInvalidParamterCount = class(EengShaderPart)
  40. constructor Create(const aToken: String; const aExpected, aLine, aCol: Integer; const aFilename: String); overload;
  41. constructor Create(const aToken: String; const aExpectedMin, aExpectedMax, aLine, aCol: Integer; const aFilename: String); overload;
  42. end;
  43. EengInvalidIdentifier = class(EengShaderPart)
  44. constructor Create(const aIdentifier: String; const aLine, aCol: Integer; const aFilename: String); overload;
  45. end;
  46. EengOutOfRange = class(EengShaderPartInternal)
  47. constructor Create(const aMin, aMax, aIndex, aLine, aCol: Integer; const aFilename: String); overload;
  48. end;
  49. implementation
  50. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  51. //EengShaderPart////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  52. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  53. constructor EengShaderPart.Create(const aMsg: String; const aLine, aCol: Integer; const aFilename: String);
  54. begin
  55. inherited Create(Format('%s (file: %s; line: %d; col: %d): %s', [ClassName, ExtractFileName(aFilename), aLine+1, aCol, aMsg]));
  56. Line := aLine;
  57. Col := aCol;
  58. Filename := aFilename;
  59. end;
  60. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  61. //EengInvalidToken//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  62. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  63. constructor EengInvalidToken.Create(const aClassName: String; const aToken: String; const aLine, aCol: Integer; const aFilename: String);
  64. begin
  65. inherited Create('invalid token: ' + aClassName + ' <> '+ aToken, aLine, aCol, aFilename);
  66. end;
  67. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  68. //EengUnexpectedToken///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  69. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  70. constructor EengUnexpectedToken.Create(const aToken, aExpected: String; const aLine, aCol: Integer; const aFilename: String);
  71. var
  72. s: String;
  73. begin
  74. s := 'unexpected token: ' + aToken;
  75. if (aExpected <> '') then
  76. s := s + '(expected ' + aExpected + ')';
  77. inherited Create(s, aLine, aCol, aFilename);
  78. end;
  79. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  80. //EengInvalidParamter///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  81. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  82. constructor EengInvalidParamter.Create(const aParam, aExpected: String; const aLine, aCol: Integer; const aFilename: String);
  83. var
  84. s: String;
  85. begin
  86. s := 'invalid parameter: ' + aParam;
  87. if (aExpected <> '') then
  88. s := s + '(expected ' + aExpected + ')';
  89. inherited Create(s, aLine, aCol, aFilename);
  90. end;
  91. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  92. //EengInvalidParamterCount//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  93. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  94. constructor EengInvalidParamterCount.Create(const aToken: String; const aExpected, aLine, aCol: Integer; const aFilename: String);
  95. begin
  96. inherited Create('invalid parameter count in ' + aToken + '(expected ' + IntToStr(aExpected) + ' parameter)', aLine, aCol, aFilename);
  97. end;
  98. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. constructor EengInvalidParamterCount.Create(const aToken: String; const aExpectedMin, aExpectedMax, aLine, aCol: Integer; const aFilename: String);
  100. var
  101. s: String;
  102. begin
  103. s := 'invalid parameter count in ' + aToken + '(expected ';
  104. if (aExpectedMax < 0)
  105. then s := s + ' at least '+ IntToStr(aExpectedMin)
  106. else s := s + IntToStr(aExpectedMin) + ' to ' + IntToStr(aExpectedMax);
  107. s := s + ' parameter)';
  108. inherited Create(s, aLine, aCol, aFilename);
  109. end;
  110. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  111. //EengInvalidIdentifier/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  112. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  113. constructor EengInvalidIdentifier.Create(const aIdentifier: String; const aLine, aCol: Integer; const aFilename: String);
  114. begin
  115. inherited Create('invalid identifier: ' + aIdentifier, aLine, aCol, aFilename);
  116. end;
  117. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  118. //EengOutOfRange////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  119. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  120. constructor EengOutOfRange.Create(const aMin, aMax, aIndex, aLine, aCol: Integer; const aFilename: String);
  121. begin
  122. inherited Create(format('index (%d) out of range (%d:%d)', [aIndex, aMin, aMax]), aLine, aCol, aFilename);
  123. end;
  124. end.