您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

155 行
8.5 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. TengShaderFileLoadFlag = (
  22. lfLazyInclude // include files will only be loaded when needed (this will store a reference to the passed IengShaderFileReader)
  23. );
  24. TengShaderFileLoadFlags = set of TengShaderFileLoadFlag;
  25. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  26. EengShaderPart = class(Exception)
  27. public
  28. Line: Integer;
  29. Col: Integer;
  30. Filename: String;
  31. constructor Create(const aMsg: String; const aLine, aCol: Integer; const aFilename: String); overload;
  32. end;
  33. EengShaderPartInternal = class(EengShaderPart);
  34. EengExpression = class(EengShaderPart);
  35. EengInvalidToken = class(EengShaderPartInternal)
  36. constructor Create(const aClassName: String; const aToken: String; const aLine, aCol: Integer; const aFilename: String); overload;
  37. end;
  38. EengUnexpectedToken = class(EengShaderPart)
  39. constructor Create(const aToken, aExpected: String; const aLine, aCol: Integer; const aFilename: String); overload;
  40. end;
  41. EengInvalidParamter = class(EengShaderPart)
  42. constructor Create(const aParam, aExpected: String; const aLine, aCol: Integer; const aFilename: String); overload;
  43. end;
  44. EengInvalidParamterCount = class(EengShaderPart)
  45. constructor Create(const aToken: String; const aExpected, aLine, aCol: Integer; const aFilename: String); overload;
  46. constructor Create(const aToken: String; const aExpectedMin, aExpectedMax, aLine, aCol: Integer; const aFilename: String); overload;
  47. end;
  48. EengInvalidIdentifier = class(EengShaderPart)
  49. constructor Create(const aIdentifier: String; const aLine, aCol: Integer; const aFilename: String); overload;
  50. end;
  51. EengOutOfRange = class(EengShaderPartInternal)
  52. constructor Create(const aMin, aMax, aIndex, aLine, aCol: Integer; const aFilename: String); overload;
  53. end;
  54. implementation
  55. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  56. //EengShaderPart////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  57. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  58. constructor EengShaderPart.Create(const aMsg: String; const aLine, aCol: Integer; const aFilename: String);
  59. begin
  60. inherited Create(Format('%s (file: %s; line: %d; col: %d): %s', [ClassName, ExtractFileName(aFilename), aLine+1, aCol, aMsg]));
  61. Line := aLine;
  62. Col := aCol;
  63. Filename := aFilename;
  64. end;
  65. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  66. //EengInvalidToken//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  67. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  68. constructor EengInvalidToken.Create(const aClassName: String; const aToken: String; const aLine, aCol: Integer; const aFilename: String);
  69. begin
  70. inherited Create('invalid token: ' + aClassName + ' <> '+ aToken, aLine, aCol, aFilename);
  71. end;
  72. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  73. //EengUnexpectedToken///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  74. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  75. constructor EengUnexpectedToken.Create(const aToken, aExpected: String; const aLine, aCol: Integer; const aFilename: String);
  76. var
  77. s: String;
  78. begin
  79. s := 'unexpected token: ' + aToken;
  80. if (aExpected <> '') then
  81. s := s + '(expected ' + aExpected + ')';
  82. inherited Create(s, aLine, aCol, aFilename);
  83. end;
  84. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  85. //EengInvalidParamter///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  86. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  87. constructor EengInvalidParamter.Create(const aParam, aExpected: String; const aLine, aCol: Integer; const aFilename: String);
  88. var
  89. s: String;
  90. begin
  91. s := 'invalid parameter: ' + aParam;
  92. if (aExpected <> '') then
  93. s := s + '(expected ' + aExpected + ')';
  94. inherited Create(s, aLine, aCol, aFilename);
  95. end;
  96. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  97. //EengInvalidParamterCount//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  98. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  99. constructor EengInvalidParamterCount.Create(const aToken: String; const aExpected, aLine, aCol: Integer; const aFilename: String);
  100. begin
  101. inherited Create('invalid parameter count in ' + aToken + '(expected ' + IntToStr(aExpected) + ' parameter)', aLine, aCol, aFilename);
  102. end;
  103. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  104. constructor EengInvalidParamterCount.Create(const aToken: String; const aExpectedMin, aExpectedMax, aLine, aCol: Integer; const aFilename: String);
  105. var
  106. s: String;
  107. begin
  108. s := 'invalid parameter count in ' + aToken + '(expected ';
  109. if (aExpectedMax < 0)
  110. then s := s + ' at least '+ IntToStr(aExpectedMin)
  111. else s := s + IntToStr(aExpectedMin) + ' to ' + IntToStr(aExpectedMax);
  112. s := s + ' parameter)';
  113. inherited Create(s, aLine, aCol, aFilename);
  114. end;
  115. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  116. //EengInvalidIdentifier/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  117. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  118. constructor EengInvalidIdentifier.Create(const aIdentifier: String; const aLine, aCol: Integer; const aFilename: String);
  119. begin
  120. inherited Create('invalid identifier: ' + aIdentifier, aLine, aCol, aFilename);
  121. end;
  122. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  123. //EengOutOfRange////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  124. ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  125. constructor EengOutOfRange.Create(const aMin, aMax, aIndex, aLine, aCol: Integer; const aFilename: String);
  126. begin
  127. inherited Create(format('index (%d) out of range (%d:%d)', [aIndex, aMin, aMax]), aLine, aCol, aFilename);
  128. end;
  129. end.