// var -> arr public override object VisitArrayDecl([NotNull] SLangGrammarParser.ArrayDeclContext context) { var type = Visit(context.arrayDeclType()) as SlangArrayType; var name = context.Id(); ThrowIfReservedWord(name.GetText(), ModuleData.File, name.Symbol); return(new VariableNameTableItem { IsConstant = false, Type = type, Line = name.Symbol.Line, Column = name.Symbol.Column, Name = name.GetText() }); }
public override object VisitArrayDecl([NotNull] SLangGrammarParser.ArrayDeclContext context) { var type = Visit(context.arrayDeclType()) as SlangType; var nameToken = context.Id().Symbol; var res = new VariableNameTableItem { Type = type, IsConstant = false, Column = nameToken.Column, Line = nameToken.Line, Name = nameToken.Text }; if (!inProgramBlock && currentRoutine == null) { TranslateDeclareHead(res, headerText); } TranslateDeclareHead(res, cppText); // write constructor var exps = context.arrayDeclType().exp(); int dimensionCount = exps.Length; int n = dimensionCount - 1; foreach (var exp in context.arrayDeclType().exp()) { cppText.Write("("); Visit(exp); if (n > 0) { cppText.Write(", "); cppText.Write(GetVectorTypeStart(n)); var arrType = Visit(context.arrayDeclType().scalarType()) as SlangType; cppText.Write(GetStringFromType(arrType)); cppText.Write(GetVectorTypeEnd(n)); } n--; } for (int i = 0; i < exps.Length; ++i) { cppText.Write(")"); } PutVariableIfInBlock(res); return(null); }