sassc 1.8.3 → 1.8.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -1
  3. data/ext/libsass/.editorconfig +1 -1
  4. data/ext/libsass/.gitignore +1 -0
  5. data/ext/libsass/LICENSE +1 -1
  6. data/ext/libsass/Makefile +20 -14
  7. data/ext/libsass/Makefile.conf +0 -1
  8. data/ext/libsass/Readme.md +3 -1
  9. data/ext/libsass/appveyor.yml +19 -11
  10. data/ext/libsass/docs/api-importer-example.md +2 -1235
  11. data/ext/libsass/docs/build-with-autotools.md +10 -0
  12. data/ext/libsass/docs/build-with-makefiles.md +18 -0
  13. data/ext/libsass/include/sass/base.h +4 -1
  14. data/ext/libsass/include/sass/values.h +2 -1
  15. data/ext/libsass/src/ast.cpp +279 -346
  16. data/ext/libsass/src/ast.hpp +234 -60
  17. data/ext/libsass/src/base64vlq.cpp +1 -0
  18. data/ext/libsass/src/bind.cpp +35 -45
  19. data/ext/libsass/src/bind.hpp +1 -0
  20. data/ext/libsass/src/color_maps.cpp +1 -0
  21. data/ext/libsass/src/constants.cpp +4 -1
  22. data/ext/libsass/src/constants.hpp +2 -1
  23. data/ext/libsass/src/context.cpp +41 -31
  24. data/ext/libsass/src/context.hpp +10 -10
  25. data/ext/libsass/src/cssize.cpp +7 -4
  26. data/ext/libsass/src/cssize.hpp +1 -3
  27. data/ext/libsass/src/debugger.hpp +73 -14
  28. data/ext/libsass/src/emitter.cpp +37 -25
  29. data/ext/libsass/src/emitter.hpp +10 -9
  30. data/ext/libsass/src/environment.cpp +16 -5
  31. data/ext/libsass/src/environment.hpp +5 -3
  32. data/ext/libsass/src/error_handling.cpp +91 -14
  33. data/ext/libsass/src/error_handling.hpp +105 -4
  34. data/ext/libsass/src/eval.cpp +519 -330
  35. data/ext/libsass/src/eval.hpp +12 -13
  36. data/ext/libsass/src/expand.cpp +92 -56
  37. data/ext/libsass/src/expand.hpp +5 -3
  38. data/ext/libsass/src/extend.cpp +60 -51
  39. data/ext/libsass/src/extend.hpp +1 -3
  40. data/ext/libsass/src/file.cpp +37 -27
  41. data/ext/libsass/src/functions.cpp +78 -62
  42. data/ext/libsass/src/functions.hpp +1 -0
  43. data/ext/libsass/src/inspect.cpp +293 -64
  44. data/ext/libsass/src/inspect.hpp +2 -0
  45. data/ext/libsass/src/lexer.cpp +1 -0
  46. data/ext/libsass/src/listize.cpp +14 -15
  47. data/ext/libsass/src/listize.hpp +3 -5
  48. data/ext/libsass/src/memory_manager.cpp +1 -0
  49. data/ext/libsass/src/node.cpp +2 -3
  50. data/ext/libsass/src/operation.hpp +70 -71
  51. data/ext/libsass/src/output.cpp +28 -32
  52. data/ext/libsass/src/output.hpp +1 -2
  53. data/ext/libsass/src/parser.cpp +402 -183
  54. data/ext/libsass/src/parser.hpp +19 -9
  55. data/ext/libsass/src/plugins.cpp +1 -0
  56. data/ext/libsass/src/position.cpp +1 -0
  57. data/ext/libsass/src/prelexer.cpp +134 -56
  58. data/ext/libsass/src/prelexer.hpp +51 -3
  59. data/ext/libsass/src/remove_placeholders.cpp +35 -9
  60. data/ext/libsass/src/remove_placeholders.hpp +4 -3
  61. data/ext/libsass/src/sass.cpp +1 -0
  62. data/ext/libsass/src/sass.hpp +129 -0
  63. data/ext/libsass/src/sass_context.cpp +31 -14
  64. data/ext/libsass/src/sass_context.hpp +2 -31
  65. data/ext/libsass/src/sass_functions.cpp +1 -0
  66. data/ext/libsass/src/sass_interface.cpp +5 -6
  67. data/ext/libsass/src/sass_util.cpp +1 -2
  68. data/ext/libsass/src/sass_util.hpp +5 -5
  69. data/ext/libsass/src/sass_values.cpp +13 -10
  70. data/ext/libsass/src/source_map.cpp +4 -3
  71. data/ext/libsass/src/source_map.hpp +2 -2
  72. data/ext/libsass/src/subset_map.hpp +0 -1
  73. data/ext/libsass/src/to_c.cpp +1 -0
  74. data/ext/libsass/src/to_c.hpp +1 -3
  75. data/ext/libsass/src/to_value.cpp +3 -5
  76. data/ext/libsass/src/to_value.hpp +1 -1
  77. data/ext/libsass/src/units.cpp +96 -59
  78. data/ext/libsass/src/units.hpp +10 -8
  79. data/ext/libsass/src/utf8_string.cpp +5 -0
  80. data/ext/libsass/src/util.cpp +23 -156
  81. data/ext/libsass/src/util.hpp +10 -14
  82. data/ext/libsass/src/values.cpp +1 -0
  83. data/ext/libsass/test/test_node.cpp +2 -6
  84. data/ext/libsass/test/test_selector_difference.cpp +1 -3
  85. data/ext/libsass/test/test_specificity.cpp +0 -2
  86. data/ext/libsass/test/test_superselector.cpp +0 -2
  87. data/ext/libsass/test/test_unification.cpp +1 -3
  88. data/ext/libsass/win/libsass.targets +18 -5
  89. data/ext/libsass/win/libsass.vcxproj +9 -7
  90. data/ext/libsass/win/libsass.vcxproj.filters +148 -106
  91. data/lib/sassc/version.rb +1 -1
  92. data/test/engine_test.rb +12 -0
  93. data/test/native_test.rb +1 -1
  94. metadata +3 -4
  95. data/ext/libsass/src/to_string.cpp +0 -48
  96. data/ext/libsass/src/to_string.hpp +0 -38
@@ -1,3 +1,4 @@
1
+ #include "sass.hpp"
1
2
  #include "base64vlq.hpp"
2
3
 
3
4
  namespace Sass {
@@ -1,3 +1,4 @@
1
+ #include "sass.hpp"
1
2
  #include "bind.hpp"
2
3
  #include "ast.hpp"
3
4
  #include "context.hpp"
@@ -5,14 +6,14 @@
5
6
  #include <map>
6
7
  #include <iostream>
7
8
  #include <sstream>
8
- #include "to_string.hpp"
9
9
 
10
10
  namespace Sass {
11
11
 
12
12
  void bind(std::string type, std::string name, Parameters* ps, Arguments* as, Context* ctx, Env* env, Eval* eval)
13
13
  {
14
14
  std::string callee(type + " " + name);
15
- Listize listize(*ctx);
15
+
16
+ Listize listize(ctx->mem);
16
17
  std::map<std::string, Parameter*> param_map;
17
18
 
18
19
  for (size_t i = 0, L = as->length(); i < L; ++i) {
@@ -60,18 +61,9 @@ namespace Sass {
60
61
  if (p->is_rest_parameter()) {
61
62
  // The next argument by coincidence provides a rest argument
62
63
  if (a->is_rest_argument()) {
64
+
63
65
  // We should always get a list for rest arguments
64
66
  if (List* rest = dynamic_cast<List*>(a->value())) {
65
- // arg contains a list
66
- List* args = rest;
67
- // make sure it's an arglist
68
- if (rest->is_arglist()) {
69
- // can pass it through as it was
70
- env->local_frame()[p->name()] = args;
71
- }
72
- // create a new list and wrap each item as an argument
73
- // otherwise we will not be able to fetch it again
74
- else {
75
67
  // create a new list object for wrapped items
76
68
  List* arglist = SASS_MEMORY_NEW(ctx->mem, List,
77
69
  p->pstate(),
@@ -80,17 +72,20 @@ namespace Sass {
80
72
  true);
81
73
  // wrap each item from list as an argument
82
74
  for (Expression* item : rest->elements()) {
83
- (*arglist) << SASS_MEMORY_NEW(ctx->mem, Argument,
84
- item->pstate(),
85
- item,
86
- "",
87
- false,
88
- false);
75
+ if (Argument* arg = dynamic_cast<Argument*>(item)) {
76
+ (*arglist) << SASS_MEMORY_NEW(ctx->mem, Argument, *arg);
77
+ } else {
78
+ (*arglist) << SASS_MEMORY_NEW(ctx->mem, Argument,
79
+ item->pstate(),
80
+ item,
81
+ "",
82
+ false,
83
+ false);
84
+ }
89
85
  }
90
86
  // assign new arglist to environment
91
87
  env->local_frame()[p->name()] = arglist;
92
88
  }
93
- }
94
89
  // invalid state
95
90
  else {
96
91
  throw std::runtime_error("invalid state");
@@ -127,27 +122,27 @@ namespace Sass {
127
122
  List* ls = dynamic_cast<List*>(a->value());
128
123
  // skip any list completely if empty
129
124
  if (ls && ls->empty() && a->is_rest_argument()) continue;
130
- // flatten all nested arglists
131
- if (ls && ls->is_arglist()) {
132
- for (size_t i = 0, L = ls->size(); i < L; ++i) {
133
- // already have a wrapped argument
134
- if (Argument* arg = dynamic_cast<Argument*>((*ls)[i])) {
135
- (*arglist) << SASS_MEMORY_NEW(ctx->mem, Argument, *arg);
136
- }
137
- // wrap all other value types into Argument
138
- else {
125
+
126
+ if (Argument* arg = dynamic_cast<Argument*>(a->value())) {
127
+ (*arglist) << SASS_MEMORY_NEW(ctx->mem, Argument, *arg);
128
+ }
129
+ // check if we have rest argument
130
+ else if (a->is_rest_argument()) {
131
+ // preserve the list separator from rest args
132
+ if (List* rest = dynamic_cast<List*>(a->value())) {
133
+ arglist->separator(rest->separator());
134
+
135
+ for (size_t i = 0, L = rest->size(); i < L; ++i) {
139
136
  (*arglist) << SASS_MEMORY_NEW(ctx->mem, Argument,
140
- (*ls)[i]->pstate(),
141
- (*ls)[i],
137
+ (*rest)[i]->pstate(),
138
+ (*rest)[i],
142
139
  "",
143
140
  false,
144
141
  false);
145
142
  }
146
143
  }
147
- }
148
- // already have a wrapped argument
149
- else if (Argument* arg = dynamic_cast<Argument*>(a->value())) {
150
- (*arglist) << SASS_MEMORY_NEW(ctx->mem, Argument, *arg);
144
+ // no more arguments
145
+ break;
151
146
  }
152
147
  // wrap all other value types into Argument
153
148
  else {
@@ -158,15 +153,6 @@ namespace Sass {
158
153
  false,
159
154
  false);
160
155
  }
161
- // check if we have rest argument
162
- if (a->is_rest_argument()) {
163
- // preserve the list separator from rest args
164
- if (List* rest = dynamic_cast<List*>(a->value())) {
165
- arglist->separator(rest->separator());
166
- }
167
- // no more arguments
168
- break;
169
- }
170
156
  }
171
157
  // assign new arglist to environment
172
158
  env->local_frame()[p->name()] = arglist;
@@ -185,7 +171,7 @@ namespace Sass {
185
171
  if (!arglist->length()) {
186
172
  break;
187
173
  } else {
188
- if (arglist->length() + ia > LP && !ps->has_rest_parameter()) {
174
+ if (arglist->length() > LP - ip && !ps->has_rest_parameter()) {
189
175
  int arg_count = (arglist->length() + LA - 1);
190
176
  std::stringstream msg;
191
177
  msg << callee << " takes " << LP;
@@ -193,6 +179,10 @@ namespace Sass {
193
179
  msg << " but " << arg_count;
194
180
  msg << (arg_count == 1 ? " was passed" : " were passed.");
195
181
  deprecated_bind(msg.str(), as->pstate());
182
+
183
+ while (arglist->length() > LP - ip) {
184
+ arglist->elements().erase(arglist->elements().end() - 1);
185
+ }
196
186
  }
197
187
  }
198
188
  // otherwise move one of the rest args into the param, converting to argument if necessary
@@ -209,6 +199,7 @@ namespace Sass {
209
199
  if (!arglist->length() || (!arglist->is_arglist() && ip + 1 == LP)) {
210
200
  ++ia;
211
201
  }
202
+
212
203
  } else if (a->is_keyword_argument()) {
213
204
  Map* argmap = static_cast<Map*>(a->value());
214
205
 
@@ -267,7 +258,6 @@ namespace Sass {
267
258
  // That's only okay if they have default values, or were already bound by
268
259
  // named arguments, or if it's a single rest-param.
269
260
  for (size_t i = ip; i < LP; ++i) {
270
- To_String to_string(ctx);
271
261
  Parameter* leftover = (*ps)[i];
272
262
  // cerr << "env for default params:" << endl;
273
263
  // env->print();
@@ -2,6 +2,7 @@
2
2
  #define SASS_BIND_H
3
3
 
4
4
  #include <string>
5
+ #include "listize.hpp"
5
6
  #include "environment.hpp"
6
7
 
7
8
  namespace Sass {
@@ -1,3 +1,4 @@
1
+ #include "sass.hpp"
1
2
  #include "ast.hpp"
2
3
  #include "color_maps.hpp"
3
4
 
@@ -1,3 +1,4 @@
1
+ #include "sass.hpp"
1
2
  #include "constants.hpp"
2
3
 
3
4
  namespace Sass {
@@ -78,7 +79,7 @@ namespace Sass {
78
79
  extern const char keyframes_kwd[] = "keyframes";
79
80
  extern const char only_kwd[] = "only";
80
81
  extern const char rgb_kwd[] = "rgb(";
81
- extern const char url_kwd[] = "url(";
82
+ extern const char url_kwd[] = "url";
82
83
  // extern const char url_prefix_kwd[] = "url-prefix(";
83
84
  extern const char important_kwd[] = "important";
84
85
  extern const char pseudo_not_kwd[] = ":not(";
@@ -86,6 +87,7 @@ namespace Sass {
86
87
  extern const char odd_kwd[] = "odd";
87
88
  extern const char progid_kwd[] = "progid";
88
89
  extern const char expression_kwd[] = "expression";
90
+ extern const char calc_fn_kwd[] = "calc";
89
91
  extern const char calc_kwd[] = "calc(";
90
92
  extern const char moz_calc_kwd[] = "-moz-calc(";
91
93
  extern const char webkit_calc_kwd[] = "-webkit-calc(";
@@ -124,6 +126,7 @@ namespace Sass {
124
126
  extern const char rbrace[] = "}";
125
127
  extern const char rparen[] = ")";
126
128
  extern const char sign_chars[] = "-+";
129
+ extern const char op_chars[] = "-+";
127
130
  extern const char hyphen[] = "-";
128
131
  extern const char ellipsis[] = "...";
129
132
  // extern const char url_space_chars[] = " \t\r\n\f";
@@ -81,7 +81,6 @@ namespace Sass {
81
81
  extern const char rgb_kwd[];
82
82
  extern const char url_kwd[];
83
83
  // extern const char url_prefix_kwd[];
84
- extern const char image_url_kwd[];
85
84
  extern const char important_kwd[];
86
85
  extern const char pseudo_not_kwd[];
87
86
  extern const char even_kwd[];
@@ -89,6 +88,7 @@ namespace Sass {
89
88
  extern const char progid_kwd[];
90
89
  extern const char expression_kwd[];
91
90
  extern const char calc_kwd[];
91
+ extern const char calc_fn_kwd[];
92
92
  extern const char moz_calc_kwd[];
93
93
  extern const char webkit_calc_kwd[];
94
94
  extern const char ms_calc_kwd[];
@@ -126,6 +126,7 @@ namespace Sass {
126
126
  extern const char rbrace[];
127
127
  extern const char rparen[];
128
128
  extern const char sign_chars[];
129
+ extern const char op_chars[];
129
130
  extern const char hyphen[];
130
131
  extern const char ellipsis[];
131
132
  // extern const char url_space_chars[];
@@ -1,9 +1,4 @@
1
- #ifdef _WIN32
2
- #define PATH_SEP ';'
3
- #else
4
- #define PATH_SEP ':'
5
- #endif
6
-
1
+ #include "sass.hpp"
7
2
  #include <string>
8
3
  #include <cstdlib>
9
4
  #include <cstring>
@@ -28,6 +23,7 @@
28
23
  #include "extend.hpp"
29
24
  #include "remove_placeholders.hpp"
30
25
  #include "functions.hpp"
26
+ #include "sass_functions.hpp"
31
27
  #include "backtrace.hpp"
32
28
  #include "sass2scss.h"
33
29
  #include "prelexer.hpp"
@@ -62,13 +58,14 @@ namespace Sass {
62
58
  return safe_path == "" ? "stdout" : safe_path;
63
59
  }
64
60
 
65
- Context::Context(struct Sass_Context* c_ctx)
61
+ Context::Context(struct Sass_Context& c_ctx)
66
62
  : CWD(File::get_cwd()),
63
+ c_options(c_ctx),
67
64
  entry_path(""),
68
65
  head_imports(0),
69
66
  mem(Memory_Manager()),
70
67
  plugins(),
71
- emitter(this),
68
+ emitter(c_options),
72
69
 
73
70
  strings(),
74
71
  resources(),
@@ -76,19 +73,17 @@ namespace Sass {
76
73
  subset_map(),
77
74
  import_stack(),
78
75
 
79
- c_options (c_ctx),
80
-
81
76
  c_headers (std::vector<Sass_Importer_Entry>()),
82
77
  c_importers (std::vector<Sass_Importer_Entry>()),
83
78
  c_functions (std::vector<Sass_Function_Entry>()),
84
79
 
85
- indent (safe_str(c_options->indent, " ")),
86
- linefeed (safe_str(c_options->linefeed, "\n")),
80
+ indent (safe_str(c_options.indent, " ")),
81
+ linefeed (safe_str(c_options.linefeed, "\n")),
87
82
 
88
- input_path (make_canonical_path(safe_input(c_options->input_path))),
89
- output_path (make_canonical_path(safe_output(c_options->output_path, input_path))),
90
- source_map_file (make_canonical_path(safe_str(c_options->source_map_file, ""))),
91
- source_map_root (make_canonical_path(safe_str(c_options->source_map_root, "")))
83
+ input_path (make_canonical_path(safe_input(c_options.input_path))),
84
+ output_path (make_canonical_path(safe_output(c_options.output_path, input_path))),
85
+ source_map_file (make_canonical_path(safe_str(c_options.source_map_file, ""))),
86
+ source_map_root (make_canonical_path(safe_str(c_options.source_map_root, "")))
92
87
 
93
88
  {
94
89
 
@@ -96,10 +91,10 @@ namespace Sass {
96
91
  include_paths.push_back(CWD);
97
92
 
98
93
  // collect more paths from different options
99
- collect_include_paths(sass_option_get_include_path(c_options));
100
- // collect_include_paths(initializers.include_paths_array());
101
- collect_plugin_paths(sass_option_get_plugin_path(c_options));
102
- // collect_plugin_paths(initializers.plugin_paths_array());
94
+ collect_include_paths(c_options.include_path);
95
+ // collect_include_paths(c_options.include_paths);
96
+ collect_plugin_paths(c_options.plugin_path);
97
+ // collect_plugin_paths(c_options.plugin_paths);
103
98
 
104
99
  // load plugins and register custom behaviors
105
100
  for(auto plug : plugin_paths) plugins.load_plugins(plug);
@@ -254,7 +249,7 @@ namespace Sass {
254
249
 
255
250
  // register include with resolved path and its content
256
251
  // memory of the resources will be freed by us on exit
257
- void Context::register_resource(const Include& inc, const Resource& res)
252
+ void Context::register_resource(const Include& inc, const Resource& res, ParserState* prstate)
258
253
  {
259
254
 
260
255
  // do not parse same resource twice
@@ -297,6 +292,24 @@ namespace Sass {
297
292
  strings.push_back(sass_strdup(inc.abs_path.c_str()));
298
293
  // create the initial parser state from resource
299
294
  ParserState pstate(strings.back(), contents, idx);
295
+
296
+ // check existing import stack for possible recursion
297
+ for (size_t i = 0; i < import_stack.size() - 2; ++i) {
298
+ auto parent = import_stack[i];
299
+ if (std::strcmp(parent->abs_path, import->abs_path) == 0) {
300
+ std::string stack("An @import loop has been found:");
301
+ for (size_t n = 1; n < i + 2; ++n) {
302
+ stack += "\n " + std::string(import_stack[n]->imp_path) +
303
+ " imports " + std::string(import_stack[n+1]->imp_path);
304
+ }
305
+ // implement error throw directly until we
306
+ // decided how to handle full stack traces
307
+ ParserState state = prstate ? *prstate : pstate;
308
+ throw Exception::InvalidSyntax(state, stack, &import_stack);
309
+ // error(stack, prstate ? *prstate : pstate, import_stack);
310
+ }
311
+ }
312
+
300
313
  // create a parser instance from the given c_str buffer
301
314
  Parser p(Parser::from_c_str(contents, *this, pstate));
302
315
  // do not yet dispose these buffers
@@ -344,7 +357,7 @@ namespace Sass {
344
357
  // the memory buffer returned must be freed by us!
345
358
  if (char* contents = read_file(resolved[0].abs_path)) {
346
359
  // register the newly resolved file resource
347
- register_resource(resolved[0], { contents, 0 });
360
+ register_resource(resolved[0], { contents, 0 }, &pstate);
348
361
  // return resolved entry
349
362
  return resolved[0];
350
363
  }
@@ -365,10 +378,7 @@ namespace Sass {
365
378
  if (const char* proto = sequence< identifier, exactly<':'>, exactly<'/'>, exactly<'/'> >(imp_path.c_str())) {
366
379
 
367
380
  protocol = std::string(imp_path.c_str(), proto - 3);
368
- // std::cerr << "==================== " << protocol << "\n";
369
- if (protocol.compare("file") && true) {
370
-
371
- }
381
+ // if (protocol.compare("file") && true) { }
372
382
  }
373
383
 
374
384
  // add urls (protocol other than file) and urls without procotol to `urls` member
@@ -433,7 +443,7 @@ namespace Sass {
433
443
  // handle error message passed back from custom importer
434
444
  // it may (or may not) override the line and column info
435
445
  if (const char* err_message = sass_import_get_error_message(include)) {
436
- if (source || srcmap) register_resource({ importer, uniq_path }, { source, srcmap });
446
+ if (source || srcmap) register_resource({ importer, uniq_path }, { source, srcmap }, &pstate);
437
447
  if (line == std::string::npos && column == std::string::npos) error(err_message, pstate);
438
448
  else error(err_message, ParserState(ctx_path, source, Position(line, column)));
439
449
  }
@@ -447,7 +457,7 @@ namespace Sass {
447
457
  // attach information to AST node
448
458
  imp->incs().push_back(include);
449
459
  // register the resource buffers
450
- register_resource(include, { source, srcmap });
460
+ register_resource(include, { source, srcmap }, &pstate);
451
461
  }
452
462
  // only a path was retuned
453
463
  // try to load it like normal
@@ -494,9 +504,9 @@ namespace Sass {
494
504
  // get the resulting buffer from stream
495
505
  OutputBuffer emitted = emitter.get_buffer();
496
506
  // should we append a source map url?
497
- if (!c_options->omit_source_map_url) {
507
+ if (!c_options.omit_source_map_url) {
498
508
  // generate an embeded source map
499
- if (c_options->source_map_embed) {
509
+ if (c_options.source_map_embed) {
500
510
  emitted.buffer += linefeed;
501
511
  emitted.buffer += format_embedded_source_map();
502
512
  }
@@ -581,7 +591,7 @@ namespace Sass {
581
591
  if (!source_c_str) return 0;
582
592
 
583
593
  // convert indented sass syntax
584
- if(c_options->is_indented_syntax_src) {
594
+ if(c_options.is_indented_syntax_src) {
585
595
  // call sass2scss to convert the string
586
596
  char * converted = sass2scss(source_c_str,
587
597
  // preserve the structure as much as possible
@@ -38,6 +38,7 @@ namespace Sass {
38
38
 
39
39
  public:
40
40
  const std::string CWD;
41
+ struct Sass_Options& c_options;
41
42
  std::string entry_path;
42
43
  size_t head_imports;
43
44
  Memory_Manager mem;
@@ -53,7 +54,6 @@ namespace Sass {
53
54
  std::vector<Sass_Import_Entry> import_stack;
54
55
 
55
56
  struct Sass_Compiler* c_compiler;
56
- struct Sass_Options* c_options;
57
57
 
58
58
  // absolute paths to includes
59
59
  std::vector<std::string> included_files;
@@ -86,17 +86,17 @@ namespace Sass {
86
86
  const std::string source_map_root; // path for sourceRoot property (pass-through)
87
87
 
88
88
  virtual ~Context();
89
- Context(struct Sass_Context*);
89
+ Context(struct Sass_Context&);
90
90
  virtual Block* parse() = 0;
91
91
  virtual Block* compile();
92
92
  virtual char* render(Block* root);
93
93
  virtual char* render_srcmap();
94
94
 
95
- void register_resource(const Include&, const Resource&);
95
+ void register_resource(const Include&, const Resource&, ParserState* = 0);
96
96
  std::vector<Include> find_includes(const Importer& import);
97
97
  Include load_import(const Importer&, ParserState pstate);
98
98
 
99
- Sass_Output_Style output_style() { return c_options->output_style; };
99
+ Sass_Output_Style output_style() { return c_options.output_style; };
100
100
  std::vector<std::string> get_included_files(bool skip = false, size_t headers = 0);
101
101
 
102
102
  private:
@@ -119,7 +119,7 @@ namespace Sass {
119
119
 
120
120
  class File_Context : public Context {
121
121
  public:
122
- File_Context(struct Sass_File_Context* ctx)
122
+ File_Context(struct Sass_File_Context& ctx)
123
123
  : Context(ctx)
124
124
  { }
125
125
  virtual ~File_Context();
@@ -130,13 +130,13 @@ namespace Sass {
130
130
  public:
131
131
  char* source_c_str;
132
132
  char* srcmap_c_str;
133
- Data_Context(struct Sass_Data_Context* ctx)
133
+ Data_Context(struct Sass_Data_Context& ctx)
134
134
  : Context(ctx)
135
135
  {
136
- source_c_str = ctx->source_string;
137
- srcmap_c_str = ctx->srcmap_string;
138
- ctx->source_string = 0; // passed away
139
- ctx->srcmap_string = 0; // passed away
136
+ source_c_str = ctx.source_string;
137
+ srcmap_c_str = ctx.srcmap_string;
138
+ ctx.source_string = 0; // passed away
139
+ ctx.srcmap_string = 0; // passed away
140
140
  }
141
141
  virtual ~Data_Context();
142
142
  virtual Block* parse();