variable method

Node variable ()

A Variable entity, such as @fink, in

width: @fink + 2px;

We use a different parser for variable definitions, see parsers.variable.

Implementation

Node variable() {
  final int index = parserInput.i;
  String name;

  parserInput.save();
  if ((parserInput.currentChar() == '@') &&
      (name = parserInput.$re(_variableRegExp)) != null) {
    final String ch = parserInput.currentChar();
    if (ch == '(' ||
        ch == '[' && !parserInput.prevChar().contains(RegExp(r'\s'))) {
      // this may be a VariableCall lookup
      final Node result = parsers.variableCall(name);
      if (result != null) {
        parserInput.forget();
        return result;
      }
    }
    parserInput.forget();
    return Variable(name, index, fileInfo);
  }
  parserInput.restore();
  return null;

// 3.5.0 20180705
//  variable: function () {
//      var ch, name, index = parserInput.i;
//
//      parserInput.save();
//      if (parserInput.currentChar() === '@' && (name = parserInput.$re(/^@@?[\w-]+/))) {
//          ch = parserInput.currentChar();
//          if (ch === '(' || ch === '[' && !parserInput.prevChar().match(/^\s/)) {
//              // this may be a VariableCall lookup
//              var result = parsers.variableCall(name);
//              if (result) {
//                  parserInput.forget();
//                  return result;
//              }
//          }
//          parserInput.forget();
//          return new(tree.Variable)(name, index, fileInfo);
//      }
//      parserInput.restore();
//  },
}