ext/libsass/src/sass_values.cpp in sassc-1.11.1 vs ext/libsass/src/sass_values.cpp in sassc-1.11.2

- old
+ new

@@ -273,63 +273,63 @@ } union Sass_Value* ADDCALL sass_value_stringify (const union Sass_Value* v, bool compressed, int precision) { - Memory_Manager mem; - Value* val = sass_value_to_ast_node(mem, v); + Value_Obj val = sass_value_to_ast_node(v); Sass_Inspect_Options options(compressed ? COMPRESSED : NESTED, precision); std::string str(val->to_string(options)); return sass_make_qstring(str.c_str()); } union Sass_Value* ADDCALL sass_value_op (enum Sass_OP op, const union Sass_Value* a, const union Sass_Value* b) { - Sass::Value* rv = 0; - Memory_Manager mem; + Sass::Value_Ptr rv = 0; try { - Value* lhs = sass_value_to_ast_node(mem, a); - Value* rhs = sass_value_to_ast_node(mem, b); + Value_Obj lhs = sass_value_to_ast_node(a); + Value_Obj rhs = sass_value_to_ast_node(b); struct Sass_Inspect_Options options(NESTED, 5); // see if it's a relational expression switch(op) { - case Sass_OP::EQ: return sass_make_boolean(Eval::eq(lhs, rhs)); - case Sass_OP::NEQ: return sass_make_boolean(!Eval::eq(lhs, rhs)); - case Sass_OP::GT: return sass_make_boolean(!Eval::lt(lhs, rhs, "gt") && !Eval::eq(lhs, rhs)); - case Sass_OP::GTE: return sass_make_boolean(!Eval::lt(lhs, rhs, "gte")); - case Sass_OP::LT: return sass_make_boolean(Eval::lt(lhs, rhs, "lt")); - case Sass_OP::LTE: return sass_make_boolean(Eval::lt(lhs, rhs, "lte") || Eval::eq(lhs, rhs)); + case Sass_OP::EQ: return sass_make_boolean(Eval::eq(&lhs, &rhs)); + case Sass_OP::NEQ: return sass_make_boolean(!Eval::eq(&lhs, &rhs)); + case Sass_OP::GT: return sass_make_boolean(!Eval::lt(&lhs, &rhs, "gt") && !Eval::eq(&lhs, &rhs)); + case Sass_OP::GTE: return sass_make_boolean(!Eval::lt(&lhs, &rhs, "gte")); + case Sass_OP::LT: return sass_make_boolean(Eval::lt(&lhs, &rhs, "lt")); + case Sass_OP::LTE: return sass_make_boolean(Eval::lt(&lhs, &rhs, "lte") || Eval::eq(&lhs, &rhs)); + case Sass_OP::AND: return ast_node_to_sass_value(lhs->is_false() ? &lhs : &rhs); + case Sass_OP::OR: return ast_node_to_sass_value(lhs->is_false() ? &rhs : &lhs); default: break; } if (sass_value_is_number(a) && sass_value_is_number(b)) { - const Number* l_n = dynamic_cast<const Number*>(lhs); - const Number* r_n = dynamic_cast<const Number*>(rhs); - rv = Eval::op_numbers(mem, op, *l_n, *r_n, options); + Number_Ptr_Const l_n = SASS_MEMORY_CAST(Number, lhs); + Number_Ptr_Const r_n = SASS_MEMORY_CAST(Number, rhs); + rv = Eval::op_numbers(op, *l_n, *r_n, options); } else if (sass_value_is_number(a) && sass_value_is_color(a)) { - const Number* l_n = dynamic_cast<const Number*>(lhs); - const Color* r_c = dynamic_cast<const Color*>(rhs); - rv = Eval::op_number_color(mem, op, *l_n, *r_c, options); + Number_Ptr_Const l_n = SASS_MEMORY_CAST(Number, lhs); + Color_Ptr_Const r_c = SASS_MEMORY_CAST(Color, rhs); + rv = Eval::op_number_color(op, *l_n, *r_c, options); } else if (sass_value_is_color(a) && sass_value_is_number(b)) { - const Color* l_c = dynamic_cast<const Color*>(lhs); - const Number* r_n = dynamic_cast<const Number*>(rhs); - rv = Eval::op_color_number(mem, op, *l_c, *r_n, options); + Color_Ptr_Const l_c = SASS_MEMORY_CAST(Color, lhs); + Number_Ptr_Const r_n = SASS_MEMORY_CAST(Number, rhs); + rv = Eval::op_color_number(op, *l_c, *r_n, options); } else if (sass_value_is_color(a) && sass_value_is_color(b)) { - const Color* l_c = dynamic_cast<const Color*>(lhs); - const Color* r_c = dynamic_cast<const Color*>(rhs); - rv = Eval::op_colors(mem, op, *l_c, *r_c, options); + Color_Ptr_Const l_c = SASS_MEMORY_CAST(Color, lhs); + Color_Ptr_Const r_c = SASS_MEMORY_CAST(Color, rhs); + rv = Eval::op_colors(op, *l_c, *r_c, options); } else /* convert other stuff to string and apply operation */ { - Value* l_v = dynamic_cast<Value*>(lhs); - Value* r_v = dynamic_cast<Value*>(rhs); - rv = Eval::op_strings(mem, op, *l_v, *r_v, options); + Value_Ptr l_v = SASS_MEMORY_CAST(Value, lhs); + Value_Ptr r_v = SASS_MEMORY_CAST(Value, rhs); + rv = Eval::op_strings(op, *l_v, *r_v, options); } // ToDo: maybe we should should return null value? if (!rv) return sass_make_error("invalid return value");