public override object VisitDeclareExpression([NotNull] TinyScriptParser.DeclareExpressionContext context) { var type = GetDeclType(context, context.basicType().GetText()); foreach (var assign in context.declarators().assign()) { var name = assign.Identifier().GetText(); Variable obj; if (_variables.TryGetValue(name, out obj)) { throw context.Exception("Variable [{0}] already defined.", name); } _variables.Add(name, new Variable { Type = type }); } return(VisitDeclarators(context.declarators())); }
public override object VisitDeclareExpression([NotNull] TinyScriptParser.DeclareExpressionContext context) { var assigns = context.declarators().assign(); foreach (var assign in assigns) { var name = assign.Identifier().GetText(); VarValue obj; if (Variables.TryGetValue(name, out obj)) { if (obj.StartIndex == assign.Start.StartIndex) { return(base.VisitDeclareExpression(context)); } throw context.Exception("Variable [{0}] already defined.", name); } switch (context.basicType().GetText()) { case "decimal": Variables.Add(name, new VarValue(assign.Start.StopIndex, (decimal)0)); break; case "string": Variables.Add(name, new VarValue(assign.Start.StopIndex, "")); break; case "bool": Variables.Add(name, new VarValue(assign.Start.StopIndex, false)); break; case "var": Variables.Add(name, new VarValue(assign.Start.StopIndex, null)); break; } } return(base.VisitDeclareExpression(context)); }
/// <summary> /// Visit a parse tree produced by <see cref="TinyScriptParser.declareExpression"/>. /// <para> /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/> /// on <paramref name="context"/>. /// </para> /// </summary> /// <param name="context">The parse tree.</param> /// <return>The visitor result.</return> public virtual Result VisitDeclareExpression([NotNull] TinyScriptParser.DeclareExpressionContext context) { return(VisitChildren(context)); }