in lib/parser.dart [1739:1806]
Declaration? processDeclaration(List<DartStyleExpression> dartStyles) {
Declaration? decl;
var start = _peekToken.span;
// IE7 hack of * before property name if so the property is IE7 or below.
var ie7 = _peekKind(TokenKind.ASTERISK);
if (ie7) {
_next();
}
// IDENT ':' expr '!important'?
if (TokenKind.isIdentifier(_peekToken.kind)) {
var propertyIdent = identifier();
var ieFilterProperty = propertyIdent.name.toLowerCase() == 'filter';
_eat(TokenKind.COLON);
var exprs = processExpr(ieFilterProperty);
var dartComposite = _styleForDart(propertyIdent, exprs, dartStyles);
// Handle !important (prio)
var importantPriority = _maybeEat(TokenKind.IMPORTANT);
decl = Declaration(propertyIdent, exprs, dartComposite, _makeSpan(start),
important: importantPriority, ie7: ie7);
} else if (_peekToken.kind == TokenKind.VAR_DEFINITION) {
_next();
Identifier? definedName;
if (_peekIdentifier()) definedName = identifier();
_eat(TokenKind.COLON);
var exprs = processExpr();
decl = VarDefinition(definedName, exprs, _makeSpan(start));
} else if (_peekToken.kind == TokenKind.DIRECTIVE_INCLUDE) {
// @include mixinName in the declaration area.
var span = _makeSpan(start);
var include = processInclude(span, eatSemiColon: false);
decl = IncludeMixinAtDeclaration(include, span);
} else if (_peekToken.kind == TokenKind.DIRECTIVE_EXTEND) {
var simpleSequences = <TreeNode>[];
_next();
var span = _makeSpan(start);
var selector = simpleSelector();
if (selector == null) {
_warning('@extends expecting simple selector name', span);
} else {
simpleSequences.add(selector);
}
if (_peekKind(TokenKind.COLON)) {
var pseudoSelector = processPseudoSelector(_peekToken.span);
if (pseudoSelector is PseudoElementSelector ||
pseudoSelector is PseudoClassSelector) {
simpleSequences.add(pseudoSelector!);
} else {
_warning('not a valid selector', span);
}
}
decl = ExtendDeclaration(simpleSequences, span);
}
return decl;
}