@@ -218,6 +218,38 @@ namespace Sass {
218218 return 0 ;
219219 }
220220
221+ Expression* Eval::operator ()(Error* e)
222+ {
223+ Expression* message = e->message ()->perform (this );
224+ To_String to_string;
225+
226+ // try to use generic function
227+ if (env->has (" @error[f]" )) {
228+
229+ Definition* def = static_cast <Definition*>((*env)[" @error[f]" ]);
230+ // Block* body = def->block();
231+ // Native_Function func = def->native_function();
232+ Sass_C_Function c_func = def->c_function ();
233+
234+ To_C to_c;
235+ union Sass_Value* c_args = sass_make_list (1 , SASS_COMMA);
236+ sass_list_set_value (c_args, 0 , message->perform (&to_c));
237+ Sass_Value* c_val = c_func (c_args, def->cookie ());
238+ sass_delete_value (c_args);
239+ sass_delete_value (c_val);
240+ return 0 ;
241+
242+ }
243+
244+ string prefix (" Error: " );
245+ string result (unquote (message->perform (&to_string)));
246+ cerr << prefix << result;
247+ Backtrace top (backtrace, e->path (), e->position (), " " );
248+ cerr << top.to_string (true );
249+ cerr << endl << endl;
250+ return 0 ;
251+ }
252+
221253 Expression* Eval::operator ()(List* l)
222254 {
223255 if (l->is_expanded ()) return l;
@@ -450,6 +482,8 @@ namespace Sass {
450482 Sass_Value* c_val = c_func (c_args, def->cookie ());
451483 if (sass_value_get_tag (c_val) == SASS_ERROR) {
452484 error (" error in C function " + c->name () + " : " + sass_error_get_message (c_val), c->path (), c->position (), backtrace);
485+ } else if (sass_value_get_tag (c_val) == SASS_WARNING) {
486+ error (" warning in C function " + c->name () + " : " + sass_warning_get_message (c_val), c->path (), c->position (), backtrace);
453487 }
454488 result = cval_to_astnode (c_val, ctx, backtrace, c->path (), c->position ());
455489
@@ -1037,7 +1071,10 @@ namespace Sass {
10371071 e = new (ctx.mem ) Null (path, position);
10381072 } break ;
10391073 case SASS_ERROR: {
1040- error (" error in C function: " + string (sass_error_get_message (v)), path, position, backtrace);
1074+ error (" Error in C function: " + string (sass_error_get_message (v)), path, position, backtrace);
1075+ } break ;
1076+ case SASS_WARNING: {
1077+ error (" Warning in C function: " + string (sass_warning_get_message (v)), path, position, backtrace);
10411078 } break ;
10421079 }
10431080 return e;
0 commit comments