Commit c9cd9ba8 by Aaron Leung

Passing the path and line-number into the built-in functions in order to…

Passing the path and line-number into the built-in functions in order to generate the most accurate file-names and line numbers for intermediate return values.
parent 94d00064
...@@ -713,7 +713,7 @@ namespace Sass { ...@@ -713,7 +713,7 @@ namespace Sass {
// Apply a function -- bind the arguments and pass them to the underlying // Apply a function -- bind the arguments and pass them to the underlying
// primitive function implementation, then return its value. // primitive function implementation, then return its value.
Node apply_function(const Function& f, const Node args, Node prefix, Environment& env, map<string, Function>& f_env, Node_Factory& new_Node, Context& ctx) Node apply_function(const Function& f, const Node args, Node prefix, Environment& env, map<string, Function>& f_env, Node_Factory& new_Node, Context& ctx, string path, size_t line)
{ {
if (f.primitive) { if (f.primitive) {
// evaluate arguments in the current environment // evaluate arguments in the current environment
...@@ -729,7 +729,7 @@ namespace Sass { ...@@ -729,7 +729,7 @@ namespace Sass {
Environment bindings; Environment bindings;
bindings.link(env.global ? *env.global : env); bindings.link(env.global ? *env.global : env);
bind_arguments("function " + f.name, f.parameters, args, prefix, bindings, f_env, new_Node, ctx); bind_arguments("function " + f.name, f.parameters, args, prefix, bindings, f_env, new_Node, ctx);
return f.primitive(f.parameter_names, bindings, new_Node); return f.primitive(f.parameter_names, bindings, new_Node, path, line);
} }
else { else {
Node params(f.definition[1]); Node params(f.definition[1]);
...@@ -778,8 +778,8 @@ namespace Sass { ...@@ -778,8 +778,8 @@ namespace Sass {
} }
Node var(stm[0]); Node var(stm[0]);
if (stm.is_guarded() && bindings.query(var.token())) continue; if (stm.is_guarded() && bindings.query(var.token())) continue;
// If a binding exists (possible upframe), then update it. // If a binding exists (possibly upframe), then update it.
// Otherwise, make a new on in the current frame. // Otherwise, make a new one in the current frame.
if (bindings.query(var.token())) { if (bindings.query(var.token())) {
bindings[var.token()] = val; bindings[var.token()] = val;
} }
......
...@@ -19,7 +19,7 @@ namespace Sass { ...@@ -19,7 +19,7 @@ namespace Sass {
double operate(Node::Type op, double lhs, double rhs); double operate(Node::Type op, double lhs, double rhs);
Node apply_mixin(Node mixin, const Node args, Node prefix, Environment& env, map<string, Function>& f_env, Node_Factory& new_Node, Context& ctx, bool dynamic_scope = false); Node apply_mixin(Node mixin, const Node args, Node prefix, Environment& env, map<string, Function>& f_env, Node_Factory& new_Node, Context& ctx, bool dynamic_scope = false);
Node apply_function(const Function& f, const Node args, Node prefix, Environment& env, map<string, Function>& f_env, Node_Factory& new_Node, Context& ctx); Node apply_function(const Function& f, const Node args, Node prefix, Environment& env, map<string, Function>& f_env, Node_Factory& new_Node, Context& ctx, string path = "", size_t line = 0);
Node expand_selector(Node sel, Node pre, Node_Factory& new_Node); Node expand_selector(Node sel, Node pre, Node_Factory& new_Node);
Node expand_backref(Node sel, Node pre); Node expand_backref(Node sel, Node pre);
void extend_selectors(vector<pair<Node, Node> >&, multimap<Node, Node>&, Node_Factory&); void extend_selectors(vector<pair<Node, Node> >&, multimap<Node, Node>&, Node_Factory&);
......
...@@ -69,7 +69,7 @@ namespace Sass { ...@@ -69,7 +69,7 @@ namespace Sass {
// RGB Functions /////////////////////////////////////////////////////// // RGB Functions ///////////////////////////////////////////////////////
extern Signature rgb_sig = "rgb($red, $green, $blue)"; extern Signature rgb_sig = "rgb($red, $green, $blue)";
Node rgb(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node rgb(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node r(bindings[parameter_names[0].token()]); Node r(bindings[parameter_names[0].token()]);
Node g(bindings[parameter_names[1].token()]); Node g(bindings[parameter_names[1].token()]);
Node b(bindings[parameter_names[2].token()]); Node b(bindings[parameter_names[2].token()]);
...@@ -87,7 +87,7 @@ namespace Sass { ...@@ -87,7 +87,7 @@ namespace Sass {
// TODO: SOMETHING SPECIAL FOR OVERLOADED FUNCTIONS // TODO: SOMETHING SPECIAL FOR OVERLOADED FUNCTIONS
extern Signature rgba_4_sig = "rgba($red, $green, $blue, $alpha)"; extern Signature rgba_4_sig = "rgba($red, $green, $blue, $alpha)";
Node rgba_4(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node rgba_4(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node r(bindings[parameter_names[0].token()]); Node r(bindings[parameter_names[0].token()]);
Node g(bindings[parameter_names[1].token()]); Node g(bindings[parameter_names[1].token()]);
Node b(bindings[parameter_names[2].token()]); Node b(bindings[parameter_names[2].token()]);
...@@ -108,7 +108,7 @@ namespace Sass { ...@@ -108,7 +108,7 @@ namespace Sass {
} }
extern Signature rgba_2_sig = "rgba($color, $alpha)"; extern Signature rgba_2_sig = "rgba($color, $alpha)";
Node rgba_2(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node rgba_2(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'rgba' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'rgba' must be a color", color.path(), color.line());
Node r(color[0]); Node r(color[0]);
...@@ -122,28 +122,28 @@ namespace Sass { ...@@ -122,28 +122,28 @@ namespace Sass {
} }
extern Signature red_sig = "red($color)"; extern Signature red_sig = "red($color)";
Node red(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node red(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("argument to red must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("argument to red must be a color", color.path(), color.line());
return color[0]; return color[0];
} }
extern Signature green_sig = "green($color)"; extern Signature green_sig = "green($color)";
Node green(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node green(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("argument to green must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("argument to green must be a color", color.path(), color.line());
return color[1]; return color[1];
} }
extern Signature blue_sig = "blue($color)"; extern Signature blue_sig = "blue($color)";
Node blue(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node blue(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("argument to blue must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("argument to blue must be a color", color.path(), color.line());
return color[2]; return color[2];
} }
extern Signature mix_sig = "mix($color-1, $color-2, $weight: 50%)"; extern Signature mix_sig = "mix($color-1, $color-2, $weight: 50%)";
Node mix(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node mix(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color1(bindings[parameter_names[0].token()]); Node color1(bindings[parameter_names[0].token()]);
Node color2(bindings[parameter_names[1].token()]); Node color2(bindings[parameter_names[1].token()]);
Node weight(bindings[parameter_names[2].token()]); Node weight(bindings[parameter_names[2].token()]);
...@@ -236,7 +236,7 @@ namespace Sass { ...@@ -236,7 +236,7 @@ namespace Sass {
} }
extern Signature hsl_sig = "hsl($hue, $saturation, $lightness)"; extern Signature hsl_sig = "hsl($hue, $saturation, $lightness)";
Node hsl(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node hsl(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node hn(bindings[parameter_names[0].token()]); Node hn(bindings[parameter_names[0].token()]);
Node sn(bindings[parameter_names[1].token()]); Node sn(bindings[parameter_names[1].token()]);
Node ln(bindings[parameter_names[2].token()]); Node ln(bindings[parameter_names[2].token()]);
...@@ -253,7 +253,7 @@ namespace Sass { ...@@ -253,7 +253,7 @@ namespace Sass {
} }
extern Signature hsla_sig = "hsla($hue, $saturation, $lightness, $alpha)"; extern Signature hsla_sig = "hsla($hue, $saturation, $lightness, $alpha)";
Node hsla(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node hsla(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node hn(bindings[parameter_names[0].token()]); Node hn(bindings[parameter_names[0].token()]);
Node sn(bindings[parameter_names[1].token()]); Node sn(bindings[parameter_names[1].token()]);
Node ln(bindings[parameter_names[2].token()]); Node ln(bindings[parameter_names[2].token()]);
...@@ -274,7 +274,7 @@ namespace Sass { ...@@ -274,7 +274,7 @@ namespace Sass {
} }
extern Signature hue_sig = "hue($color)"; extern Signature hue_sig = "hue($color)";
Node hue(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node hue(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_color(bindings[parameter_names[0].token()]); Node rgb_color(bindings[parameter_names[0].token()]);
if (rgb_color.type() != Node::numeric_color) throw_eval_error("argument to 'hue' must be a color", rgb_color.path(), rgb_color.line()); if (rgb_color.type() != Node::numeric_color) throw_eval_error("argument to 'hue' must be a color", rgb_color.path(), rgb_color.line());
Node hsl_color(rgb_to_hsl(rgb_color[0].numeric_value(), Node hsl_color(rgb_to_hsl(rgb_color[0].numeric_value(),
...@@ -285,7 +285,7 @@ namespace Sass { ...@@ -285,7 +285,7 @@ namespace Sass {
} }
extern Signature saturation_sig = "saturation($color)"; extern Signature saturation_sig = "saturation($color)";
Node saturation(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node saturation(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_color(bindings[parameter_names[0].token()]); Node rgb_color(bindings[parameter_names[0].token()]);
if (rgb_color.type() != Node::numeric_color) throw_eval_error("argument to 'saturation' must be a color", rgb_color.path(), rgb_color.line()); if (rgb_color.type() != Node::numeric_color) throw_eval_error("argument to 'saturation' must be a color", rgb_color.path(), rgb_color.line());
Node hsl_color(rgb_to_hsl(rgb_color[0].numeric_value(), Node hsl_color(rgb_to_hsl(rgb_color[0].numeric_value(),
...@@ -296,7 +296,7 @@ namespace Sass { ...@@ -296,7 +296,7 @@ namespace Sass {
} }
extern Signature lightness_sig = "lightness($color)"; extern Signature lightness_sig = "lightness($color)";
Node lightness(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node lightness(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_color(bindings[parameter_names[0].token()]); Node rgb_color(bindings[parameter_names[0].token()]);
if (rgb_color.type() != Node::numeric_color) throw_eval_error("argument to 'lightness' must be a color", rgb_color.path(), rgb_color.line()); if (rgb_color.type() != Node::numeric_color) throw_eval_error("argument to 'lightness' must be a color", rgb_color.path(), rgb_color.line());
Node hsl_color(rgb_to_hsl(rgb_color[0].numeric_value(), Node hsl_color(rgb_to_hsl(rgb_color[0].numeric_value(),
...@@ -307,7 +307,7 @@ namespace Sass { ...@@ -307,7 +307,7 @@ namespace Sass {
} }
extern Signature adjust_hue_sig = "adjust-hue($color, $degrees)"; extern Signature adjust_hue_sig = "adjust-hue($color, $degrees)";
Node adjust_hue(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node adjust_hue(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_col(bindings[parameter_names[0].token()]); Node rgb_col(bindings[parameter_names[0].token()]);
Node degrees(bindings[parameter_names[1].token()]); Node degrees(bindings[parameter_names[1].token()]);
if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'adjust-hue' must be a color", rgb_col.path(), rgb_col.line()); if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'adjust-hue' must be a color", rgb_col.path(), rgb_col.line());
...@@ -324,7 +324,7 @@ namespace Sass { ...@@ -324,7 +324,7 @@ namespace Sass {
} }
extern Signature lighten_sig = "lighten($color, $amount)"; extern Signature lighten_sig = "lighten($color, $amount)";
Node lighten(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node lighten(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_col(bindings[parameter_names[0].token()]); Node rgb_col(bindings[parameter_names[0].token()]);
Node amount(bindings[parameter_names[1].token()]); Node amount(bindings[parameter_names[1].token()]);
if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'lighten' must be a color", rgb_col.path(), rgb_col.line()); if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'lighten' must be a color", rgb_col.path(), rgb_col.line());
...@@ -343,7 +343,7 @@ namespace Sass { ...@@ -343,7 +343,7 @@ namespace Sass {
} }
extern Signature darken_sig = "darken($color, $amount)"; extern Signature darken_sig = "darken($color, $amount)";
Node darken(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node darken(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_col(bindings[parameter_names[0].token()]); Node rgb_col(bindings[parameter_names[0].token()]);
Node amount(bindings[parameter_names[1].token()]); Node amount(bindings[parameter_names[1].token()]);
if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'darken' must be a color", rgb_col.path(), rgb_col.line()); if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'darken' must be a color", rgb_col.path(), rgb_col.line());
...@@ -362,7 +362,7 @@ namespace Sass { ...@@ -362,7 +362,7 @@ namespace Sass {
} }
extern Signature saturate_sig = "saturate($color, $amount)"; extern Signature saturate_sig = "saturate($color, $amount)";
Node saturate(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node saturate(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_col(bindings[parameter_names[0].token()]); Node rgb_col(bindings[parameter_names[0].token()]);
Node amount(bindings[parameter_names[1].token()]); Node amount(bindings[parameter_names[1].token()]);
if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'saturate' must be a color", rgb_col.path(), rgb_col.line()); if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'saturate' must be a color", rgb_col.path(), rgb_col.line());
...@@ -381,7 +381,7 @@ namespace Sass { ...@@ -381,7 +381,7 @@ namespace Sass {
} }
extern Signature desaturate_sig = "desaturate($color, $amount)"; extern Signature desaturate_sig = "desaturate($color, $amount)";
Node desaturate(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node desaturate(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node rgb_col(bindings[parameter_names[0].token()]); Node rgb_col(bindings[parameter_names[0].token()]);
Node amount(bindings[parameter_names[1].token()]); Node amount(bindings[parameter_names[1].token()]);
if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'desaturate' must be a color", rgb_col.path(), rgb_col.line()); if (rgb_col.type() != Node::numeric_color) throw_eval_error("first argument to 'desaturate' must be a color", rgb_col.path(), rgb_col.line());
...@@ -400,7 +400,7 @@ namespace Sass { ...@@ -400,7 +400,7 @@ namespace Sass {
} }
extern Signature grayscale_sig = "grayscale($color)"; extern Signature grayscale_sig = "grayscale($color)";
Node grayscale(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node grayscale(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("argument to 'grayscale' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("argument to 'grayscale' must be a color", color.path(), color.line());
Node hsl_color(rgb_to_hsl(color[0].numeric_value(), Node hsl_color(rgb_to_hsl(color[0].numeric_value(),
...@@ -420,7 +420,7 @@ namespace Sass { ...@@ -420,7 +420,7 @@ namespace Sass {
} }
extern Signature complement_sig = "complement($color)"; extern Signature complement_sig = "complement($color)";
Node complement(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node complement(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("argument to 'complement' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("argument to 'complement' must be a color", color.path(), color.line());
Node hsl_color(rgb_to_hsl(color[0].numeric_value(), Node hsl_color(rgb_to_hsl(color[0].numeric_value(),
...@@ -440,7 +440,7 @@ namespace Sass { ...@@ -440,7 +440,7 @@ namespace Sass {
} }
extern Signature invert_sig = "invert($color)"; extern Signature invert_sig = "invert($color)";
Node invert(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node invert(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node orig(bindings[parameter_names[0].token()]); Node orig(bindings[parameter_names[0].token()]);
if (orig.type() != Node::numeric_color) throw_eval_error("argument to 'invert' must be a color", orig.path(), orig.line()); if (orig.type() != Node::numeric_color) throw_eval_error("argument to 'invert' must be a color", orig.path(), orig.line());
return new_Node(orig.path(), orig.line(), return new_Node(orig.path(), orig.line(),
...@@ -453,21 +453,21 @@ namespace Sass { ...@@ -453,21 +453,21 @@ namespace Sass {
// Opacity Functions /////////////////////////////////////////////////// // Opacity Functions ///////////////////////////////////////////////////
extern Signature alpha_sig = "alpha($color)"; extern Signature alpha_sig = "alpha($color)";
Node alpha(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node alpha(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("argument to 'alpha' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("argument to 'alpha' must be a color", color.path(), color.line());
return color[3]; return color[3];
} }
extern Signature opacity_sig = "opacity($color)"; extern Signature opacity_sig = "opacity($color)";
Node opacity(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node opacity(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("argument to 'opacity' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("argument to 'opacity' must be a color", color.path(), color.line());
return color[3]; return color[3];
} }
extern Signature opacify_sig = "opacify($color, $amount)"; extern Signature opacify_sig = "opacify($color, $amount)";
Node opacify(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node opacify(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
Node delta(bindings[parameter_names[1].token()]); Node delta(bindings[parameter_names[1].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'opacify' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'opacify' must be a color", color.path(), color.line());
...@@ -484,7 +484,7 @@ namespace Sass { ...@@ -484,7 +484,7 @@ namespace Sass {
} }
extern Signature fade_in_sig = "fade-in($color, $amount)"; extern Signature fade_in_sig = "fade-in($color, $amount)";
Node fade_in(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node fade_in(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
Node delta(bindings[parameter_names[1].token()]); Node delta(bindings[parameter_names[1].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'fade-in' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'fade-in' must be a color", color.path(), color.line());
...@@ -501,7 +501,7 @@ namespace Sass { ...@@ -501,7 +501,7 @@ namespace Sass {
} }
extern Signature transparentize_sig = "transparentize($color, $amount)"; extern Signature transparentize_sig = "transparentize($color, $amount)";
Node transparentize(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node transparentize(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
Node delta(bindings[parameter_names[1].token()]); Node delta(bindings[parameter_names[1].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'transparentize' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'transparentize' must be a color", color.path(), color.line());
...@@ -518,7 +518,7 @@ namespace Sass { ...@@ -518,7 +518,7 @@ namespace Sass {
} }
extern Signature fade_out_sig = "fade-out($color, $amount)"; extern Signature fade_out_sig = "fade-out($color, $amount)";
Node fade_out(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node fade_out(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
Node delta(bindings[parameter_names[1].token()]); Node delta(bindings[parameter_names[1].token()]);
if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'fade-out' must be a color", color.path(), color.line()); if (color.type() != Node::numeric_color) throw_eval_error("first argument to 'fade-out' must be a color", color.path(), color.line());
...@@ -537,7 +537,7 @@ namespace Sass { ...@@ -537,7 +537,7 @@ namespace Sass {
// Other Color Functions /////////////////////////////////////////////// // Other Color Functions ///////////////////////////////////////////////
extern Signature adjust_color_sig = "adjust-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)"; extern Signature adjust_color_sig = "adjust-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)";
Node adjust_color(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node adjust_color(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
Node r(bindings[parameter_names[1].token()]); Node r(bindings[parameter_names[1].token()]);
Node g(bindings[parameter_names[2].token()]); Node g(bindings[parameter_names[2].token()]);
...@@ -598,7 +598,7 @@ namespace Sass { ...@@ -598,7 +598,7 @@ namespace Sass {
} }
extern Signature change_color_sig = "change-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)"; extern Signature change_color_sig = "change-color($color, $red: false, $green: false, $blue: false, $hue: false, $saturation: false, $lightness: false, $alpha: false)";
Node change_color(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node change_color(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node color(bindings[parameter_names[0].token()]); Node color(bindings[parameter_names[0].token()]);
Node r(bindings[parameter_names[1].token()]); Node r(bindings[parameter_names[1].token()]);
Node g(bindings[parameter_names[2].token()]); Node g(bindings[parameter_names[2].token()]);
...@@ -661,7 +661,7 @@ namespace Sass { ...@@ -661,7 +661,7 @@ namespace Sass {
// String Functions //////////////////////////////////////////////////// // String Functions ////////////////////////////////////////////////////
extern Signature unquote_sig = "unquote($string)"; extern Signature unquote_sig = "unquote($string)";
Node unquote(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node unquote(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node cpy(new_Node(bindings[parameter_names[0].token()])); Node cpy(new_Node(bindings[parameter_names[0].token()]));
// if (cpy.type() != Node::string_constant /* && cpy.type() != Node::concatenation */) { // if (cpy.type() != Node::string_constant /* && cpy.type() != Node::concatenation */) {
// throw_eval_error("argument to unquote must be a string", cpy.path(), cpy.line()); // throw_eval_error("argument to unquote must be a string", cpy.path(), cpy.line());
...@@ -672,7 +672,7 @@ namespace Sass { ...@@ -672,7 +672,7 @@ namespace Sass {
} }
extern Signature quote_sig = "quote($string)"; extern Signature quote_sig = "quote($string)";
Node quote(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node quote(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node orig(bindings[parameter_names[0].token()]); Node orig(bindings[parameter_names[0].token()]);
switch (orig.type()) switch (orig.type())
{ {
...@@ -697,7 +697,7 @@ namespace Sass { ...@@ -697,7 +697,7 @@ namespace Sass {
// Number Functions //////////////////////////////////////////////////// // Number Functions ////////////////////////////////////////////////////
extern Signature percentage_sig = "percentage($value)"; extern Signature percentage_sig = "percentage($value)";
Node percentage(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node percentage(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node orig(bindings[parameter_names[0].token()]); Node orig(bindings[parameter_names[0].token()]);
if (orig.type() != Node::number) { if (orig.type() != Node::number) {
throw_eval_error("argument to percentage must be a unitless number", orig.path(), orig.line()); throw_eval_error("argument to percentage must be a unitless number", orig.path(), orig.line());
...@@ -706,7 +706,7 @@ namespace Sass { ...@@ -706,7 +706,7 @@ namespace Sass {
} }
extern Signature round_sig = "round($value)"; extern Signature round_sig = "round($value)";
Node round(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node round(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node orig(bindings[parameter_names[0].token()]); Node orig(bindings[parameter_names[0].token()]);
switch (orig.type()) switch (orig.type())
{ {
...@@ -735,7 +735,7 @@ namespace Sass { ...@@ -735,7 +735,7 @@ namespace Sass {
} }
extern Signature ceil_sig = "ceil($value)"; extern Signature ceil_sig = "ceil($value)";
Node ceil(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node ceil(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node orig(bindings[parameter_names[0].token()]); Node orig(bindings[parameter_names[0].token()]);
switch (orig.type()) switch (orig.type())
{ {
...@@ -764,7 +764,7 @@ namespace Sass { ...@@ -764,7 +764,7 @@ namespace Sass {
} }
extern Signature floor_sig = "floor($value)"; extern Signature floor_sig = "floor($value)";
Node floor(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node floor(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node orig(bindings[parameter_names[0].token()]); Node orig(bindings[parameter_names[0].token()]);
switch (orig.type()) switch (orig.type())
{ {
...@@ -793,7 +793,7 @@ namespace Sass { ...@@ -793,7 +793,7 @@ namespace Sass {
} }
extern Signature abs_sig = "abs($value)"; extern Signature abs_sig = "abs($value)";
Node abs(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node abs(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node orig(bindings[parameter_names[0].token()]); Node orig(bindings[parameter_names[0].token()]);
switch (orig.type()) switch (orig.type())
{ {
...@@ -824,7 +824,7 @@ namespace Sass { ...@@ -824,7 +824,7 @@ namespace Sass {
// List Functions ////////////////////////////////////////////////////// // List Functions //////////////////////////////////////////////////////
extern Signature length_sig = "length($list)"; extern Signature length_sig = "length($list)";
Node length(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node length(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node arg(bindings[parameter_names[0].token()]); Node arg(bindings[parameter_names[0].token()]);
switch (arg.type()) switch (arg.type())
{ {
...@@ -847,7 +847,7 @@ namespace Sass { ...@@ -847,7 +847,7 @@ namespace Sass {
} }
extern Signature nth_sig = "nth($list, $n)"; extern Signature nth_sig = "nth($list, $n)";
Node nth(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node nth(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node l(bindings[parameter_names[0].token()]); Node l(bindings[parameter_names[0].token()]);
Node n(bindings[parameter_names[1].token()]); Node n(bindings[parameter_names[1].token()]);
if (n.type() != Node::number) { if (n.type() != Node::number) {
...@@ -868,7 +868,7 @@ namespace Sass { ...@@ -868,7 +868,7 @@ namespace Sass {
} }
extern Signature join_sig = "join($list1, $list2, $separator: auto)"; extern Signature join_sig = "join($list1, $list2, $separator: auto)";
Node join(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node join(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
// if the args aren't lists, turn them into singleton lists // if the args aren't lists, turn them into singleton lists
Node l1(bindings[parameter_names[0].token()]); Node l1(bindings[parameter_names[0].token()]);
if (l1.type() != Node::space_list && l1.type() != Node::comma_list && l1.type() != Node::nil) { if (l1.type() != Node::space_list && l1.type() != Node::comma_list && l1.type() != Node::nil) {
...@@ -905,7 +905,7 @@ namespace Sass { ...@@ -905,7 +905,7 @@ namespace Sass {
} }
extern Signature append_sig = "append($list1, $list2, $separator: auto)"; extern Signature append_sig = "append($list1, $list2, $separator: auto)";
Node append(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node append(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node list(bindings[parameter_names[0].token()]); Node list(bindings[parameter_names[0].token()]);
switch (list.type()) switch (list.type())
{ {
...@@ -934,7 +934,7 @@ namespace Sass { ...@@ -934,7 +934,7 @@ namespace Sass {
} }
extern Signature compact_sig = "compact($arg1: false, $arg2: false, $arg3: false, $arg4: false, $arg5: false, $arg6: false, $arg7: false, $arg8: false, $arg9: false, $arg10: false, $arg11: false, $arg12: false)"; extern Signature compact_sig = "compact($arg1: false, $arg2: false, $arg3: false, $arg4: false, $arg5: false, $arg6: false, $arg7: false, $arg8: false, $arg9: false, $arg10: false, $arg11: false, $arg12: false)";
Node compact(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node compact(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
size_t num_args = bindings.current_frame.size(); size_t num_args = bindings.current_frame.size();
Node::Type sep_type = Node::comma_list; Node::Type sep_type = Node::comma_list;
Node list; Node list;
...@@ -963,7 +963,7 @@ namespace Sass { ...@@ -963,7 +963,7 @@ namespace Sass {
// Introspection Functions ///////////////////////////////////////////// // Introspection Functions /////////////////////////////////////////////
extern Signature type_of_sig = "type-of($value)"; extern Signature type_of_sig = "type-of($value)";
Node type_of(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node type_of(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node val(bindings[parameter_names[0].token()]); Node val(bindings[parameter_names[0].token()]);
Token type_name; Token type_name;
switch (val.type()) switch (val.type())
...@@ -998,7 +998,7 @@ namespace Sass { ...@@ -998,7 +998,7 @@ namespace Sass {
} }
extern Signature unit_sig = "unit($number)"; extern Signature unit_sig = "unit($number)";
Node unit(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node unit(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node val(bindings[parameter_names[0].token()]); Node val(bindings[parameter_names[0].token()]);
switch (val.type()) switch (val.type())
{ {
...@@ -1020,7 +1020,7 @@ namespace Sass { ...@@ -1020,7 +1020,7 @@ namespace Sass {
} }
extern Signature unitless_sig = "unitless($number)"; extern Signature unitless_sig = "unitless($number)";
Node unitless(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node unitless(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node val(bindings[parameter_names[0].token()]); Node val(bindings[parameter_names[0].token()]);
switch (val.type()) switch (val.type())
{ {
...@@ -1042,7 +1042,7 @@ namespace Sass { ...@@ -1042,7 +1042,7 @@ namespace Sass {
} }
extern Signature comparable_sig = "comparable($number-1, $number-2)"; extern Signature comparable_sig = "comparable($number-1, $number-2)";
Node comparable(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node comparable(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node n1(bindings[parameter_names[0].token()]); Node n1(bindings[parameter_names[0].token()]);
Node n2(bindings[parameter_names[1].token()]); Node n2(bindings[parameter_names[1].token()]);
Node::Type t1 = n1.type(); Node::Type t1 = n1.type();
...@@ -1076,7 +1076,7 @@ namespace Sass { ...@@ -1076,7 +1076,7 @@ namespace Sass {
// Boolean Functions /////////////////////////////////////////////////// // Boolean Functions ///////////////////////////////////////////////////
extern Signature not_sig = "not($value)"; extern Signature not_sig = "not($value)";
Node not_impl(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node not_impl(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node val(bindings[parameter_names[0].token()]); Node val(bindings[parameter_names[0].token()]);
if (val.type() == Node::boolean && val.boolean_value() == false) { if (val.type() == Node::boolean && val.boolean_value() == false) {
return new_Node(Node::boolean, val.path(), val.line(), true); return new_Node(Node::boolean, val.path(), val.line(), true);
...@@ -1087,7 +1087,7 @@ namespace Sass { ...@@ -1087,7 +1087,7 @@ namespace Sass {
} }
extern Signature if_sig = "if($condition, $if-true, $if-false)"; extern Signature if_sig = "if($condition, $if-true, $if-false)";
Node if_impl(const Node parameter_names, Environment& bindings, Node_Factory& new_Node) { Node if_impl(const Node parameter_names, Environment& bindings, Node_Factory& new_Node, string path, size_t line) {
Node predicate(bindings[parameter_names[0].token()]); Node predicate(bindings[parameter_names[0].token()]);
Node consequent(bindings[parameter_names[1].token()]); Node consequent(bindings[parameter_names[1].token()]);
Node alternative(bindings[parameter_names[2].token()]); Node alternative(bindings[parameter_names[2].token()]);
......
...@@ -13,7 +13,7 @@ namespace Sass { ...@@ -13,7 +13,7 @@ namespace Sass {
using std::map; using std::map;
typedef Node (*Primitive)(const Node, Environment&, Node_Factory&); typedef Node (*Primitive)(const Node, Environment&, Node_Factory&, string, size_t);
typedef const char Signature[]; typedef const char Signature[];
struct Function { struct Function {
...@@ -48,9 +48,9 @@ namespace Sass { ...@@ -48,9 +48,9 @@ namespace Sass {
Function(char* signature, Primitive ip, Context& ctx); Function(char* signature, Primitive ip, Context& ctx);
Node operator()(Environment& bindings, Node_Factory& new_Node) const Node operator()(Environment& bindings, Node_Factory& new_Node, string path, size_t line) const
{ {
if (primitive) return primitive(parameters, bindings, new_Node); if (primitive) return primitive(parameters, bindings, new_Node, path, line);
else return Node(); else return Node();
} }
...@@ -61,158 +61,158 @@ namespace Sass { ...@@ -61,158 +61,158 @@ namespace Sass {
// RGB Functions /////////////////////////////////////////////////////// // RGB Functions ///////////////////////////////////////////////////////
extern Signature rgb_sig; extern Signature rgb_sig;
Node rgb(const Node, Environment&, Node_Factory&); Node rgb(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature rgba_4_sig; extern Signature rgba_4_sig;
Node rgba_4(const Node, Environment&, Node_Factory&); Node rgba_4(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature rgba_2_sig; extern Signature rgba_2_sig;
Node rgba_2(const Node, Environment&, Node_Factory&); Node rgba_2(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature red_sig; extern Signature red_sig;
Node red(const Node, Environment&, Node_Factory&); Node red(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature green_sig; extern Signature green_sig;
Node green(const Node, Environment&, Node_Factory&); Node green(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature blue_sig; extern Signature blue_sig;
Node blue(const Node, Environment&, Node_Factory&); Node blue(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature mix_sig; extern Signature mix_sig;
Node mix(const Node, Environment&, Node_Factory&); Node mix(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// HSL Functions /////////////////////////////////////////////////////// // HSL Functions ///////////////////////////////////////////////////////
extern Signature hsl_sig; extern Signature hsl_sig;
Node hsl(const Node, Environment&, Node_Factory&); Node hsl(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature hsla_sig; extern Signature hsla_sig;
Node hsla(const Node, Environment&, Node_Factory&); Node hsla(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature hue_sig; extern Signature hue_sig;
Node hue(const Node, Environment&, Node_Factory&); Node hue(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature saturation_sig; extern Signature saturation_sig;
Node saturation(const Node, Environment&, Node_Factory&); Node saturation(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature lightness_sig; extern Signature lightness_sig;
Node lightness(const Node, Environment&, Node_Factory&); Node lightness(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature adjust_hue_sig; extern Signature adjust_hue_sig;
Node adjust_hue(const Node, Environment&, Node_Factory&); Node adjust_hue(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature lighten_sig; extern Signature lighten_sig;
Node lighten(const Node, Environment&, Node_Factory&); Node lighten(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature darken_sig; extern Signature darken_sig;
Node darken(const Node, Environment&, Node_Factory&); Node darken(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature saturate_sig; extern Signature saturate_sig;
Node saturate(const Node, Environment&, Node_Factory&); Node saturate(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature desaturate_sig; extern Signature desaturate_sig;
Node desaturate(const Node, Environment&, Node_Factory&); Node desaturate(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature grayscale_sig; extern Signature grayscale_sig;
Node grayscale(const Node, Environment&, Node_Factory&); Node grayscale(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature complement_sig; extern Signature complement_sig;
Node complement(const Node, Environment&, Node_Factory&); Node complement(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature invert_sig; extern Signature invert_sig;
Node invert(const Node, Environment&, Node_Factory&); Node invert(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// Opacity Functions /////////////////////////////////////////////////// // Opacity Functions ///////////////////////////////////////////////////
extern Signature alpha_sig; extern Signature alpha_sig;
Node alpha(const Node, Environment&, Node_Factory&); Node alpha(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature opacity_sig; extern Signature opacity_sig;
Node opacity(const Node, Environment&, Node_Factory&); Node opacity(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature opacify_sig; extern Signature opacify_sig;
Node opacify(const Node, Environment&, Node_Factory&); Node opacify(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature fade_in_sig; extern Signature fade_in_sig;
Node fade_in(const Node, Environment&, Node_Factory&); Node fade_in(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature transparentize_sig; extern Signature transparentize_sig;
Node transparentize(const Node, Environment&, Node_Factory&); Node transparentize(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature fade_out_sig; extern Signature fade_out_sig;
Node fade_out(const Node, Environment&, Node_Factory&); Node fade_out(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// Other Color Functions /////////////////////////////////////////////// // Other Color Functions ///////////////////////////////////////////////
extern Signature adjust_color_sig; extern Signature adjust_color_sig;
Node adjust_color(const Node, Environment&, Node_Factory&); Node adjust_color(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature change_color_sig; extern Signature change_color_sig;
Node change_color(const Node, Environment&, Node_Factory&); Node change_color(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// String Functions //////////////////////////////////////////////////// // String Functions ////////////////////////////////////////////////////
extern Signature unquote_sig; extern Signature unquote_sig;
Node unquote(const Node, Environment&, Node_Factory&); Node unquote(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature quote_sig; extern Signature quote_sig;
Node quote(const Node, Environment&, Node_Factory&); Node quote(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// Number Functions //////////////////////////////////////////////////// // Number Functions ////////////////////////////////////////////////////
extern Signature percentage_sig; extern Signature percentage_sig;
Node percentage(const Node, Environment&, Node_Factory&); Node percentage(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature round_sig; extern Signature round_sig;
Node round(const Node, Environment&, Node_Factory&); Node round(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature ceil_sig; extern Signature ceil_sig;
Node ceil(const Node, Environment&, Node_Factory&); Node ceil(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature floor_sig; extern Signature floor_sig;
Node floor(const Node, Environment&, Node_Factory&); Node floor(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature abs_sig; extern Signature abs_sig;
Node abs(const Node, Environment&, Node_Factory&); Node abs(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// List Functions ////////////////////////////////////////////////////// // List Functions //////////////////////////////////////////////////////
extern Signature length_sig; extern Signature length_sig;
Node length(const Node, Environment&, Node_Factory&); Node length(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature nth_sig; extern Signature nth_sig;
Node nth(const Node, Environment&, Node_Factory&); Node nth(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature join_sig; extern Signature join_sig;
Node join(const Node, Environment&, Node_Factory&); Node join(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature append_sig; extern Signature append_sig;
Node append(const Node, Environment&, Node_Factory&); Node append(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature compact_sig; extern Signature compact_sig;
Node compact(const Node, Environment&, Node_Factory&); Node compact(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// Introspection Functions ///////////////////////////////////////////// // Introspection Functions /////////////////////////////////////////////
extern Signature type_of_sig; extern Signature type_of_sig;
Node type_of(const Node, Environment&, Node_Factory&); Node type_of(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature unit_sig; extern Signature unit_sig;
Node unit(const Node, Environment&, Node_Factory&); Node unit(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature unitless_sig; extern Signature unitless_sig;
Node unitless(const Node, Environment&, Node_Factory&); Node unitless(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature comparable_sig; extern Signature comparable_sig;
Node comparable(const Node, Environment&, Node_Factory&); Node comparable(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
// Boolean Functions /////////////////////////////////////////////////// // Boolean Functions ///////////////////////////////////////////////////
extern Signature not_sig; extern Signature not_sig;
Node not_impl(const Node, Environment&, Node_Factory&); Node not_impl(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
extern Signature if_sig; extern Signature if_sig;
Node if_impl(const Node, Environment&, Node_Factory&); Node if_impl(const Node, Environment&, Node_Factory&, string path = "", size_t line = 0);
} }
......
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