LNode VarDeclExpr(out bool hasInitializer, VList < LNode > attrs)
{
TokenType la0;
LNode result = default(LNode);
// Line 807: (TT.This)?
la0 = LA0;
if (la0 == TT.This) {
var t = MatchAny();
// line 807
attrs.Add(F.Id(t));
}
var pair = VarDeclStart();
// line 809
LNode type = pair.Item1, name = pair.Item2;
// Line 812: (RestOfPropertyDefinition / VarInitializerOpt)
switch (LA0) {
case TT.At: case TT.ContextualKeyword: case TT.Forward: case TT.LambdaArrow:
case TT.LBrace: case TT.LBrack:
{
result = RestOfPropertyDefinition(type.Range.StartIndex, type, name, true);
// line 813
hasInitializer = true;
}
break;
default:
{
var nameAndInit = VarInitializerOpt(name, IsArrayType(type));
// line 816
hasInitializer = (nameAndInit != name);
int start = type.Range.StartIndex;
result = F.Call(S.Var, type, nameAndInit, start, nameAndInit.Range.EndIndex, start, start);
hasInitializer = true;
}
break;
}
result = result.PlusAttrs(attrs);
return result;
}