SkSLUtil.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright 2016 Google Inc.
  3. *
  4. * Use of this source code is governed by a BSD-style license that can be
  5. * found in the LICENSE file.
  6. */
  7. #include "src/sksl/SkSLUtil.h"
  8. #include "src/sksl/SkSLStringStream.h"
  9. #ifndef __STDC_FORMAT_MACROS
  10. #define __STDC_FORMAT_MACROS
  11. #endif
  12. namespace SkSL {
  13. #if defined(SKSL_STANDALONE) || !SK_SUPPORT_GPU
  14. StandaloneShaderCaps standaloneCaps;
  15. #endif
  16. void sksl_abort() {
  17. #ifdef SKSL_STANDALONE
  18. abort();
  19. #else
  20. sk_abort_no_print();
  21. exit(1);
  22. #endif
  23. }
  24. void write_stringstream(const StringStream& s, OutputStream& out) {
  25. out.write(s.str().c_str(), s.str().size());
  26. }
  27. bool is_assignment(Token::Kind op) {
  28. switch (op) {
  29. case Token::EQ: // fall through
  30. case Token::PLUSEQ: // fall through
  31. case Token::MINUSEQ: // fall through
  32. case Token::STAREQ: // fall through
  33. case Token::SLASHEQ: // fall through
  34. case Token::PERCENTEQ: // fall through
  35. case Token::SHLEQ: // fall through
  36. case Token::SHREQ: // fall through
  37. case Token::BITWISEOREQ: // fall through
  38. case Token::BITWISEXOREQ: // fall through
  39. case Token::BITWISEANDEQ: // fall through
  40. case Token::LOGICALOREQ: // fall through
  41. case Token::LOGICALXOREQ: // fall through
  42. case Token::LOGICALANDEQ:
  43. return true;
  44. default:
  45. return false;
  46. }
  47. }
  48. Token::Kind remove_assignment(Token::Kind op) {
  49. switch (op) {
  50. case Token::PLUSEQ: return Token::PLUS;
  51. case Token::MINUSEQ: return Token::MINUS;
  52. case Token::STAREQ: return Token::STAR;
  53. case Token::SLASHEQ: return Token::SLASH;
  54. case Token::PERCENTEQ: return Token::PERCENT;
  55. case Token::SHLEQ: return Token::SHL;
  56. case Token::SHREQ: return Token::SHR;
  57. case Token::BITWISEOREQ: return Token::BITWISEOR;
  58. case Token::BITWISEXOREQ: return Token::BITWISEXOR;
  59. case Token::BITWISEANDEQ: return Token::BITWISEAND;
  60. case Token::LOGICALOREQ: return Token::LOGICALOR;
  61. case Token::LOGICALXOREQ: return Token::LOGICALXOR;
  62. case Token::LOGICALANDEQ: return Token::LOGICALAND;
  63. default: return op;
  64. }
  65. }
  66. } // namespace