zuora_connect_ui 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (449) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/zuora_connect_ui.js +1 -0
  3. data/app/assets/javascripts/zuora_connect_ui/util.js +51 -0
  4. data/app/assets/stylesheets/_zuora_connect_ui.scss +4 -6
  5. data/app/assets/stylesheets/zuora_connect_ui/datatables.scss +3 -3
  6. data/app/helpers/zuora_connect_ui/application_helper.rb +28 -4
  7. data/app/views/partials/_table.html.erb +16 -7
  8. data/lib/zuora_connect_ui/version.rb +1 -1
  9. data/vendor/ruby/2.6.0/cache/autoprefixer-rails-9.6.1.1.gem +0 -0
  10. data/vendor/ruby/2.6.0/cache/parser-2.6.4.1.gem +0 -0
  11. data/vendor/ruby/2.6.0/cache/sassc-2.2.0.gem +0 -0
  12. data/vendor/ruby/2.6.0/cache/zeitwerk-2.1.10.gem +0 -0
  13. data/vendor/ruby/2.6.0/extensions/x86_64-linux/2.6.0/sassc-2.2.0/gem.build_complete +0 -0
  14. data/vendor/ruby/2.6.0/extensions/x86_64-linux/2.6.0/sassc-2.2.0/gem_make.out +75 -0
  15. data/vendor/ruby/2.6.0/extensions/x86_64-linux/2.6.0/sassc-2.2.0/sassc/libsass.so +0 -0
  16. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/CHANGELOG.md +1085 -0
  17. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/Gemfile +10 -0
  18. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/LICENSE +20 -0
  19. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/README.md +237 -0
  20. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/Rakefile +53 -0
  21. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/autoprefixer-rails.gemspec +32 -0
  22. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails.rb +41 -0
  23. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/processor.rb +194 -0
  24. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/railtie.rb +50 -0
  25. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/result.rb +24 -0
  26. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/sprockets.rb +62 -0
  27. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/autoprefixer-rails/version.rb +3 -0
  28. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/lib/rake/autoprefixer_tasks.rb +28 -0
  29. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/Rakefile +2 -0
  30. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/config/manifest.js +0 -0
  31. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/evaluate.css.erb +1 -0
  32. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/loaded.sass +2 -0
  33. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/sass.sass +1 -0
  34. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/test.css +3 -0
  35. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/assets/stylesheets/wrong.css +2 -0
  36. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/controllers/application_controller.rb +2 -0
  37. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/app/controllers/css_controller.rb +6 -0
  38. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config.ru +2 -0
  39. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/application.rb +16 -0
  40. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/autoprefixer.yml +2 -0
  41. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/boot.rb +2 -0
  42. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/environment.rb +3 -0
  43. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/environments/test.rb +9 -0
  44. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/initializers/secret_token.rb +1 -0
  45. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/app/config/routes.rb +3 -0
  46. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/autoprefixer_spec.rb +121 -0
  47. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/processor_spec.rb +25 -0
  48. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/rails_spec.rb +40 -0
  49. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/railtie_spec.rb +29 -0
  50. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/spec/spec_helper.rb +16 -0
  51. data/vendor/ruby/2.6.0/gems/autoprefixer-rails-9.6.1.1/vendor/autoprefixer.js +67195 -0
  52. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/CHANGELOG.md +909 -0
  53. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/CONTRIBUTING.md +17 -0
  54. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/Gemfile +10 -0
  55. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/LICENSE.txt +25 -0
  56. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/README.md +301 -0
  57. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/Rakefile +166 -0
  58. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/bin/ruby-parse +7 -0
  59. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/bin/ruby-rewrite +7 -0
  60. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/ci/run_rubocop_specs +14 -0
  61. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/AST_FORMAT.md +1816 -0
  62. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/CUSTOMIZATION.md +37 -0
  63. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/INTERNALS.md +21 -0
  64. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/doc/css/common.css +68 -0
  65. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/gauntlet_parser.rb +123 -0
  66. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser.rb +82 -0
  67. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/all.rb +12 -0
  68. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ast/node.rb +40 -0
  69. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ast/processor.rb +264 -0
  70. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/base.rb +270 -0
  71. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/builders/default.rb +1741 -0
  72. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/clobbering_error.rb +13 -0
  73. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/color.rb +32 -0
  74. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/context.rb +59 -0
  75. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/current.rb +92 -0
  76. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/deprecation.rb +13 -0
  77. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/diagnostic.rb +163 -0
  78. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/diagnostic/engine.rb +105 -0
  79. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer.rb +23546 -0
  80. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer.rl +2503 -0
  81. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/dedenter.rb +79 -0
  82. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/explanation.rb +55 -0
  83. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/literal.rb +269 -0
  84. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/max_numparam_stack.rb +42 -0
  85. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/lexer/stack_state.rb +49 -0
  86. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/macruby.rb +6124 -0
  87. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/macruby.y +2198 -0
  88. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/messages.rb +90 -0
  89. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/meta.rb +33 -0
  90. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/rewriter.rb +105 -0
  91. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby18.rb +5661 -0
  92. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby18.y +1934 -0
  93. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby19.rb +6084 -0
  94. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby19.y +2175 -0
  95. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby20.rb +6511 -0
  96. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby20.y +2353 -0
  97. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby21.rb +6570 -0
  98. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby21.y +2357 -0
  99. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby22.rb +6605 -0
  100. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby22.y +2364 -0
  101. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby23.rb +6624 -0
  102. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby23.y +2370 -0
  103. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby24.rb +6689 -0
  104. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby24.y +2408 -0
  105. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby25.rb +6656 -0
  106. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby25.y +2405 -0
  107. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby26.rb +6670 -0
  108. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby26.y +2413 -0
  109. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby27.rb +6893 -0
  110. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/ruby27.y +2470 -0
  111. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/rubymotion.rb +6078 -0
  112. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/rubymotion.y +2182 -0
  113. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/runner.rb +253 -0
  114. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/runner/ruby_parse.rb +157 -0
  115. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/runner/ruby_rewrite.rb +101 -0
  116. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/buffer.rb +330 -0
  117. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/comment.rb +121 -0
  118. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/comment/associator.rb +210 -0
  119. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map.rb +186 -0
  120. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/collection.rb +18 -0
  121. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/condition.rb +21 -0
  122. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/constant.rb +32 -0
  123. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/definition.rb +23 -0
  124. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/for.rb +19 -0
  125. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/heredoc.rb +19 -0
  126. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/index.rb +33 -0
  127. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/keyword.rb +20 -0
  128. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/objc_kwarg.rb +19 -0
  129. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/operator.rb +17 -0
  130. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/rescue_body.rb +21 -0
  131. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/send.rb +36 -0
  132. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/ternary.rb +18 -0
  133. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/map/variable.rb +31 -0
  134. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/range.rb +310 -0
  135. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/rewriter.rb +513 -0
  136. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/rewriter/action.rb +44 -0
  137. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/tree_rewriter.rb +301 -0
  138. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/source/tree_rewriter/action.rb +133 -0
  139. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/static_environment.rb +46 -0
  140. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/syntax_error.rb +21 -0
  141. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/tree_rewriter.rb +134 -0
  142. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/lib/parser/version.rb +5 -0
  143. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/parser.gemspec +51 -0
  144. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/bug_163/fixtures/input.rb +5 -0
  145. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/bug_163/fixtures/output.rb +5 -0
  146. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/bug_163/rewriter.rb +20 -0
  147. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/helper.rb +59 -0
  148. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/parse_helper.rb +316 -0
  149. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/racc_coverage_helper.rb +133 -0
  150. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_base.rb +31 -0
  151. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_current.rb +29 -0
  152. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_diagnostic.rb +96 -0
  153. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_diagnostic_engine.rb +62 -0
  154. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_encoding.rb +99 -0
  155. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_lexer.rb +3659 -0
  156. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_lexer_stack_state.rb +78 -0
  157. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_parse_helper.rb +80 -0
  158. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_parser.rb +7579 -0
  159. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_runner_parse.rb +35 -0
  160. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_runner_rewrite.rb +47 -0
  161. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_buffer.rb +162 -0
  162. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_comment.rb +36 -0
  163. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_comment_associator.rb +367 -0
  164. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_map.rb +15 -0
  165. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_range.rb +172 -0
  166. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_rewriter.rb +541 -0
  167. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_rewriter_action.rb +46 -0
  168. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_source_tree_rewriter.rb +173 -0
  169. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/test_static_environment.rb +45 -0
  170. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/using_tree_rewriter/fixtures/input.rb +3 -0
  171. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/using_tree_rewriter/fixtures/output.rb +3 -0
  172. data/vendor/ruby/2.6.0/gems/parser-2.6.4.1/test/using_tree_rewriter/using_tree_rewriter.rb +9 -0
  173. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/CHANGELOG.md +77 -0
  174. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/CODE_OF_CONDUCT.md +10 -0
  175. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/Gemfile +2 -0
  176. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/LICENSE.txt +22 -0
  177. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/README.md +68 -0
  178. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/Rakefile +53 -0
  179. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/Makefile +271 -0
  180. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/SharedPtr.o +0 -0
  181. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast.o +0 -0
  182. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast2c.o +0 -0
  183. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_fwd_decl.o +0 -0
  184. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_sel_cmp.o +0 -0
  185. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_sel_unify.o +0 -0
  186. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_selectors.o +0 -0
  187. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_supports.o +0 -0
  188. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/ast_values.o +0 -0
  189. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/backtrace.o +0 -0
  190. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/base64vlq.o +0 -0
  191. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/bind.o +0 -0
  192. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/c2ast.o +0 -0
  193. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/c99func.o +0 -0
  194. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/cencode.o +0 -0
  195. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/check_nesting.o +0 -0
  196. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/color_maps.o +0 -0
  197. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/constants.o +0 -0
  198. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/context.o +0 -0
  199. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/cssize.o +0 -0
  200. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/depend +4 -0
  201. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/emitter.o +0 -0
  202. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/environment.o +0 -0
  203. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/error_handling.o +0 -0
  204. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/eval.o +0 -0
  205. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/expand.o +0 -0
  206. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/extconf.rb +84 -0
  207. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/extend.o +0 -0
  208. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/file.o +0 -0
  209. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_colors.o +0 -0
  210. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_lists.o +0 -0
  211. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_maps.o +0 -0
  212. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_miscs.o +0 -0
  213. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_numbers.o +0 -0
  214. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_selectors.o +0 -0
  215. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_strings.o +0 -0
  216. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/fn_utils.o +0 -0
  217. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/inspect.o +0 -0
  218. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/json.o +0 -0
  219. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/lexer.o +0 -0
  220. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass.so +0 -0
  221. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/VERSION +1 -0
  222. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/contrib/plugin.cpp +60 -0
  223. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass.h +15 -0
  224. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/base.h +96 -0
  225. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/context.h +170 -0
  226. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/functions.h +139 -0
  227. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/values.h +145 -0
  228. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass/version.h +12 -0
  229. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/include/sass2scss.h +120 -0
  230. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast.cpp +963 -0
  231. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast.hpp +905 -0
  232. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast2c.cpp +80 -0
  233. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast2c.hpp +39 -0
  234. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_def_macros.hpp +132 -0
  235. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_fwd_decl.cpp +30 -0
  236. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_fwd_decl.hpp +341 -0
  237. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_sel_cmp.cpp +909 -0
  238. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_sel_unify.cpp +280 -0
  239. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_selectors.cpp +1475 -0
  240. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_selectors.hpp +568 -0
  241. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_supports.cpp +130 -0
  242. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_supports.hpp +121 -0
  243. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_values.cpp +967 -0
  244. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/ast_values.hpp +489 -0
  245. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/b64/cencode.h +32 -0
  246. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/b64/encode.h +79 -0
  247. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/backtrace.cpp +50 -0
  248. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/backtrace.hpp +29 -0
  249. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/base64vlq.cpp +47 -0
  250. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/base64vlq.hpp +30 -0
  251. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/bind.cpp +312 -0
  252. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/bind.hpp +15 -0
  253. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/c2ast.cpp +64 -0
  254. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/c2ast.hpp +14 -0
  255. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/c99func.c +54 -0
  256. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/cencode.c +108 -0
  257. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/check_nesting.cpp +394 -0
  258. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/check_nesting.hpp +66 -0
  259. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/color_maps.cpp +651 -0
  260. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/color_maps.hpp +331 -0
  261. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/constants.cpp +194 -0
  262. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/constants.hpp +194 -0
  263. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/context.cpp +890 -0
  264. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/context.hpp +152 -0
  265. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/cssize.cpp +604 -0
  266. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/cssize.hpp +77 -0
  267. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/debug.hpp +43 -0
  268. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/debugger.hpp +807 -0
  269. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/emitter.cpp +298 -0
  270. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/emitter.hpp +103 -0
  271. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/environment.cpp +260 -0
  272. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/environment.hpp +119 -0
  273. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/error_handling.cpp +212 -0
  274. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/error_handling.hpp +229 -0
  275. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/eval.cpp +1657 -0
  276. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/eval.hpp +112 -0
  277. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/expand.cpp +822 -0
  278. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/expand.hpp +78 -0
  279. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/extend.cpp +2132 -0
  280. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/extend.hpp +86 -0
  281. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/file.cpp +522 -0
  282. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/file.hpp +133 -0
  283. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_colors.cpp +594 -0
  284. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_colors.hpp +85 -0
  285. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_lists.cpp +284 -0
  286. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_lists.hpp +34 -0
  287. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_maps.cpp +94 -0
  288. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_maps.hpp +30 -0
  289. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_miscs.cpp +256 -0
  290. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_miscs.hpp +40 -0
  291. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_numbers.cpp +220 -0
  292. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_numbers.hpp +45 -0
  293. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_selectors.cpp +235 -0
  294. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_selectors.hpp +35 -0
  295. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_strings.cpp +254 -0
  296. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_strings.hpp +34 -0
  297. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_utils.cpp +156 -0
  298. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/fn_utils.hpp +56 -0
  299. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/inspect.cpp +1087 -0
  300. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/inspect.hpp +99 -0
  301. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/json.cpp +1436 -0
  302. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/json.hpp +117 -0
  303. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/kwd_arg_macros.hpp +28 -0
  304. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/lexer.cpp +184 -0
  305. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/lexer.hpp +315 -0
  306. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/listize.cpp +84 -0
  307. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/listize.hpp +38 -0
  308. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/mapping.hpp +18 -0
  309. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/memory/SharedPtr.cpp +33 -0
  310. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/memory/SharedPtr.hpp +286 -0
  311. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/node.cpp +322 -0
  312. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/node.hpp +118 -0
  313. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/operation.hpp +213 -0
  314. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/operators.cpp +266 -0
  315. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/operators.hpp +30 -0
  316. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/output.cpp +339 -0
  317. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/output.hpp +47 -0
  318. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/parser.cpp +3153 -0
  319. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/parser.hpp +402 -0
  320. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/paths.hpp +71 -0
  321. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/plugins.cpp +188 -0
  322. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/plugins.hpp +57 -0
  323. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/position.cpp +184 -0
  324. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/position.hpp +124 -0
  325. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/prelexer.cpp +1780 -0
  326. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/prelexer.hpp +484 -0
  327. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/remove_placeholders.cpp +87 -0
  328. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/remove_placeholders.hpp +34 -0
  329. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass.cpp +155 -0
  330. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass.hpp +142 -0
  331. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass2scss.cpp +895 -0
  332. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_context.cpp +772 -0
  333. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_context.hpp +129 -0
  334. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_functions.cpp +210 -0
  335. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_functions.hpp +50 -0
  336. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_util.cpp +152 -0
  337. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_util.hpp +256 -0
  338. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_values.cpp +365 -0
  339. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/sass_values.hpp +82 -0
  340. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/source_map.cpp +198 -0
  341. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/source_map.hpp +62 -0
  342. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/subset_map.cpp +58 -0
  343. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/subset_map.hpp +76 -0
  344. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/to_value.cpp +114 -0
  345. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/to_value.hpp +46 -0
  346. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/units.cpp +505 -0
  347. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/units.hpp +110 -0
  348. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8.h +34 -0
  349. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8/checked.h +336 -0
  350. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8/core.h +332 -0
  351. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8/unchecked.h +235 -0
  352. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8_string.cpp +105 -0
  353. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/utf8_string.hpp +37 -0
  354. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util.cpp +725 -0
  355. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util.hpp +106 -0
  356. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util_string.cpp +75 -0
  357. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/util_string.hpp +19 -0
  358. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/values.cpp +140 -0
  359. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/libsass/src/values.hpp +12 -0
  360. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/listize.o +0 -0
  361. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/node.o +0 -0
  362. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/operators.o +0 -0
  363. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/output.o +0 -0
  364. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/parser.o +0 -0
  365. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/plugins.o +0 -0
  366. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/position.o +0 -0
  367. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/prelexer.o +0 -0
  368. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/remove_placeholders.o +0 -0
  369. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass.o +0 -0
  370. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass2scss.o +0 -0
  371. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_context.o +0 -0
  372. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_functions.o +0 -0
  373. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_util.o +0 -0
  374. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/sass_values.o +0 -0
  375. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/source_map.o +0 -0
  376. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/subset_map.o +0 -0
  377. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/to_value.o +0 -0
  378. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/units.o +0 -0
  379. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/utf8_string.o +0 -0
  380. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/util.o +0 -0
  381. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/util_string.o +0 -0
  382. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/ext/values.o +0 -0
  383. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc.rb +57 -0
  384. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/dependency.rb +17 -0
  385. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/engine.rb +139 -0
  386. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/error.rb +37 -0
  387. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/functions_handler.rb +73 -0
  388. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/import_handler.rb +50 -0
  389. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/importer.rb +31 -0
  390. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/libsass.so +0 -0
  391. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native.rb +62 -0
  392. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/lib_c.rb +21 -0
  393. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/native_context_api.rb +147 -0
  394. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/native_functions_api.rb +159 -0
  395. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass2scss_api.rb +10 -0
  396. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass_input_style.rb +13 -0
  397. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass_output_style.rb +12 -0
  398. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/sass_value.rb +97 -0
  399. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/native/string_list.rb +10 -0
  400. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/sass_2_scss.rb +9 -0
  401. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script.rb +17 -0
  402. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/functions.rb +8 -0
  403. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value.rb +137 -0
  404. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/bool.rb +32 -0
  405. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/color.rb +95 -0
  406. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/list.rb +136 -0
  407. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/map.rb +69 -0
  408. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/number.rb +389 -0
  409. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value/string.rb +96 -0
  410. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion.rb +69 -0
  411. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/base.rb +13 -0
  412. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/bool.rb +13 -0
  413. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/color.rb +18 -0
  414. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/list.rb +25 -0
  415. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/map.rb +21 -0
  416. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/number.rb +13 -0
  417. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/script/value_conversion/string.rb +17 -0
  418. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/util.rb +231 -0
  419. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/util/normalized_map.rb +117 -0
  420. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/lib/sassc/version.rb +5 -0
  421. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/sassc.gemspec +69 -0
  422. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/custom_importer_test.rb +127 -0
  423. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/engine_test.rb +314 -0
  424. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/error_test.rb +29 -0
  425. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/fixtures/paths.scss +10 -0
  426. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/functions_test.rb +323 -0
  427. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/native_test.rb +213 -0
  428. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/output_style_test.rb +107 -0
  429. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/sass_2_scss_test.rb +14 -0
  430. data/vendor/ruby/2.6.0/gems/sassc-2.2.0/test/test_helper.rb +45 -0
  431. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/README.md +533 -0
  432. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk.rb +12 -0
  433. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/error.rb +10 -0
  434. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/explicit_namespace.rb +80 -0
  435. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/gem_inflector.rb +19 -0
  436. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/inflector.rb +19 -0
  437. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/kernel.rb +33 -0
  438. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/loader.rb +759 -0
  439. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/loader/callbacks.rb +71 -0
  440. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/real_mod_name.rb +15 -0
  441. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/registry.rb +147 -0
  442. data/vendor/ruby/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/version.rb +5 -0
  443. data/vendor/ruby/2.6.0/specifications/autoprefixer-rails-9.6.1.1.gemspec +47 -0
  444. data/vendor/ruby/2.6.0/specifications/parser-2.6.4.1.gemspec +62 -0
  445. data/vendor/ruby/2.6.0/specifications/sassc-2.2.0.gemspec +60 -0
  446. data/vendor/ruby/2.6.0/specifications/zeitwerk-2.1.10.gemspec +21 -0
  447. metadata +441 -4
  448. data/vendor/assets/anjuna/css/anjuna-application.css +0 -2
  449. data/vendor/assets/anjuna/css/anjuna-theme.css +0 -2
@@ -0,0 +1,1657 @@
1
+ // sass.hpp must go before all system headers to get the
2
+ // __EXTENSIONS__ fix on Solaris.
3
+ #include "sass.hpp"
4
+
5
+ #include <cstdlib>
6
+ #include <cmath>
7
+ #include <iostream>
8
+ #include <sstream>
9
+ #include <iomanip>
10
+ #include <typeinfo>
11
+
12
+ #include "file.hpp"
13
+ #include "eval.hpp"
14
+ #include "ast.hpp"
15
+ #include "bind.hpp"
16
+ #include "util.hpp"
17
+ #include "inspect.hpp"
18
+ #include "operators.hpp"
19
+ #include "environment.hpp"
20
+ #include "position.hpp"
21
+ #include "sass/values.h"
22
+ #include "to_value.hpp"
23
+ #include "ast2c.hpp"
24
+ #include "c2ast.hpp"
25
+ #include "context.hpp"
26
+ #include "backtrace.hpp"
27
+ #include "lexer.hpp"
28
+ #include "prelexer.hpp"
29
+ #include "parser.hpp"
30
+ #include "expand.hpp"
31
+ #include "color_maps.hpp"
32
+ #include "sass_functions.hpp"
33
+ #include "util_string.hpp"
34
+
35
+ namespace Sass {
36
+
37
+ Eval::Eval(Expand& exp)
38
+ : exp(exp),
39
+ ctx(exp.ctx),
40
+ traces(exp.traces),
41
+ force(false),
42
+ is_in_comment(false),
43
+ is_in_selector_schema(false)
44
+ {
45
+ bool_true = SASS_MEMORY_NEW(Boolean, "[NA]", true);
46
+ bool_false = SASS_MEMORY_NEW(Boolean, "[NA]", false);
47
+ }
48
+ Eval::~Eval() { }
49
+
50
+ Env* Eval::environment()
51
+ {
52
+ return exp.environment();
53
+ }
54
+
55
+ const std::string Eval::cwd()
56
+ {
57
+ return ctx.cwd();
58
+ }
59
+
60
+ struct Sass_Inspect_Options& Eval::options()
61
+ {
62
+ return ctx.c_options;
63
+ }
64
+
65
+ struct Sass_Compiler* Eval::compiler()
66
+ {
67
+ return ctx.c_compiler;
68
+ }
69
+
70
+ EnvStack& Eval::env_stack()
71
+ {
72
+ return exp.env_stack;
73
+ }
74
+
75
+ Selector_List_Obj Eval::selector()
76
+ {
77
+ return exp.selector();
78
+ }
79
+
80
+ std::vector<Sass_Callee>& Eval::callee_stack()
81
+ {
82
+ return ctx.callee_stack;
83
+ }
84
+
85
+
86
+ SelectorStack& Eval::selector_stack()
87
+ {
88
+ return exp.selector_stack;
89
+ }
90
+
91
+ bool& Eval::old_at_root_without_rule()
92
+ {
93
+ return exp.old_at_root_without_rule;
94
+ }
95
+
96
+
97
+ Expression* Eval::operator()(Block* b)
98
+ {
99
+ Expression* val = 0;
100
+ for (size_t i = 0, L = b->length(); i < L; ++i) {
101
+ val = b->at(i)->perform(this);
102
+ if (val) return val;
103
+ }
104
+ return val;
105
+ }
106
+
107
+ Expression* Eval::operator()(Assignment* a)
108
+ {
109
+ Env* env = environment();
110
+ std::string var(a->variable());
111
+ if (a->is_global()) {
112
+ if (a->is_default()) {
113
+ if (env->has_global(var)) {
114
+ Expression* e = Cast<Expression>(env->get_global(var));
115
+ if (!e || e->concrete_type() == Expression::NULL_VAL) {
116
+ env->set_global(var, a->value()->perform(this));
117
+ }
118
+ }
119
+ else {
120
+ env->set_global(var, a->value()->perform(this));
121
+ }
122
+ }
123
+ else {
124
+ env->set_global(var, a->value()->perform(this));
125
+ }
126
+ }
127
+ else if (a->is_default()) {
128
+ if (env->has_lexical(var)) {
129
+ auto cur = env;
130
+ while (cur && cur->is_lexical()) {
131
+ if (cur->has_local(var)) {
132
+ if (AST_Node_Obj node = cur->get_local(var)) {
133
+ Expression* e = Cast<Expression>(node);
134
+ if (!e || e->concrete_type() == Expression::NULL_VAL) {
135
+ cur->set_local(var, a->value()->perform(this));
136
+ }
137
+ }
138
+ else {
139
+ throw std::runtime_error("Env not in sync");
140
+ }
141
+ return 0;
142
+ }
143
+ cur = cur->parent();
144
+ }
145
+ throw std::runtime_error("Env not in sync");
146
+ }
147
+ else if (env->has_global(var)) {
148
+ if (AST_Node_Obj node = env->get_global(var)) {
149
+ Expression* e = Cast<Expression>(node);
150
+ if (!e || e->concrete_type() == Expression::NULL_VAL) {
151
+ env->set_global(var, a->value()->perform(this));
152
+ }
153
+ }
154
+ }
155
+ else if (env->is_lexical()) {
156
+ env->set_local(var, a->value()->perform(this));
157
+ }
158
+ else {
159
+ env->set_local(var, a->value()->perform(this));
160
+ }
161
+ }
162
+ else {
163
+ env->set_lexical(var, a->value()->perform(this));
164
+ }
165
+ return 0;
166
+ }
167
+
168
+ Expression* Eval::operator()(If* i)
169
+ {
170
+ Expression_Obj rv;
171
+ Env env(environment());
172
+ env_stack().push_back(&env);
173
+ Expression_Obj cond = i->predicate()->perform(this);
174
+ if (!cond->is_false()) {
175
+ rv = i->block()->perform(this);
176
+ }
177
+ else {
178
+ Block_Obj alt = i->alternative();
179
+ if (alt) rv = alt->perform(this);
180
+ }
181
+ env_stack().pop_back();
182
+ return rv.detach();
183
+ }
184
+
185
+ // For does not create a new env scope
186
+ // But iteration vars are reset afterwards
187
+ Expression* Eval::operator()(For* f)
188
+ {
189
+ std::string variable(f->variable());
190
+ Expression_Obj low = f->lower_bound()->perform(this);
191
+ if (low->concrete_type() != Expression::NUMBER) {
192
+ traces.push_back(Backtrace(low->pstate()));
193
+ throw Exception::TypeMismatch(traces, *low, "integer");
194
+ }
195
+ Expression_Obj high = f->upper_bound()->perform(this);
196
+ if (high->concrete_type() != Expression::NUMBER) {
197
+ traces.push_back(Backtrace(high->pstate()));
198
+ throw Exception::TypeMismatch(traces, *high, "integer");
199
+ }
200
+ Number_Obj sass_start = Cast<Number>(low);
201
+ Number_Obj sass_end = Cast<Number>(high);
202
+ // check if units are valid for sequence
203
+ if (sass_start->unit() != sass_end->unit()) {
204
+ std::stringstream msg; msg << "Incompatible units: '"
205
+ << sass_end->unit() << "' and '"
206
+ << sass_start->unit() << "'.";
207
+ error(msg.str(), low->pstate(), traces);
208
+ }
209
+ double start = sass_start->value();
210
+ double end = sass_end->value();
211
+ // only create iterator once in this environment
212
+ Env env(environment(), true);
213
+ env_stack().push_back(&env);
214
+ Block_Obj body = f->block();
215
+ Expression* val = 0;
216
+ if (start < end) {
217
+ if (f->is_inclusive()) ++end;
218
+ for (double i = start;
219
+ i < end;
220
+ ++i) {
221
+ Number_Obj it = SASS_MEMORY_NEW(Number, low->pstate(), i, sass_end->unit());
222
+ env.set_local(variable, it);
223
+ val = body->perform(this);
224
+ if (val) break;
225
+ }
226
+ } else {
227
+ if (f->is_inclusive()) --end;
228
+ for (double i = start;
229
+ i > end;
230
+ --i) {
231
+ Number_Obj it = SASS_MEMORY_NEW(Number, low->pstate(), i, sass_end->unit());
232
+ env.set_local(variable, it);
233
+ val = body->perform(this);
234
+ if (val) break;
235
+ }
236
+ }
237
+ env_stack().pop_back();
238
+ return val;
239
+ }
240
+
241
+ // Eval does not create a new env scope
242
+ // But iteration vars are reset afterwards
243
+ Expression* Eval::operator()(Each* e)
244
+ {
245
+ std::vector<std::string> variables(e->variables());
246
+ Expression_Obj expr = e->list()->perform(this);
247
+ Env env(environment(), true);
248
+ env_stack().push_back(&env);
249
+ List_Obj list;
250
+ Map* map = nullptr;
251
+ if (expr->concrete_type() == Expression::MAP) {
252
+ map = Cast<Map>(expr);
253
+ }
254
+ else if (Selector_List* ls = Cast<Selector_List>(expr)) {
255
+ Listize listize;
256
+ Expression_Obj rv = ls->perform(&listize);
257
+ list = Cast<List>(rv);
258
+ }
259
+ else if (expr->concrete_type() != Expression::LIST) {
260
+ list = SASS_MEMORY_NEW(List, expr->pstate(), 1, SASS_COMMA);
261
+ list->append(expr);
262
+ }
263
+ else {
264
+ list = Cast<List>(expr);
265
+ }
266
+
267
+ Block_Obj body = e->block();
268
+ Expression_Obj val;
269
+
270
+ if (map) {
271
+ for (Expression_Obj key : map->keys()) {
272
+ Expression_Obj value = map->at(key);
273
+
274
+ if (variables.size() == 1) {
275
+ List* variable = SASS_MEMORY_NEW(List, map->pstate(), 2, SASS_SPACE);
276
+ variable->append(key);
277
+ variable->append(value);
278
+ env.set_local(variables[0], variable);
279
+ } else {
280
+ env.set_local(variables[0], key);
281
+ env.set_local(variables[1], value);
282
+ }
283
+
284
+ val = body->perform(this);
285
+ if (val) break;
286
+ }
287
+ }
288
+ else {
289
+ if (list->length() == 1 && Cast<Selector_List>(list)) {
290
+ list = Cast<List>(list);
291
+ }
292
+ for (size_t i = 0, L = list->length(); i < L; ++i) {
293
+ Expression* item = list->at(i);
294
+ // unwrap value if the expression is an argument
295
+ if (Argument* arg = Cast<Argument>(item)) item = arg->value();
296
+ // check if we got passed a list of args (investigate)
297
+ if (List* scalars = Cast<List>(item)) {
298
+ if (variables.size() == 1) {
299
+ Expression* var = scalars;
300
+ env.set_local(variables[0], var);
301
+ } else {
302
+ // XXX: this is never hit via spec tests
303
+ for (size_t j = 0, K = variables.size(); j < K; ++j) {
304
+ Expression* res = j >= scalars->length()
305
+ ? SASS_MEMORY_NEW(Null, expr->pstate())
306
+ : scalars->at(j);
307
+ env.set_local(variables[j], res);
308
+ }
309
+ }
310
+ } else {
311
+ if (variables.size() > 0) {
312
+ env.set_local(variables.at(0), item);
313
+ for (size_t j = 1, K = variables.size(); j < K; ++j) {
314
+ // XXX: this is never hit via spec tests
315
+ Expression* res = SASS_MEMORY_NEW(Null, expr->pstate());
316
+ env.set_local(variables[j], res);
317
+ }
318
+ }
319
+ }
320
+ val = body->perform(this);
321
+ if (val) break;
322
+ }
323
+ }
324
+ env_stack().pop_back();
325
+ return val.detach();
326
+ }
327
+
328
+ Expression* Eval::operator()(While* w)
329
+ {
330
+ Expression_Obj pred = w->predicate();
331
+ Block_Obj body = w->block();
332
+ Env env(environment(), true);
333
+ env_stack().push_back(&env);
334
+ Expression_Obj cond = pred->perform(this);
335
+ while (!cond->is_false()) {
336
+ Expression_Obj val = body->perform(this);
337
+ if (val) {
338
+ env_stack().pop_back();
339
+ return val.detach();
340
+ }
341
+ cond = pred->perform(this);
342
+ }
343
+ env_stack().pop_back();
344
+ return 0;
345
+ }
346
+
347
+ Expression* Eval::operator()(Return* r)
348
+ {
349
+ return r->value()->perform(this);
350
+ }
351
+
352
+ Expression* Eval::operator()(Warning* w)
353
+ {
354
+ Sass_Output_Style outstyle = options().output_style;
355
+ options().output_style = NESTED;
356
+ Expression_Obj message = w->message()->perform(this);
357
+ Env* env = environment();
358
+
359
+ // try to use generic function
360
+ if (env->has("@warn[f]")) {
361
+
362
+ // add call stack entry
363
+ callee_stack().push_back({
364
+ "@warn",
365
+ w->pstate().path,
366
+ w->pstate().line + 1,
367
+ w->pstate().column + 1,
368
+ SASS_CALLEE_FUNCTION,
369
+ { env }
370
+ });
371
+
372
+ Definition* def = Cast<Definition>((*env)["@warn[f]"]);
373
+ // Block_Obj body = def->block();
374
+ // Native_Function func = def->native_function();
375
+ Sass_Function_Entry c_function = def->c_function();
376
+ Sass_Function_Fn c_func = sass_function_get_function(c_function);
377
+
378
+ AST2C ast2c;
379
+ union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
380
+ sass_list_set_value(c_args, 0, message->perform(&ast2c));
381
+ union Sass_Value* c_val = c_func(c_args, c_function, compiler());
382
+ options().output_style = outstyle;
383
+ callee_stack().pop_back();
384
+ sass_delete_value(c_args);
385
+ sass_delete_value(c_val);
386
+ return 0;
387
+
388
+ }
389
+
390
+ std::string result(unquote(message->to_sass()));
391
+ std::cerr << "WARNING: " << result << std::endl;
392
+ traces.push_back(Backtrace(w->pstate()));
393
+ std::cerr << traces_to_string(traces, " ");
394
+ std::cerr << std::endl;
395
+ options().output_style = outstyle;
396
+ traces.pop_back();
397
+ return 0;
398
+ }
399
+
400
+ Expression* Eval::operator()(Error* e)
401
+ {
402
+ Sass_Output_Style outstyle = options().output_style;
403
+ options().output_style = NESTED;
404
+ Expression_Obj message = e->message()->perform(this);
405
+ Env* env = environment();
406
+
407
+ // try to use generic function
408
+ if (env->has("@error[f]")) {
409
+
410
+ // add call stack entry
411
+ callee_stack().push_back({
412
+ "@error",
413
+ e->pstate().path,
414
+ e->pstate().line + 1,
415
+ e->pstate().column + 1,
416
+ SASS_CALLEE_FUNCTION,
417
+ { env }
418
+ });
419
+
420
+ Definition* def = Cast<Definition>((*env)["@error[f]"]);
421
+ // Block_Obj body = def->block();
422
+ // Native_Function func = def->native_function();
423
+ Sass_Function_Entry c_function = def->c_function();
424
+ Sass_Function_Fn c_func = sass_function_get_function(c_function);
425
+
426
+ AST2C ast2c;
427
+ union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
428
+ sass_list_set_value(c_args, 0, message->perform(&ast2c));
429
+ union Sass_Value* c_val = c_func(c_args, c_function, compiler());
430
+ options().output_style = outstyle;
431
+ callee_stack().pop_back();
432
+ sass_delete_value(c_args);
433
+ sass_delete_value(c_val);
434
+ return 0;
435
+
436
+ }
437
+
438
+ std::string result(unquote(message->to_sass()));
439
+ options().output_style = outstyle;
440
+ error(result, e->pstate(), traces);
441
+ return 0;
442
+ }
443
+
444
+ Expression* Eval::operator()(Debug* d)
445
+ {
446
+ Sass_Output_Style outstyle = options().output_style;
447
+ options().output_style = NESTED;
448
+ Expression_Obj message = d->value()->perform(this);
449
+ Env* env = environment();
450
+
451
+ // try to use generic function
452
+ if (env->has("@debug[f]")) {
453
+
454
+ // add call stack entry
455
+ callee_stack().push_back({
456
+ "@debug",
457
+ d->pstate().path,
458
+ d->pstate().line + 1,
459
+ d->pstate().column + 1,
460
+ SASS_CALLEE_FUNCTION,
461
+ { env }
462
+ });
463
+
464
+ Definition* def = Cast<Definition>((*env)["@debug[f]"]);
465
+ // Block_Obj body = def->block();
466
+ // Native_Function func = def->native_function();
467
+ Sass_Function_Entry c_function = def->c_function();
468
+ Sass_Function_Fn c_func = sass_function_get_function(c_function);
469
+
470
+ AST2C ast2c;
471
+ union Sass_Value* c_args = sass_make_list(1, SASS_COMMA, false);
472
+ sass_list_set_value(c_args, 0, message->perform(&ast2c));
473
+ union Sass_Value* c_val = c_func(c_args, c_function, compiler());
474
+ options().output_style = outstyle;
475
+ callee_stack().pop_back();
476
+ sass_delete_value(c_args);
477
+ sass_delete_value(c_val);
478
+ return 0;
479
+
480
+ }
481
+
482
+ std::string result(unquote(message->to_sass()));
483
+ std::string abs_path(Sass::File::rel2abs(d->pstate().path, cwd(), cwd()));
484
+ std::string rel_path(Sass::File::abs2rel(d->pstate().path, cwd(), cwd()));
485
+ std::string output_path(Sass::File::path_for_console(rel_path, abs_path, d->pstate().path));
486
+ options().output_style = outstyle;
487
+
488
+ std::cerr << output_path << ":" << d->pstate().line+1 << " DEBUG: " << result;
489
+ std::cerr << std::endl;
490
+ return 0;
491
+ }
492
+
493
+ Expression* Eval::operator()(List* l)
494
+ {
495
+ // special case for unevaluated map
496
+ if (l->separator() == SASS_HASH) {
497
+ Map_Obj lm = SASS_MEMORY_NEW(Map,
498
+ l->pstate(),
499
+ l->length() / 2);
500
+ for (size_t i = 0, L = l->length(); i < L; i += 2)
501
+ {
502
+ Expression_Obj key = (*l)[i+0]->perform(this);
503
+ Expression_Obj val = (*l)[i+1]->perform(this);
504
+ // make sure the color key never displays its real name
505
+ key->is_delayed(true); // verified
506
+ *lm << std::make_pair(key, val);
507
+ }
508
+ if (lm->has_duplicate_key()) {
509
+ traces.push_back(Backtrace(l->pstate()));
510
+ throw Exception::DuplicateKeyError(traces, *lm, *l);
511
+ }
512
+
513
+ lm->is_interpolant(l->is_interpolant());
514
+ return lm->perform(this);
515
+ }
516
+ // check if we should expand it
517
+ if (l->is_expanded()) return l;
518
+ // regular case for unevaluated lists
519
+ List_Obj ll = SASS_MEMORY_NEW(List,
520
+ l->pstate(),
521
+ l->length(),
522
+ l->separator(),
523
+ l->is_arglist(),
524
+ l->is_bracketed());
525
+ for (size_t i = 0, L = l->length(); i < L; ++i) {
526
+ ll->append((*l)[i]->perform(this));
527
+ }
528
+ ll->is_interpolant(l->is_interpolant());
529
+ ll->from_selector(l->from_selector());
530
+ ll->is_expanded(true);
531
+ return ll.detach();
532
+ }
533
+
534
+ Expression* Eval::operator()(Map* m)
535
+ {
536
+ if (m->is_expanded()) return m;
537
+
538
+ // make sure we're not starting with duplicate keys.
539
+ // the duplicate key state will have been set in the parser phase.
540
+ if (m->has_duplicate_key()) {
541
+ traces.push_back(Backtrace(m->pstate()));
542
+ throw Exception::DuplicateKeyError(traces, *m, *m);
543
+ }
544
+
545
+ Map_Obj mm = SASS_MEMORY_NEW(Map,
546
+ m->pstate(),
547
+ m->length());
548
+ for (auto key : m->keys()) {
549
+ Expression* ex_key = key->perform(this);
550
+ Expression* ex_val = m->at(key);
551
+ if (ex_val == NULL) continue;
552
+ ex_val = ex_val->perform(this);
553
+ *mm << std::make_pair(ex_key, ex_val);
554
+ }
555
+
556
+ // check the evaluated keys aren't duplicates.
557
+ if (mm->has_duplicate_key()) {
558
+ traces.push_back(Backtrace(m->pstate()));
559
+ throw Exception::DuplicateKeyError(traces, *mm, *m);
560
+ }
561
+
562
+ mm->is_expanded(true);
563
+ return mm.detach();
564
+ }
565
+
566
+ Expression* Eval::operator()(Binary_Expression* b_in)
567
+ {
568
+
569
+ Expression_Obj lhs = b_in->left();
570
+ Expression_Obj rhs = b_in->right();
571
+ enum Sass_OP op_type = b_in->optype();
572
+
573
+ if (op_type == Sass_OP::AND) {
574
+ // LOCAL_FLAG(force, true);
575
+ lhs = lhs->perform(this);
576
+ if (!*lhs) return lhs.detach();
577
+ return rhs->perform(this);
578
+ }
579
+ else if (op_type == Sass_OP::OR) {
580
+ // LOCAL_FLAG(force, true);
581
+ lhs = lhs->perform(this);
582
+ if (*lhs) return lhs.detach();
583
+ return rhs->perform(this);
584
+ }
585
+
586
+ // Evaluate variables as early o
587
+ while (Variable* l_v = Cast<Variable>(lhs)) {
588
+ lhs = operator()(l_v);
589
+ }
590
+ while (Variable* r_v = Cast<Variable>(rhs)) {
591
+ rhs = operator()(r_v);
592
+ }
593
+
594
+ Binary_Expression_Obj b = b_in;
595
+
596
+ // Evaluate sub-expressions early on
597
+ while (Binary_Expression* l_b = Cast<Binary_Expression>(lhs)) {
598
+ if (!force && l_b->is_delayed()) break;
599
+ lhs = operator()(l_b);
600
+ }
601
+ while (Binary_Expression* r_b = Cast<Binary_Expression>(rhs)) {
602
+ if (!force && r_b->is_delayed()) break;
603
+ rhs = operator()(r_b);
604
+ }
605
+
606
+ // don't eval delayed expressions (the '/' when used as a separator)
607
+ if (!force && op_type == Sass_OP::DIV && b->is_delayed()) {
608
+ b->right(b->right()->perform(this));
609
+ b->left(b->left()->perform(this));
610
+ return b.detach();
611
+ }
612
+
613
+ // specific types we know are final
614
+ // handle them early to avoid overhead
615
+ if (Number* l_n = Cast<Number>(lhs)) {
616
+ // lhs is number and rhs is number
617
+ if (Number* r_n = Cast<Number>(rhs)) {
618
+ try {
619
+ switch (op_type) {
620
+ case Sass_OP::EQ: return *l_n == *r_n ? bool_true : bool_false;
621
+ case Sass_OP::NEQ: return *l_n == *r_n ? bool_false : bool_true;
622
+ case Sass_OP::LT: return *l_n < *r_n ? bool_true : bool_false;
623
+ case Sass_OP::GTE: return *l_n < *r_n ? bool_false : bool_true;
624
+ case Sass_OP::LTE: return *l_n < *r_n || *l_n == *r_n ? bool_true : bool_false;
625
+ case Sass_OP::GT: return *l_n < *r_n || *l_n == *r_n ? bool_false : bool_true;
626
+ case Sass_OP::ADD: case Sass_OP::SUB: case Sass_OP::MUL: case Sass_OP::DIV: case Sass_OP::MOD:
627
+ return Operators::op_numbers(op_type, *l_n, *r_n, options(), b_in->pstate());
628
+ default: break;
629
+ }
630
+ }
631
+ catch (Exception::OperationError& err)
632
+ {
633
+ traces.push_back(Backtrace(b_in->pstate()));
634
+ throw Exception::SassValueError(traces, b_in->pstate(), err);
635
+ }
636
+ }
637
+ // lhs is number and rhs is color
638
+ // Todo: allow to work with HSLA colors
639
+ else if (Color* r_col = Cast<Color>(rhs)) {
640
+ Color_RGBA_Obj r_c = r_col->toRGBA();
641
+ try {
642
+ switch (op_type) {
643
+ case Sass_OP::EQ: return *l_n == *r_c ? bool_true : bool_false;
644
+ case Sass_OP::NEQ: return *l_n == *r_c ? bool_false : bool_true;
645
+ case Sass_OP::ADD: case Sass_OP::SUB: case Sass_OP::MUL: case Sass_OP::DIV: case Sass_OP::MOD:
646
+ return Operators::op_number_color(op_type, *l_n, *r_c, options(), b_in->pstate());
647
+ default: break;
648
+ }
649
+ }
650
+ catch (Exception::OperationError& err)
651
+ {
652
+ traces.push_back(Backtrace(b_in->pstate()));
653
+ throw Exception::SassValueError(traces, b_in->pstate(), err);
654
+ }
655
+ }
656
+ }
657
+ else if (Color* l_col = Cast<Color>(lhs)) {
658
+ Color_RGBA_Obj l_c = l_col->toRGBA();
659
+ // lhs is color and rhs is color
660
+ if (Color* r_col = Cast<Color>(rhs)) {
661
+ Color_RGBA_Obj r_c = r_col->toRGBA();
662
+ try {
663
+ switch (op_type) {
664
+ case Sass_OP::EQ: return *l_c == *r_c ? bool_true : bool_false;
665
+ case Sass_OP::NEQ: return *l_c == *r_c ? bool_false : bool_true;
666
+ case Sass_OP::LT: return *l_c < *r_c ? bool_true : bool_false;
667
+ case Sass_OP::GTE: return *l_c < *r_c ? bool_false : bool_true;
668
+ case Sass_OP::LTE: return *l_c < *r_c || *l_c == *r_c ? bool_true : bool_false;
669
+ case Sass_OP::GT: return *l_c < *r_c || *l_c == *r_c ? bool_false : bool_true;
670
+ case Sass_OP::ADD: case Sass_OP::SUB: case Sass_OP::MUL: case Sass_OP::DIV: case Sass_OP::MOD:
671
+ return Operators::op_colors(op_type, *l_c, *r_c, options(), b_in->pstate());
672
+ default: break;
673
+ }
674
+ }
675
+ catch (Exception::OperationError& err)
676
+ {
677
+ traces.push_back(Backtrace(b_in->pstate()));
678
+ throw Exception::SassValueError(traces, b_in->pstate(), err);
679
+ }
680
+ }
681
+ // lhs is color and rhs is number
682
+ else if (Number* r_n = Cast<Number>(rhs)) {
683
+ try {
684
+ switch (op_type) {
685
+ case Sass_OP::EQ: return *l_c == *r_n ? bool_true : bool_false;
686
+ case Sass_OP::NEQ: return *l_c == *r_n ? bool_false : bool_true;
687
+ case Sass_OP::ADD: case Sass_OP::SUB: case Sass_OP::MUL: case Sass_OP::DIV: case Sass_OP::MOD:
688
+ return Operators::op_color_number(op_type, *l_c, *r_n, options(), b_in->pstate());
689
+ default: break;
690
+ }
691
+ }
692
+ catch (Exception::OperationError& err)
693
+ {
694
+ traces.push_back(Backtrace(b_in->pstate()));
695
+ throw Exception::SassValueError(traces, b_in->pstate(), err);
696
+ }
697
+ }
698
+ }
699
+
700
+ String_Schema_Obj ret_schema;
701
+
702
+ // only the last item will be used to eval the binary expression
703
+ if (String_Schema* s_l = Cast<String_Schema>(b->left())) {
704
+ if (!s_l->has_interpolant() && (!s_l->is_right_interpolant())) {
705
+ ret_schema = SASS_MEMORY_NEW(String_Schema, b->pstate());
706
+ Binary_Expression_Obj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
707
+ b->op(), s_l->last(), b->right());
708
+ bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // unverified
709
+ for (size_t i = 0; i < s_l->length() - 1; ++i) {
710
+ ret_schema->append(Cast<PreValue>(s_l->at(i)->perform(this)));
711
+ }
712
+ ret_schema->append(Cast<PreValue>(bin_ex->perform(this)));
713
+ return ret_schema->perform(this);
714
+ }
715
+ }
716
+ if (String_Schema* s_r = Cast<String_Schema>(b->right())) {
717
+
718
+ if (!s_r->has_interpolant() && (!s_r->is_left_interpolant() || op_type == Sass_OP::DIV)) {
719
+ ret_schema = SASS_MEMORY_NEW(String_Schema, b->pstate());
720
+ Binary_Expression_Obj bin_ex = SASS_MEMORY_NEW(Binary_Expression, b->pstate(),
721
+ b->op(), b->left(), s_r->first());
722
+ bin_ex->is_delayed(b->left()->is_delayed() || b->right()->is_delayed()); // verified
723
+ ret_schema->append(Cast<PreValue>(bin_ex->perform(this)));
724
+ for (size_t i = 1; i < s_r->length(); ++i) {
725
+ ret_schema->append(Cast<PreValue>(s_r->at(i)->perform(this)));
726
+ }
727
+ return ret_schema->perform(this);
728
+ }
729
+ }
730
+
731
+ // fully evaluate their values
732
+ if (op_type == Sass_OP::EQ ||
733
+ op_type == Sass_OP::NEQ ||
734
+ op_type == Sass_OP::GT ||
735
+ op_type == Sass_OP::GTE ||
736
+ op_type == Sass_OP::LT ||
737
+ op_type == Sass_OP::LTE)
738
+ {
739
+ LOCAL_FLAG(force, true);
740
+ lhs->is_expanded(false);
741
+ lhs->set_delayed(false);
742
+ lhs = lhs->perform(this);
743
+ rhs->is_expanded(false);
744
+ rhs->set_delayed(false);
745
+ rhs = rhs->perform(this);
746
+ }
747
+ else {
748
+ lhs = lhs->perform(this);
749
+ }
750
+
751
+ // not a logical connective, so go ahead and eval the rhs
752
+ rhs = rhs->perform(this);
753
+ AST_Node_Obj lu = lhs;
754
+ AST_Node_Obj ru = rhs;
755
+
756
+ Expression::Type l_type;
757
+ Expression::Type r_type;
758
+
759
+ // Is one of the operands an interpolant?
760
+ String_Schema_Obj s1 = Cast<String_Schema>(b->left());
761
+ String_Schema_Obj s2 = Cast<String_Schema>(b->right());
762
+ Binary_Expression_Obj b1 = Cast<Binary_Expression>(b->left());
763
+ Binary_Expression_Obj b2 = Cast<Binary_Expression>(b->right());
764
+
765
+ bool schema_op = false;
766
+
767
+ bool force_delay = (s2 && s2->is_left_interpolant()) ||
768
+ (s1 && s1->is_right_interpolant()) ||
769
+ (b1 && b1->is_right_interpolant()) ||
770
+ (b2 && b2->is_left_interpolant());
771
+
772
+ if ((s1 && s1->has_interpolants()) || (s2 && s2->has_interpolants()) || force_delay)
773
+ {
774
+ if (op_type == Sass_OP::DIV || op_type == Sass_OP::MUL || op_type == Sass_OP::MOD || op_type == Sass_OP::ADD || op_type == Sass_OP::SUB ||
775
+ op_type == Sass_OP::EQ) {
776
+ // If possible upgrade LHS to a number (for number to string compare)
777
+ if (String_Constant* str = Cast<String_Constant>(lhs)) {
778
+ std::string value(str->value());
779
+ const char* start = value.c_str();
780
+ if (Prelexer::sequence < Prelexer::dimension, Prelexer::end_of_file >(start) != 0) {
781
+ lhs = Parser::lexed_dimension(b->pstate(), str->value());
782
+ }
783
+ }
784
+ // If possible upgrade RHS to a number (for string to number compare)
785
+ if (String_Constant* str = Cast<String_Constant>(rhs)) {
786
+ std::string value(str->value());
787
+ const char* start = value.c_str();
788
+ if (Prelexer::sequence < Prelexer::dimension, Prelexer::number >(start) != 0) {
789
+ rhs = Parser::lexed_dimension(b->pstate(), str->value());
790
+ }
791
+ }
792
+ }
793
+
794
+ To_Value to_value(ctx);
795
+ Value_Obj v_l = Cast<Value>(lhs->perform(&to_value));
796
+ Value_Obj v_r = Cast<Value>(rhs->perform(&to_value));
797
+
798
+ if (force_delay) {
799
+ std::string str("");
800
+ str += v_l->to_string(options());
801
+ if (b->op().ws_before) str += " ";
802
+ str += b->separator();
803
+ if (b->op().ws_after) str += " ";
804
+ str += v_r->to_string(options());
805
+ String_Constant* val = SASS_MEMORY_NEW(String_Constant, b->pstate(), str);
806
+ val->is_interpolant(b->left()->has_interpolant());
807
+ return val;
808
+ }
809
+ }
810
+
811
+ // see if it's a relational expression
812
+ try {
813
+ switch(op_type) {
814
+ case Sass_OP::EQ: return SASS_MEMORY_NEW(Boolean, b->pstate(), Operators::eq(lhs, rhs));
815
+ case Sass_OP::NEQ: return SASS_MEMORY_NEW(Boolean, b->pstate(), Operators::neq(lhs, rhs));
816
+ case Sass_OP::GT: return SASS_MEMORY_NEW(Boolean, b->pstate(), Operators::gt(lhs, rhs));
817
+ case Sass_OP::GTE: return SASS_MEMORY_NEW(Boolean, b->pstate(), Operators::gte(lhs, rhs));
818
+ case Sass_OP::LT: return SASS_MEMORY_NEW(Boolean, b->pstate(), Operators::lt(lhs, rhs));
819
+ case Sass_OP::LTE: return SASS_MEMORY_NEW(Boolean, b->pstate(), Operators::lte(lhs, rhs));
820
+ default: break;
821
+ }
822
+ }
823
+ catch (Exception::OperationError& err)
824
+ {
825
+ traces.push_back(Backtrace(b->pstate()));
826
+ throw Exception::SassValueError(traces, b->pstate(), err);
827
+ }
828
+
829
+ l_type = lhs->concrete_type();
830
+ r_type = rhs->concrete_type();
831
+
832
+ // ToDo: throw error in op functions
833
+ // ToDo: then catch and re-throw them
834
+ Expression_Obj rv;
835
+ try {
836
+ ParserState pstate(b->pstate());
837
+ if (l_type == Expression::NUMBER && r_type == Expression::NUMBER) {
838
+ Number* l_n = Cast<Number>(lhs);
839
+ Number* r_n = Cast<Number>(rhs);
840
+ l_n->reduce(); r_n->reduce();
841
+ rv = Operators::op_numbers(op_type, *l_n, *r_n, options(), pstate);
842
+ }
843
+ else if (l_type == Expression::NUMBER && r_type == Expression::COLOR) {
844
+ Number* l_n = Cast<Number>(lhs);
845
+ Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
846
+ rv = Operators::op_number_color(op_type, *l_n, *r_c, options(), pstate);
847
+ }
848
+ else if (l_type == Expression::COLOR && r_type == Expression::NUMBER) {
849
+ Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
850
+ Number* r_n = Cast<Number>(rhs);
851
+ rv = Operators::op_color_number(op_type, *l_c, *r_n, options(), pstate);
852
+ }
853
+ else if (l_type == Expression::COLOR && r_type == Expression::COLOR) {
854
+ Color_RGBA_Obj l_c = Cast<Color>(lhs)->toRGBA();
855
+ Color_RGBA_Obj r_c = Cast<Color>(rhs)->toRGBA();
856
+ rv = Operators::op_colors(op_type, *l_c, *r_c, options(), pstate);
857
+ }
858
+ else {
859
+ To_Value to_value(ctx);
860
+ // this will leak if perform does not return a value!
861
+ Value_Obj v_l = Cast<Value>(lhs->perform(&to_value));
862
+ Value_Obj v_r = Cast<Value>(rhs->perform(&to_value));
863
+ bool interpolant = b->is_right_interpolant() ||
864
+ b->is_left_interpolant() ||
865
+ b->is_interpolant();
866
+ if (op_type == Sass_OP::SUB) interpolant = false;
867
+ // if (op_type == Sass_OP::DIV) interpolant = true;
868
+ // check for type violations
869
+ if (l_type == Expression::MAP || l_type == Expression::FUNCTION_VAL) {
870
+ traces.push_back(Backtrace(v_l->pstate()));
871
+ throw Exception::InvalidValue(traces, *v_l);
872
+ }
873
+ if (r_type == Expression::MAP || l_type == Expression::FUNCTION_VAL) {
874
+ traces.push_back(Backtrace(v_r->pstate()));
875
+ throw Exception::InvalidValue(traces, *v_r);
876
+ }
877
+ Value* ex = Operators::op_strings(b->op(), *v_l, *v_r, options(), pstate, !interpolant); // pass true to compress
878
+ if (String_Constant* str = Cast<String_Constant>(ex))
879
+ {
880
+ if (str->concrete_type() == Expression::STRING)
881
+ {
882
+ String_Constant* lstr = Cast<String_Constant>(lhs);
883
+ String_Constant* rstr = Cast<String_Constant>(rhs);
884
+ if (op_type != Sass_OP::SUB) {
885
+ if (String_Constant* org = lstr ? lstr : rstr)
886
+ { str->quote_mark(org->quote_mark()); }
887
+ }
888
+ }
889
+ }
890
+ ex->is_interpolant(b->is_interpolant());
891
+ rv = ex;
892
+ }
893
+ }
894
+ catch (Exception::OperationError& err)
895
+ {
896
+ traces.push_back(Backtrace(b->pstate()));
897
+ // throw Exception::Base(b->pstate(), err.what());
898
+ throw Exception::SassValueError(traces, b->pstate(), err);
899
+ }
900
+
901
+ if (rv) {
902
+ if (schema_op) {
903
+ // XXX: this is never hit via spec tests
904
+ (*s2)[0] = rv;
905
+ rv = s2->perform(this);
906
+ }
907
+ }
908
+
909
+ return rv.detach();
910
+
911
+ }
912
+
913
+ Expression* Eval::operator()(Unary_Expression* u)
914
+ {
915
+ Expression_Obj operand = u->operand()->perform(this);
916
+ if (u->optype() == Unary_Expression::NOT) {
917
+ Boolean* result = SASS_MEMORY_NEW(Boolean, u->pstate(), (bool)*operand);
918
+ result->value(!result->value());
919
+ return result;
920
+ }
921
+ else if (Number_Obj nr = Cast<Number>(operand)) {
922
+ // negate value for minus unary expression
923
+ if (u->optype() == Unary_Expression::MINUS) {
924
+ Number_Obj cpy = SASS_MEMORY_COPY(nr);
925
+ cpy->value( - cpy->value() ); // negate value
926
+ return cpy.detach(); // return the copy
927
+ }
928
+ else if (u->optype() == Unary_Expression::SLASH) {
929
+ std::string str = '/' + nr->to_string(options());
930
+ return SASS_MEMORY_NEW(String_Constant, u->pstate(), str);
931
+ }
932
+ // nothing for positive
933
+ return nr.detach();
934
+ }
935
+ else {
936
+ // Special cases: +/- variables which evaluate to null ouput just +/-,
937
+ // but +/- null itself outputs the string
938
+ if (operand->concrete_type() == Expression::NULL_VAL && Cast<Variable>(u->operand())) {
939
+ u->operand(SASS_MEMORY_NEW(String_Quoted, u->pstate(), ""));
940
+ }
941
+ // Never apply unary opertions on colors @see #2140
942
+ else if (Color* color = Cast<Color>(operand)) {
943
+ // Use the color name if this was eval with one
944
+ if (color->disp().length() > 0) {
945
+ operand = SASS_MEMORY_NEW(String_Constant, operand->pstate(), color->disp());
946
+ u->operand(operand);
947
+ }
948
+ }
949
+ else {
950
+ u->operand(operand);
951
+ }
952
+
953
+ return SASS_MEMORY_NEW(String_Quoted,
954
+ u->pstate(),
955
+ u->inspect());
956
+ }
957
+ // unreachable
958
+ return u;
959
+ }
960
+
961
+ Expression* Eval::operator()(Function_Call* c)
962
+ {
963
+ if (traces.size() > Constants::MaxCallStack) {
964
+ // XXX: this is never hit via spec tests
965
+ std::ostringstream stm;
966
+ stm << "Stack depth exceeded max of " << Constants::MaxCallStack;
967
+ error(stm.str(), c->pstate(), traces);
968
+ }
969
+
970
+ if (Cast<String_Schema>(c->sname())) {
971
+ Expression_Obj evaluated_name = c->sname()->perform(this);
972
+ Expression_Obj evaluated_args = c->arguments()->perform(this);
973
+ std::string str(evaluated_name->to_string());
974
+ str += evaluated_args->to_string();
975
+ return SASS_MEMORY_NEW(String_Constant, c->pstate(), str);
976
+ }
977
+
978
+ std::string name(Util::normalize_underscores(c->name()));
979
+ std::string full_name(name + "[f]");
980
+
981
+ // we make a clone here, need to implement that further
982
+ Arguments_Obj args = c->arguments();
983
+
984
+ Env* env = environment();
985
+ if (!env->has(full_name) || (!c->via_call() && Prelexer::re_special_fun(name.c_str()))) {
986
+ if (!env->has("*[f]")) {
987
+ for (Argument_Obj arg : args->elements()) {
988
+ if (List_Obj ls = Cast<List>(arg->value())) {
989
+ if (ls->size() == 0) error("() isn't a valid CSS value.", c->pstate(), traces);
990
+ }
991
+ }
992
+ args = Cast<Arguments>(args->perform(this));
993
+ Function_Call_Obj lit = SASS_MEMORY_NEW(Function_Call,
994
+ c->pstate(),
995
+ c->name(),
996
+ args);
997
+ if (args->has_named_arguments()) {
998
+ error("Function " + c->name() + " doesn't support keyword arguments", c->pstate(), traces);
999
+ }
1000
+ String_Quoted* str = SASS_MEMORY_NEW(String_Quoted,
1001
+ c->pstate(),
1002
+ lit->to_string(options()));
1003
+ str->is_interpolant(c->is_interpolant());
1004
+ return str;
1005
+ } else {
1006
+ // call generic function
1007
+ full_name = "*[f]";
1008
+ }
1009
+ }
1010
+
1011
+ // further delay for calls
1012
+ if (full_name != "call[f]") {
1013
+ args->set_delayed(false); // verified
1014
+ }
1015
+ if (full_name != "if[f]") {
1016
+ args = Cast<Arguments>(args->perform(this));
1017
+ }
1018
+ Definition* def = Cast<Definition>((*env)[full_name]);
1019
+
1020
+ if (c->func()) def = c->func()->definition();
1021
+
1022
+ if (def->is_overload_stub()) {
1023
+ std::stringstream ss;
1024
+ size_t L = args->length();
1025
+ // account for rest arguments
1026
+ if (args->has_rest_argument() && args->length() > 0) {
1027
+ // get the rest arguments list
1028
+ List* rest = Cast<List>(args->last()->value());
1029
+ // arguments before rest argument plus rest
1030
+ if (rest) L += rest->length() - 1;
1031
+ }
1032
+ ss << full_name << L;
1033
+ full_name = ss.str();
1034
+ std::string resolved_name(full_name);
1035
+ if (!env->has(resolved_name)) error("overloaded function `" + std::string(c->name()) + "` given wrong number of arguments", c->pstate(), traces);
1036
+ def = Cast<Definition>((*env)[resolved_name]);
1037
+ }
1038
+
1039
+ Expression_Obj result = c;
1040
+ Block_Obj body = def->block();
1041
+ Native_Function func = def->native_function();
1042
+ Sass_Function_Entry c_function = def->c_function();
1043
+
1044
+ if (c->is_css()) return result.detach();
1045
+
1046
+ Parameters_Obj params = def->parameters();
1047
+ Env fn_env(def->environment());
1048
+ env_stack().push_back(&fn_env);
1049
+
1050
+ if (func || body) {
1051
+ bind(std::string("Function"), c->name(), params, args, &fn_env, this, traces);
1052
+ std::string msg(", in function `" + c->name() + "`");
1053
+ traces.push_back(Backtrace(c->pstate(), msg));
1054
+ callee_stack().push_back({
1055
+ c->name().c_str(),
1056
+ c->pstate().path,
1057
+ c->pstate().line + 1,
1058
+ c->pstate().column + 1,
1059
+ SASS_CALLEE_FUNCTION,
1060
+ { env }
1061
+ });
1062
+
1063
+ // eval the body if user-defined or special, invoke underlying CPP function if native
1064
+ if (body /* && !Prelexer::re_special_fun(name.c_str()) */) {
1065
+ result = body->perform(this);
1066
+ }
1067
+ else if (func) {
1068
+ result = func(fn_env, *env, ctx, def->signature(), c->pstate(), traces, exp.selector_stack);
1069
+ }
1070
+ if (!result) {
1071
+ error(std::string("Function ") + c->name() + " finished without @return", c->pstate(), traces);
1072
+ }
1073
+ callee_stack().pop_back();
1074
+ traces.pop_back();
1075
+ }
1076
+
1077
+ // else if it's a user-defined c function
1078
+ // convert call into C-API compatible form
1079
+ else if (c_function) {
1080
+ Sass_Function_Fn c_func = sass_function_get_function(c_function);
1081
+ if (full_name == "*[f]") {
1082
+ String_Quoted_Obj str = SASS_MEMORY_NEW(String_Quoted, c->pstate(), c->name());
1083
+ Arguments_Obj new_args = SASS_MEMORY_NEW(Arguments, c->pstate());
1084
+ new_args->append(SASS_MEMORY_NEW(Argument, c->pstate(), str));
1085
+ new_args->concat(args);
1086
+ args = new_args;
1087
+ }
1088
+
1089
+ // populates env with default values for params
1090
+ std::string ff(c->name());
1091
+ bind(std::string("Function"), c->name(), params, args, &fn_env, this, traces);
1092
+ std::string msg(", in function `" + c->name() + "`");
1093
+ traces.push_back(Backtrace(c->pstate(), msg));
1094
+ callee_stack().push_back({
1095
+ c->name().c_str(),
1096
+ c->pstate().path,
1097
+ c->pstate().line + 1,
1098
+ c->pstate().column + 1,
1099
+ SASS_CALLEE_C_FUNCTION,
1100
+ { env }
1101
+ });
1102
+
1103
+ AST2C ast2c;
1104
+ union Sass_Value* c_args = sass_make_list(params->length(), SASS_COMMA, false);
1105
+ for(size_t i = 0; i < params->length(); i++) {
1106
+ Parameter_Obj param = params->at(i);
1107
+ std::string key = param->name();
1108
+ AST_Node_Obj node = fn_env.get_local(key);
1109
+ Expression_Obj arg = Cast<Expression>(node);
1110
+ sass_list_set_value(c_args, i, arg->perform(&ast2c));
1111
+ }
1112
+ union Sass_Value* c_val = c_func(c_args, c_function, compiler());
1113
+ if (sass_value_get_tag(c_val) == SASS_ERROR) {
1114
+ std::string message("error in C function " + c->name() + ": " + sass_error_get_message(c_val));
1115
+ sass_delete_value(c_val);
1116
+ sass_delete_value(c_args);
1117
+ error(message, c->pstate(), traces);
1118
+ } else if (sass_value_get_tag(c_val) == SASS_WARNING) {
1119
+ std::string message("warning in C function " + c->name() + ": " + sass_warning_get_message(c_val));
1120
+ sass_delete_value(c_val);
1121
+ sass_delete_value(c_args);
1122
+ error(message, c->pstate(), traces);
1123
+ }
1124
+ result = c2ast(c_val, traces, c->pstate());
1125
+
1126
+ callee_stack().pop_back();
1127
+ traces.pop_back();
1128
+ sass_delete_value(c_args);
1129
+ if (c_val != c_args)
1130
+ sass_delete_value(c_val);
1131
+ }
1132
+
1133
+ // link back to function definition
1134
+ // only do this for custom functions
1135
+ if (result->pstate().file == std::string::npos)
1136
+ result->pstate(c->pstate());
1137
+
1138
+ result = result->perform(this);
1139
+ result->is_interpolant(c->is_interpolant());
1140
+ env_stack().pop_back();
1141
+ return result.detach();
1142
+ }
1143
+
1144
+ Expression* Eval::operator()(Variable* v)
1145
+ {
1146
+ Expression_Obj value;
1147
+ Env* env = environment();
1148
+ const std::string& name(v->name());
1149
+ EnvResult rv(env->find(name));
1150
+ if (rv.found) value = static_cast<Expression*>(rv.it->second.ptr());
1151
+ else error("Undefined variable: \"" + v->name() + "\".", v->pstate(), traces);
1152
+ if (Argument* arg = Cast<Argument>(value)) value = arg->value();
1153
+ if (Number* nr = Cast<Number>(value)) nr->zero(true); // force flag
1154
+ value->is_interpolant(v->is_interpolant());
1155
+ if (force) value->is_expanded(false);
1156
+ value->set_delayed(false); // verified
1157
+ value = value->perform(this);
1158
+ if(!force) rv.it->second = value;
1159
+ return value.detach();
1160
+ }
1161
+
1162
+ Expression* Eval::operator()(Color_RGBA* c)
1163
+ {
1164
+ return c;
1165
+ }
1166
+
1167
+ Expression* Eval::operator()(Color_HSLA* c)
1168
+ {
1169
+ return c;
1170
+ }
1171
+
1172
+ Expression* Eval::operator()(Number* n)
1173
+ {
1174
+ return n;
1175
+ }
1176
+
1177
+ Expression* Eval::operator()(Boolean* b)
1178
+ {
1179
+ return b;
1180
+ }
1181
+
1182
+ void Eval::interpolation(Context& ctx, std::string& res, Expression_Obj ex, bool into_quotes, bool was_itpl) {
1183
+
1184
+ bool needs_closing_brace = false;
1185
+
1186
+ if (Arguments* args = Cast<Arguments>(ex)) {
1187
+ List* ll = SASS_MEMORY_NEW(List, args->pstate(), 0, SASS_COMMA);
1188
+ for(auto arg : args->elements()) {
1189
+ ll->append(arg->value());
1190
+ }
1191
+ ll->is_interpolant(args->is_interpolant());
1192
+ needs_closing_brace = true;
1193
+ res += "(";
1194
+ ex = ll;
1195
+ }
1196
+ if (Number* nr = Cast<Number>(ex)) {
1197
+ Number reduced(nr);
1198
+ reduced.reduce();
1199
+ if (!reduced.is_valid_css_unit()) {
1200
+ traces.push_back(Backtrace(nr->pstate()));
1201
+ throw Exception::InvalidValue(traces, *nr);
1202
+ }
1203
+ }
1204
+ if (Argument* arg = Cast<Argument>(ex)) {
1205
+ ex = arg->value();
1206
+ }
1207
+ if (String_Quoted* sq = Cast<String_Quoted>(ex)) {
1208
+ if (was_itpl) {
1209
+ bool was_interpolant = ex->is_interpolant();
1210
+ ex = SASS_MEMORY_NEW(String_Constant, sq->pstate(), sq->value());
1211
+ ex->is_interpolant(was_interpolant);
1212
+ }
1213
+ }
1214
+
1215
+ if (Cast<Null>(ex)) { return; }
1216
+
1217
+ // parent selector needs another go
1218
+ if (Cast<Parent_Selector>(ex)) {
1219
+ // XXX: this is never hit via spec tests
1220
+ ex = ex->perform(this);
1221
+ }
1222
+ // parent selector needs another go
1223
+ if (Cast<Parent_Reference>(ex)) {
1224
+ // XXX: this is never hit via spec tests
1225
+ ex = ex->perform(this);
1226
+ }
1227
+
1228
+ if (List* l = Cast<List>(ex)) {
1229
+ List_Obj ll = SASS_MEMORY_NEW(List, l->pstate(), 0, l->separator());
1230
+ // this fixes an issue with bourbon sample, not really sure why
1231
+ // if (l->size() && Cast<Null>((*l)[0])) { res += ""; }
1232
+ for(Expression_Obj item : *l) {
1233
+ item->is_interpolant(l->is_interpolant());
1234
+ std::string rl(""); interpolation(ctx, rl, item, into_quotes, l->is_interpolant());
1235
+ bool is_null = Cast<Null>(item) != 0; // rl != ""
1236
+ if (!is_null) ll->append(SASS_MEMORY_NEW(String_Quoted, item->pstate(), rl));
1237
+ }
1238
+ // Check indicates that we probably should not get a list
1239
+ // here. Normally single list items are already unwrapped.
1240
+ if (l->size() > 1) {
1241
+ // string_to_output would fail "#{'_\a' '_\a'}";
1242
+ std::string str(ll->to_string(options()));
1243
+ str = read_hex_escapes(str); // read escapes
1244
+ newline_to_space(str); // replace directly
1245
+ res += str; // append to result string
1246
+ } else {
1247
+ res += (ll->to_string(options()));
1248
+ }
1249
+ ll->is_interpolant(l->is_interpolant());
1250
+ }
1251
+
1252
+ // Value
1253
+ // Function_Call
1254
+ // Selector_List
1255
+ // String_Quoted
1256
+ // String_Constant
1257
+ // Parent_Selector
1258
+ // Binary_Expression
1259
+ else {
1260
+ // ex = ex->perform(this);
1261
+ if (into_quotes && ex->is_interpolant()) {
1262
+ res += evacuate_escapes(ex ? ex->to_string(options()) : "");
1263
+ } else {
1264
+ std::string str(ex ? ex->to_string(options()) : "");
1265
+ if (into_quotes) str = read_hex_escapes(str);
1266
+ res += str; // append to result string
1267
+ }
1268
+ }
1269
+
1270
+ if (needs_closing_brace) res += ")";
1271
+
1272
+ }
1273
+
1274
+ Expression* Eval::operator()(String_Schema* s)
1275
+ {
1276
+ size_t L = s->length();
1277
+ bool into_quotes = false;
1278
+ if (L > 1) {
1279
+ if (!Cast<String_Quoted>((*s)[0]) && !Cast<String_Quoted>((*s)[L - 1])) {
1280
+ if (String_Constant* l = Cast<String_Constant>((*s)[0])) {
1281
+ if (String_Constant* r = Cast<String_Constant>((*s)[L - 1])) {
1282
+ if (r->value().size() > 0) {
1283
+ if (l->value()[0] == '"' && r->value()[r->value().size() - 1] == '"') into_quotes = true;
1284
+ if (l->value()[0] == '\'' && r->value()[r->value().size() - 1] == '\'') into_quotes = true;
1285
+ }
1286
+ }
1287
+ }
1288
+ }
1289
+ }
1290
+ bool was_quoted = false;
1291
+ bool was_interpolant = false;
1292
+ std::string res("");
1293
+ for (size_t i = 0; i < L; ++i) {
1294
+ bool is_quoted = Cast<String_Quoted>((*s)[i]) != NULL;
1295
+ if (was_quoted && !(*s)[i]->is_interpolant() && !was_interpolant) { res += " "; }
1296
+ else if (i > 0 && is_quoted && !(*s)[i]->is_interpolant() && !was_interpolant) { res += " "; }
1297
+ Expression_Obj ex = (*s)[i]->perform(this);
1298
+ interpolation(ctx, res, ex, into_quotes, ex->is_interpolant());
1299
+ was_quoted = Cast<String_Quoted>((*s)[i]) != NULL;
1300
+ was_interpolant = (*s)[i]->is_interpolant();
1301
+
1302
+ }
1303
+ if (!s->is_interpolant()) {
1304
+ if (s->length() > 1 && res == "") return SASS_MEMORY_NEW(Null, s->pstate());
1305
+ return SASS_MEMORY_NEW(String_Constant, s->pstate(), res, s->css());
1306
+ }
1307
+ // string schema seems to have a special unquoting behavior (also handles "nested" quotes)
1308
+ String_Quoted_Obj str = SASS_MEMORY_NEW(String_Quoted, s->pstate(), res, 0, false, false, false, s->css());
1309
+ // if (s->is_interpolant()) str->quote_mark(0);
1310
+ // String_Constant* str = SASS_MEMORY_NEW(String_Constant, s->pstate(), res);
1311
+ if (str->quote_mark()) str->quote_mark('*');
1312
+ else if (!is_in_comment) str->value(string_to_output(str->value()));
1313
+ str->is_interpolant(s->is_interpolant());
1314
+ return str.detach();
1315
+ }
1316
+
1317
+
1318
+ Expression* Eval::operator()(String_Constant* s)
1319
+ {
1320
+ return s;
1321
+ }
1322
+
1323
+ Expression* Eval::operator()(String_Quoted* s)
1324
+ {
1325
+ String_Quoted* str = SASS_MEMORY_NEW(String_Quoted, s->pstate(), "");
1326
+ str->value(s->value());
1327
+ str->quote_mark(s->quote_mark());
1328
+ str->is_interpolant(s->is_interpolant());
1329
+ return str;
1330
+ }
1331
+
1332
+ Expression* Eval::operator()(Supports_Operator* c)
1333
+ {
1334
+ Expression* left = c->left()->perform(this);
1335
+ Expression* right = c->right()->perform(this);
1336
+ Supports_Operator* cc = SASS_MEMORY_NEW(Supports_Operator,
1337
+ c->pstate(),
1338
+ Cast<Supports_Condition>(left),
1339
+ Cast<Supports_Condition>(right),
1340
+ c->operand());
1341
+ return cc;
1342
+ }
1343
+
1344
+ Expression* Eval::operator()(Supports_Negation* c)
1345
+ {
1346
+ Expression* condition = c->condition()->perform(this);
1347
+ Supports_Negation* cc = SASS_MEMORY_NEW(Supports_Negation,
1348
+ c->pstate(),
1349
+ Cast<Supports_Condition>(condition));
1350
+ return cc;
1351
+ }
1352
+
1353
+ Expression* Eval::operator()(Supports_Declaration* c)
1354
+ {
1355
+ Expression* feature = c->feature()->perform(this);
1356
+ Expression* value = c->value()->perform(this);
1357
+ Supports_Declaration* cc = SASS_MEMORY_NEW(Supports_Declaration,
1358
+ c->pstate(),
1359
+ feature,
1360
+ value);
1361
+ return cc;
1362
+ }
1363
+
1364
+ Expression* Eval::operator()(Supports_Interpolation* c)
1365
+ {
1366
+ Expression* value = c->value()->perform(this);
1367
+ Supports_Interpolation* cc = SASS_MEMORY_NEW(Supports_Interpolation,
1368
+ c->pstate(),
1369
+ value);
1370
+ return cc;
1371
+ }
1372
+
1373
+ Expression* Eval::operator()(At_Root_Query* e)
1374
+ {
1375
+ Expression_Obj feature = e->feature();
1376
+ feature = (feature ? feature->perform(this) : 0);
1377
+ Expression_Obj value = e->value();
1378
+ value = (value ? value->perform(this) : 0);
1379
+ Expression* ee = SASS_MEMORY_NEW(At_Root_Query,
1380
+ e->pstate(),
1381
+ Cast<String>(feature),
1382
+ value);
1383
+ return ee;
1384
+ }
1385
+
1386
+ Media_Query* Eval::operator()(Media_Query* q)
1387
+ {
1388
+ String_Obj t = q->media_type();
1389
+ t = static_cast<String*>(t.isNull() ? 0 : t->perform(this));
1390
+ Media_Query_Obj qq = SASS_MEMORY_NEW(Media_Query,
1391
+ q->pstate(),
1392
+ t,
1393
+ q->length(),
1394
+ q->is_negated(),
1395
+ q->is_restricted());
1396
+ for (size_t i = 0, L = q->length(); i < L; ++i) {
1397
+ qq->append(static_cast<Media_Query_Expression*>((*q)[i]->perform(this)));
1398
+ }
1399
+ return qq.detach();
1400
+ }
1401
+
1402
+ Expression* Eval::operator()(Media_Query_Expression* e)
1403
+ {
1404
+ Expression_Obj feature = e->feature();
1405
+ feature = (feature ? feature->perform(this) : 0);
1406
+ if (feature && Cast<String_Quoted>(feature)) {
1407
+ feature = SASS_MEMORY_NEW(String_Quoted,
1408
+ feature->pstate(),
1409
+ Cast<String_Quoted>(feature)->value());
1410
+ }
1411
+ Expression_Obj value = e->value();
1412
+ value = (value ? value->perform(this) : 0);
1413
+ if (value && Cast<String_Quoted>(value)) {
1414
+ // XXX: this is never hit via spec tests
1415
+ value = SASS_MEMORY_NEW(String_Quoted,
1416
+ value->pstate(),
1417
+ Cast<String_Quoted>(value)->value());
1418
+ }
1419
+ return SASS_MEMORY_NEW(Media_Query_Expression,
1420
+ e->pstate(),
1421
+ feature,
1422
+ value,
1423
+ e->is_interpolated());
1424
+ }
1425
+
1426
+ Expression* Eval::operator()(Null* n)
1427
+ {
1428
+ return n;
1429
+ }
1430
+
1431
+ Expression* Eval::operator()(Argument* a)
1432
+ {
1433
+ Expression_Obj val = a->value()->perform(this);
1434
+ bool is_rest_argument = a->is_rest_argument();
1435
+ bool is_keyword_argument = a->is_keyword_argument();
1436
+
1437
+ if (a->is_rest_argument()) {
1438
+ if (val->concrete_type() == Expression::MAP) {
1439
+ is_rest_argument = false;
1440
+ is_keyword_argument = true;
1441
+ }
1442
+ else if(val->concrete_type() != Expression::LIST) {
1443
+ List_Obj wrapper = SASS_MEMORY_NEW(List,
1444
+ val->pstate(),
1445
+ 0,
1446
+ SASS_COMMA,
1447
+ true);
1448
+ wrapper->append(val);
1449
+ val = wrapper;
1450
+ }
1451
+ }
1452
+ return SASS_MEMORY_NEW(Argument,
1453
+ a->pstate(),
1454
+ val,
1455
+ a->name(),
1456
+ is_rest_argument,
1457
+ is_keyword_argument);
1458
+ }
1459
+
1460
+ Expression* Eval::operator()(Arguments* a)
1461
+ {
1462
+ Arguments_Obj aa = SASS_MEMORY_NEW(Arguments, a->pstate());
1463
+ if (a->length() == 0) return aa.detach();
1464
+ for (size_t i = 0, L = a->length(); i < L; ++i) {
1465
+ Expression_Obj rv = (*a)[i]->perform(this);
1466
+ Argument* arg = Cast<Argument>(rv);
1467
+ if (!(arg->is_rest_argument() || arg->is_keyword_argument())) {
1468
+ aa->append(arg);
1469
+ }
1470
+ }
1471
+
1472
+ if (a->has_rest_argument()) {
1473
+ Expression_Obj rest = a->get_rest_argument()->perform(this);
1474
+ Expression_Obj splat = Cast<Argument>(rest)->value()->perform(this);
1475
+
1476
+ Sass_Separator separator = SASS_COMMA;
1477
+ List* ls = Cast<List>(splat);
1478
+ Map* ms = Cast<Map>(splat);
1479
+
1480
+ List_Obj arglist = SASS_MEMORY_NEW(List,
1481
+ splat->pstate(),
1482
+ 0,
1483
+ ls ? ls->separator() : separator,
1484
+ true);
1485
+
1486
+ if (ls && ls->is_arglist()) {
1487
+ arglist->concat(ls);
1488
+ } else if (ms) {
1489
+ aa->append(SASS_MEMORY_NEW(Argument, splat->pstate(), ms, "", false, true));
1490
+ } else if (ls) {
1491
+ arglist->concat(ls);
1492
+ } else {
1493
+ arglist->append(splat);
1494
+ }
1495
+ if (arglist->length()) {
1496
+ aa->append(SASS_MEMORY_NEW(Argument, splat->pstate(), arglist, "", true));
1497
+ }
1498
+ }
1499
+
1500
+ if (a->has_keyword_argument()) {
1501
+ Expression_Obj rv = a->get_keyword_argument()->perform(this);
1502
+ Argument* rvarg = Cast<Argument>(rv);
1503
+ Expression_Obj kwarg = rvarg->value()->perform(this);
1504
+
1505
+ aa->append(SASS_MEMORY_NEW(Argument, kwarg->pstate(), kwarg, "", false, true));
1506
+ }
1507
+ return aa.detach();
1508
+ }
1509
+
1510
+ Expression* Eval::operator()(Comment* c)
1511
+ {
1512
+ return 0;
1513
+ }
1514
+
1515
+ Selector_List* Eval::operator()(Selector_List* s)
1516
+ {
1517
+ SelectorStack rv;
1518
+ Selector_List_Obj sl = SASS_MEMORY_NEW(Selector_List, s->pstate());
1519
+ sl->is_optional(s->is_optional());
1520
+ sl->media_block(s->media_block());
1521
+ sl->is_optional(s->is_optional());
1522
+ for (size_t i = 0, iL = s->length(); i < iL; ++i) {
1523
+ rv.push_back(operator()((*s)[i]));
1524
+ }
1525
+
1526
+ // we should actually permutate parent first
1527
+ // but here we have permutated the selector first
1528
+ size_t round = 0;
1529
+ while (round != std::string::npos) {
1530
+ bool abort = true;
1531
+ for (size_t i = 0, iL = rv.size(); i < iL; ++i) {
1532
+ if (rv[i]->length() > round) {
1533
+ sl->append((*rv[i])[round]);
1534
+ abort = false;
1535
+ }
1536
+ }
1537
+ if (abort) {
1538
+ round = std::string::npos;
1539
+ } else {
1540
+ ++ round;
1541
+ }
1542
+
1543
+ }
1544
+ return sl.detach();
1545
+ }
1546
+
1547
+
1548
+ Selector_List* Eval::operator()(Complex_Selector* s)
1549
+ {
1550
+ bool implicit_parent = !exp.old_at_root_without_rule;
1551
+ if (is_in_selector_schema) exp.selector_stack.push_back({});
1552
+ Selector_List_Obj resolved = s->resolve_parent_refs(exp.selector_stack, traces, implicit_parent);
1553
+ if (is_in_selector_schema) exp.selector_stack.pop_back();
1554
+ for (size_t i = 0; i < resolved->length(); i++) {
1555
+ Complex_Selector* is = resolved->at(i)->mutable_first();
1556
+ while (is) {
1557
+ if (is->head()) {
1558
+ is->head(operator()(is->head()));
1559
+ }
1560
+ is = is->tail();
1561
+ }
1562
+ }
1563
+ return resolved.detach();
1564
+ }
1565
+
1566
+ Compound_Selector* Eval::operator()(Compound_Selector* s)
1567
+ {
1568
+ for (size_t i = 0; i < s->length(); i++) {
1569
+ Simple_Selector* ss = s->at(i);
1570
+ // skip parents here (called via resolve_parent_refs)
1571
+ if (ss == NULL || Cast<Parent_Selector>(ss)) continue;
1572
+ s->at(i) = Cast<Simple_Selector>(ss->perform(this));
1573
+ }
1574
+ return s;
1575
+ }
1576
+
1577
+ Selector_List* Eval::operator()(Selector_Schema* s)
1578
+ {
1579
+ LOCAL_FLAG(is_in_selector_schema, true);
1580
+ // the parser will look for a brace to end the selector
1581
+ Expression_Obj sel = s->contents()->perform(this);
1582
+ std::string result_str(sel->to_string(options()));
1583
+ result_str = unquote(Util::rtrim(result_str));
1584
+ char* temp_cstr = sass_copy_c_string(result_str.c_str());
1585
+ ctx.strings.push_back(temp_cstr); // attach to context
1586
+ Parser p = Parser::from_c_str(temp_cstr, ctx, traces, s->pstate());
1587
+ p.last_media_block = s->media_block();
1588
+ // a selector schema may or may not connect to parent?
1589
+ bool chroot = s->connect_parent() == false;
1590
+ Selector_List_Obj sl = p.parse_selector_list(chroot);
1591
+ flag_is_in_selector_schema.reset();
1592
+ return operator()(sl);
1593
+ }
1594
+
1595
+ Expression* Eval::operator()(Parent_Selector* p)
1596
+ {
1597
+ if (Selector_List_Obj pr = selector()) {
1598
+ exp.selector_stack.pop_back();
1599
+ Selector_List_Obj rv = operator()(pr);
1600
+ exp.selector_stack.push_back(rv);
1601
+ return rv.detach();
1602
+ } else {
1603
+ return SASS_MEMORY_NEW(Null, p->pstate());
1604
+ }
1605
+ }
1606
+
1607
+ Expression* Eval::operator()(Parent_Reference* p)
1608
+ {
1609
+ if (Selector_List_Obj pr = selector()) {
1610
+ exp.selector_stack.pop_back();
1611
+ Selector_List_Obj rv = operator()(pr);
1612
+ exp.selector_stack.push_back(rv);
1613
+ return rv.detach();
1614
+ } else {
1615
+ return SASS_MEMORY_NEW(Null, p->pstate());
1616
+ }
1617
+ }
1618
+
1619
+ Simple_Selector* Eval::operator()(Simple_Selector* s)
1620
+ {
1621
+ return s;
1622
+ }
1623
+
1624
+ // hotfix to avoid invalid nested `:not` selectors
1625
+ // probably the wrong place, but this should ultimately
1626
+ // be fixed by implement superselector correctly for `:not`
1627
+ // first use of "find" (ATM only implemented for selectors)
1628
+ bool hasNotSelector(AST_Node_Obj obj) {
1629
+ if (Wrapped_Selector* w = Cast<Wrapped_Selector>(obj)) {
1630
+ return w->name() == ":not";
1631
+ }
1632
+ return false;
1633
+ }
1634
+
1635
+ Wrapped_Selector* Eval::operator()(Wrapped_Selector* s)
1636
+ {
1637
+
1638
+ if (s->name() == ":not") {
1639
+ if (exp.selector_stack.back()) {
1640
+ if (s->selector()->find(hasNotSelector)) {
1641
+ s->selector()->clear();
1642
+ s->name(" ");
1643
+ } else {
1644
+ for (size_t i = 0; i < s->selector()->length(); ++i) {
1645
+ Complex_Selector* cs = s->selector()->at(i);
1646
+ if (cs->tail()) {
1647
+ s->selector()->clear();
1648
+ s->name(" ");
1649
+ }
1650
+ }
1651
+ }
1652
+ }
1653
+ }
1654
+ return s;
1655
+ };
1656
+
1657
+ }