Skip to content

Commit 434327b

Browse files
committed
Merge pull request #1363 from mgreter/fixes/issue_1355
Make empty `@return` statement a parser error
2 parents d17ab21 + c522143 commit 434327b

File tree

2 files changed

+32
-15
lines changed

2 files changed

+32
-15
lines changed

src/ast.hpp

Lines changed: 29 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,21 @@ namespace Sass {
306306
SUPPORTS,
307307
ATROOT,
308308
BUBBLE,
309-
KEYFRAMERULE
309+
KEYFRAMERULE,
310+
DECLARATION,
311+
ASSIGNMENT,
312+
IMPORT_STUB,
313+
IMPORT,
314+
COMMENT,
315+
WARNING,
316+
RETURN,
317+
EXTEND,
318+
ERROR,
319+
DEBUG,
320+
WHILE,
321+
EACH,
322+
FOR,
323+
IF
310324
};
311325
private:
312326
ADD_PROPERTY(Block*, block)
@@ -496,7 +510,7 @@ namespace Sass {
496510
Declaration(ParserState pstate,
497511
String* prop, Expression* val, bool i = false)
498512
: Statement(pstate), property_(prop), value_(val), is_important_(i), is_indented_(false)
499-
{ }
513+
{ statement_type(DECLARATION); }
500514
ATTACH_OPERATIONS()
501515
};
502516

@@ -514,7 +528,7 @@ namespace Sass {
514528
bool is_default = false,
515529
bool is_global = false)
516530
: Statement(pstate), variable_(var), value_(val), is_default_(is_default), is_global_(is_global)
517-
{ }
531+
{ statement_type(ASSIGNMENT); }
518532
ATTACH_OPERATIONS()
519533
};
520534

@@ -532,7 +546,7 @@ namespace Sass {
532546
files_(vector<string>()),
533547
urls_(vector<Expression*>()),
534548
media_queries_(0)
535-
{ }
549+
{ statement_type(IMPORT); }
536550
vector<string>& files() { return files_; }
537551
vector<Expression*>& urls() { return urls_; }
538552
ATTACH_OPERATIONS()
@@ -543,7 +557,7 @@ namespace Sass {
543557
public:
544558
Import_Stub(ParserState pstate, string f)
545559
: Statement(pstate), file_name_(f)
546-
{ }
560+
{ statement_type(IMPORT_STUB); }
547561
ATTACH_OPERATIONS()
548562
};
549563

@@ -555,7 +569,7 @@ namespace Sass {
555569
public:
556570
Warning(ParserState pstate, Expression* msg)
557571
: Statement(pstate), message_(msg)
558-
{ }
572+
{ statement_type(WARNING); }
559573
ATTACH_OPERATIONS()
560574
};
561575

@@ -567,7 +581,7 @@ namespace Sass {
567581
public:
568582
Error(ParserState pstate, Expression* msg)
569583
: Statement(pstate), message_(msg)
570-
{ }
584+
{ statement_type(ERROR); }
571585
ATTACH_OPERATIONS()
572586
};
573587

@@ -579,7 +593,7 @@ namespace Sass {
579593
public:
580594
Debug(ParserState pstate, Expression* val)
581595
: Statement(pstate), value_(val)
582-
{ }
596+
{ statement_type(DEBUG); }
583597
ATTACH_OPERATIONS()
584598
};
585599

@@ -592,7 +606,7 @@ namespace Sass {
592606
public:
593607
Comment(ParserState pstate, String* txt, bool is_important)
594608
: Statement(pstate), text_(txt), is_important_(is_important)
595-
{ }
609+
{ statement_type(COMMENT); }
596610
ATTACH_OPERATIONS()
597611
};
598612

@@ -605,7 +619,7 @@ namespace Sass {
605619
public:
606620
If(ParserState pstate, Expression* pred, Block* con, Block* alt = 0)
607621
: Has_Block(pstate, con), predicate_(pred), alternative_(alt)
608-
{ }
622+
{ statement_type(IF); }
609623
ATTACH_OPERATIONS()
610624
};
611625

@@ -622,7 +636,7 @@ namespace Sass {
622636
string var, Expression* lo, Expression* hi, Block* b, bool inc)
623637
: Has_Block(pstate, b),
624638
variable_(var), lower_bound_(lo), upper_bound_(hi), is_inclusive_(inc)
625-
{ }
639+
{ statement_type(FOR); }
626640
ATTACH_OPERATIONS()
627641
};
628642

@@ -635,7 +649,7 @@ namespace Sass {
635649
public:
636650
Each(ParserState pstate, vector<string> vars, Expression* lst, Block* b)
637651
: Has_Block(pstate, b), variables_(vars), list_(lst)
638-
{ }
652+
{ statement_type(EACH); }
639653
ATTACH_OPERATIONS()
640654
};
641655

@@ -647,7 +661,7 @@ namespace Sass {
647661
public:
648662
While(ParserState pstate, Expression* pred, Block* b)
649663
: Has_Block(pstate, b), predicate_(pred)
650-
{ }
664+
{ statement_type(WHILE); }
651665
ATTACH_OPERATIONS()
652666
};
653667

@@ -659,7 +673,7 @@ namespace Sass {
659673
public:
660674
Return(ParserState pstate, Expression* val)
661675
: Statement(pstate), value_(val)
662-
{ }
676+
{ statement_type(RETURN); }
663677
ATTACH_OPERATIONS()
664678
};
665679

@@ -671,7 +685,7 @@ namespace Sass {
671685
public:
672686
Extension(ParserState pstate, Selector* s)
673687
: Statement(pstate), selector_(s)
674-
{ }
688+
{ statement_type(EXTEND); }
675689
ATTACH_OPERATIONS()
676690
};
677691

src/parser.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2128,6 +2128,9 @@ namespace Sass {
21282128

21292129
Return* Parser::parse_return_directive()
21302130
{
2131+
// check that we do not have an empty list (ToDo: check if we got all cases)
2132+
if (peek_css < alternatives < exactly < ';' >, exactly < '}' >, end_of_file > >())
2133+
{ css_error("Invalid CSS", " after ", ": expected expression (e.g. 1px, bold), was "); }
21312134
return new (ctx.mem) Return(pstate, parse_list());
21322135
}
21332136

0 commit comments

Comments
 (0)