Commit a8c67109 by Adeel

Code: Brings more optimizations.

Credit goes to @mgreter.
parent 9e436db7
......@@ -13,8 +13,6 @@ char* CreateString(Local<Value> value) {
}
void ExtractOptions(Local<Object> options, void* cptr, sass_context_wrapper* ctx_w, bool isFile) {
bool source_comments;
if (ctx_w) {
NanAssignPersistent(ctx_w->stats, options->Get(NanNew("stats"))->ToObject());
......@@ -31,24 +29,21 @@ void ExtractOptions(Local<Object> options, void* cptr, sass_context_wrapper* ctx
ctx_w->errorCallback = new NanCallback(errorCallback);
}
struct Sass_Options* sass_options;
struct Sass_Context* ctx;
if (isFile) {
struct Sass_File_Context* fctx = (struct Sass_File_Context*) cptr;
struct Sass_Context* ctx = sass_file_context_get_context(fctx);
sass_options = sass_context_get_options(ctx);
ctx = sass_file_context_get_context((struct Sass_File_Context*) cptr);
} else {
struct Sass_Data_Context* dctx = (struct Sass_Data_Context*) cptr;
struct Sass_Context* ctx = sass_data_context_get_context(dctx);
sass_options = sass_context_get_options(ctx);
sass_option_set_is_indented_syntax_src(sass_options, options->Get(NanNew("indentedSyntax"))->BooleanValue());
ctx = sass_data_context_get_context((struct Sass_Data_Context*) cptr);
}
struct Sass_Options* sass_options = sass_context_get_options(ctx);
sass_option_set_output_path(sass_options, CreateString(options->Get(NanNew("outFile"))));
sass_option_set_image_path(sass_options, CreateString(options->Get(NanNew("imagePath"))));
sass_option_set_output_style(sass_options, (Sass_Output_Style)options->Get(NanNew("style"))->Int32Value());
sass_option_set_source_comments(sass_options, source_comments = options->Get(NanNew("comments"))->BooleanValue());
sass_option_set_is_indented_syntax_src(sass_options, options->Get(NanNew("indentedSyntax"))->BooleanValue());
sass_option_set_source_comments(sass_options, options->Get(NanNew("comments"))->BooleanValue());
sass_option_set_omit_source_map_url(sass_options, options->Get(NanNew("omitSourceMapUrl"))->BooleanValue());
sass_option_set_source_map_file(sass_options, CreateString(options->Get(NanNew("sourceMap"))));
sass_option_set_include_path(sass_options, CreateString(options->Get(NanNew("paths"))));
......@@ -82,24 +77,6 @@ void FillStatsObj(Handle<Object> stats, Sass_Context* ctx) {
(*stats)->Set(NanNew("sourceMap"), source_map);
}
void FillStatsObj(Handle<Object> stats, struct Sass_File_Context* fctx) {
Handle<Value> source_map;
struct Sass_Context* ctx = sass_file_context_get_context(fctx);
FillStatsObj(stats, ctx);
if (sass_context_get_error_status(ctx)) {
return;
}
if (sass_context_get_source_map_string(ctx)) {
source_map = NanNew<String>(sass_context_get_source_map_string(ctx));
} else {
source_map = NanNull();
}
(*stats)->Set(NanNew("sourceMap"), source_map);
}
void MakeCallback(uv_work_t* req) {
NanScope();
......@@ -176,13 +153,13 @@ NAN_METHOD(RenderSync) {
if (sass_context_get_error_status(ctx) == 0) {
Local<String> output = NanNew<String>(sass_context_get_output_string(ctx));
free_data_context(dctx);
sass_delete_data_context(dctx);
NanReturnValue(output);
}
Local<String> error = NanNew<String>(sass_context_get_error_json(ctx));
free_data_context(dctx);
sass_delete_data_context(dctx);
NanThrowError(error);
NanReturnUndefined();
......@@ -200,8 +177,8 @@ NAN_METHOD(RenderFile) {
ExtractOptions(options, fctx, ctx_w, true);
int status = uv_queue_work(uv_default_loop(), &ctx_w->request, compile_it, (uv_after_work_cb)MakeCallback);
assert(status == 0);
assert(status == 0);
free(input_path);
NanReturnUndefined();
......@@ -218,19 +195,18 @@ NAN_METHOD(RenderFileSync) {
ExtractOptions(options, fctx, NULL, true);
compile_file(fctx);
FillStatsObj(options->Get(NanNew("stats"))->ToObject(), ctx);
free(input_path);
if (sass_context_get_error_status(ctx) == 0) {
Local<String> output = NanNew<String>(sass_context_get_output_string(ctx));
free_file_context(fctx);
sass_delete_file_context(fctx);
NanReturnValue(output);
}
Local<String> error = NanNew<String>(sass_context_get_error_json(ctx));
free_file_context(fctx);
sass_delete_file_context(fctx);
NanThrowError(error);
NanReturnUndefined();
......
......@@ -14,34 +14,22 @@ extern "C" {
}
void compile_data(struct Sass_Data_Context* dctx) {
struct Sass_Context* ctx = sass_data_context_get_context(dctx);
struct Sass_Options* ctx_opt = sass_context_get_options(ctx);
sass_compile_data_context(dctx);
}
void compile_file(struct Sass_File_Context* fctx) {
struct Sass_Context* ctx = sass_file_context_get_context(fctx);
struct Sass_Options* ctx_opt = sass_context_get_options(ctx);
sass_compile_file_context(fctx);
}
void free_data_context(struct Sass_Data_Context* dctx) {
sass_delete_data_context(dctx);
}
void free_file_context(struct Sass_File_Context* fctx) {
sass_delete_file_context(fctx);
}
sass_context_wrapper* sass_make_context_wrapper() {
return (sass_context_wrapper*) calloc(1, sizeof(sass_context_wrapper));
}
void sass_free_context_wrapper(sass_context_wrapper* ctx_w) {
if (ctx_w->dctx) {
free_data_context(ctx_w->dctx);
sass_delete_data_context(ctx_w->dctx);
} else if (ctx_w->fctx) {
free_file_context(ctx_w->fctx);
sass_delete_file_context(ctx_w->fctx);
}
NanDisposePersistent(ctx_w->stats);
......
......@@ -10,8 +10,6 @@ using namespace v8;
void compile_data(struct Sass_Data_Context* dctx);
void compile_file(struct Sass_File_Context* fctx);
void compile_it(uv_work_t* req);
void free_data_context(struct Sass_Data_Context* dctx);
void free_file_context(struct Sass_File_Context* fctx);
struct sass_context_wrapper {
Sass_Data_Context* dctx;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment