Skip to content

Commit 4613f3e

Browse files
committed
[WIP] [DNM] Backport dart sass parser 14
1 parent 6a1a9ed commit 4613f3e

17 files changed

+180
-122
lines changed

src/ast.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,6 +601,7 @@ namespace Sass {
601601
c_function_(ptr->c_function_),
602602
cookie_(ptr->cookie_),
603603
is_overload_stub_(ptr->is_overload_stub_),
604+
defaultParams_(ptr->defaultParams_),
604605
signature_(ptr->signature_)
605606
{ }
606607

@@ -618,6 +619,7 @@ namespace Sass {
618619
c_function_(0),
619620
cookie_(0),
620621
is_overload_stub_(false),
622+
defaultParams_(0),
621623
signature_(0)
622624
{ }
623625

@@ -636,6 +638,7 @@ namespace Sass {
636638
c_function_(0),
637639
cookie_(0),
638640
is_overload_stub_(overload_stub),
641+
defaultParams_(0),
639642
signature_(sig)
640643
{ }
641644

@@ -653,6 +656,7 @@ namespace Sass {
653656
c_function_(c_func),
654657
cookie_(sass_function_get_cookie(c_func)),
655658
is_overload_stub_(false),
659+
defaultParams_(0),
656660
signature_(sig)
657661
{ }
658662

src/ast.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -827,6 +827,7 @@ namespace Sass {
827827
ADD_PROPERTY(Sass_Function_Entry, c_function)
828828
ADD_PROPERTY(void*, cookie)
829829
ADD_PROPERTY(bool, is_overload_stub)
830+
ADD_PROPERTY(size_t, defaultParams)
830831
ADD_PROPERTY(Signature, signature)
831832
public:
832833
Definition(ParserState pstate,

src/bind.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,11 @@ namespace Sass {
5757
}
5858
}
5959
std::stringstream msg;
60-
msg << "wrong number of arguments (" << LA << " for " << LP << ")";
61-
msg << " for `" << name << "'";
60+
msg << "Only " << LP << " ";
61+
msg << (LP == 1 ? "argument" : "arguments");
62+
msg << " allowed, but " << LA << " ";
63+
msg << (LA <= 1 ? "was" : "were");
64+
msg << " passed.";
6265
return error(msg.str(), as->pstate(), traces);
6366
}
6467
Parameter_Obj p = ps->at(ip);
@@ -243,7 +246,7 @@ namespace Sass {
243246

244247
if (!param_map.count(param)) {
245248
std::stringstream msg;
246-
msg << callee << " has no parameter named " << param;
249+
msg << "No argument named " << param << ".";
247250
error(msg.str(), a->pstate(), traces);
248251
}
249252
env->local_frame()[param] = argmap->at(key);
@@ -272,7 +275,7 @@ namespace Sass {
272275
varargs->append(a);
273276
} else {
274277
std::stringstream msg;
275-
msg << callee << " has no parameter named " << a->name();
278+
msg << "No argument named " << a->name() << ".";
276279
error(msg.str(), a->pstate(), traces);
277280
}
278281
}

src/context.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ namespace Sass {
512512

513513
void register_function(Context&, Signature sig, Native_Function f, Env* env);
514514
void register_function(Context&, Signature sig, Native_Function f, size_t arity, Env* env);
515-
void register_overload_stub(Context&, std::string name, Env* env);
515+
void register_overload_stub(Context&, std::string name, Env* env, size_t defaultParams);
516516
void register_built_in_functions(Context&, Env* env);
517517
void register_c_functions(Context&, Env* env, Sass_Function_List);
518518
void register_c_function(Context&, Env* env, Sass_Function_Entry);
@@ -763,7 +763,7 @@ namespace Sass {
763763
(*env)[ss.str()] = def;
764764
}
765765

766-
void register_overload_stub(Context& ctx, std::string name, Env* env)
766+
void register_overload_stub(Context& ctx, std::string name, Env* env, size_t defaultParams)
767767
{
768768
Definition* stub = SASS_MEMORY_NEW(Definition,
769769
ParserState("[built-in function]"),
@@ -772,6 +772,7 @@ namespace Sass {
772772
{},
773773
0,
774774
true);
775+
stub->defaultParams(defaultParams);
775776
(*env)[name + "[f]"] = stub;
776777
}
777778

@@ -781,7 +782,7 @@ namespace Sass {
781782
using namespace Functions;
782783
// RGB Functions
783784
register_function(ctx, rgb_sig, rgb, env);
784-
register_overload_stub(ctx, "rgba", env);
785+
register_overload_stub(ctx, "rgba", env, 4);
785786
register_function(ctx, rgba_4_sig, rgba_4, 4, env);
786787
register_function(ctx, rgba_2_sig, rgba_2, 2, env);
787788
register_function(ctx, red_sig, red, env);

src/error_handling.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,15 @@ namespace Sass {
4141
InvalidArgumentType::InvalidArgumentType(ParserState pstate, Backtraces traces, std::string fn, std::string arg, std::string type, const Value* value)
4242
: Base(pstate, def_msg, traces), fn(fn), arg(arg), type(type), value(value)
4343
{
44-
msg = arg + ": \"";
44+
msg = arg + ": ";
4545
if (value) msg += value->to_string(Sass_Inspect_Options());
46-
msg += "\" is not a " + type + " for `" + fn + "'";
46+
msg += " is not a " + type + ".";
4747
}
4848

4949
MissingArgument::MissingArgument(ParserState pstate, Backtraces traces, std::string fn, std::string arg, std::string fntype)
5050
: Base(pstate, def_msg, traces), fn(fn), arg(arg), fntype(fntype)
5151
{
52-
msg = fntype + " " + fn + " is missing argument " + arg + ".";
52+
msg = "Missing argument " + arg + ".";
5353
}
5454

5555
InvalidCss::InvalidCss(ParserState pstate, Backtraces traces, std::string msg)

src/eval.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1079,7 +1079,16 @@ namespace Sass {
10791079
std::string resolved_name(ss.str());
10801080
if (!env->has(resolved_name)) resolved_name = full_name + "*";
10811081
// std::cerr << "CALLING " << resolved_name << "\n";
1082-
if (!env->has(resolved_name)) error("overloaded function `" + std::string(c->name()) + "` given wrong number of arguments", c->pstate(), traces);
1082+
if (!env->has(resolved_name)) {
1083+
size_t LP = def->defaultParams();
1084+
std::stringstream msg;
1085+
msg << "Only " << LP << " ";
1086+
msg << (LP == 1 ? "argument" : "arguments");
1087+
msg << " allowed, but " << L << " ";
1088+
msg << (L <= 1 ? "was" : "were");
1089+
msg << " passed.";
1090+
error(msg.str(), c->pstate(), traces);
1091+
}
10831092
def = Cast<Definition>((*env)[resolved_name]);
10841093

10851094
}

0 commit comments

Comments
 (0)