public virtual void VisitModifierStackNode(ModifierStackNode node) { DefaultVisit(node); }
private static IEnumerable <AST.Node> ParseUserCodeCore(Core core, string expression, string postfixGuid, ref bool parseSuccess) { List <ProtoCore.AST.Node> astNodes = new List <ProtoCore.AST.Node>(); core.ResetForPrecompilation(); core.IsParsingCodeBlockNode = true; core.ParsingMode = ParseMode.AllowNonAssignment; ProtoCore.AST.Node codeBlockNode = ProtoCore.Utils.ParserUtils.ParseWithCore(expression, core); parseSuccess = true; List <ProtoCore.AST.Node> nodes = ParserUtils.GetAstNodes(codeBlockNode); Validity.Assert(nodes != null); int index = 0; foreach (var node in nodes) { ProtoCore.AST.AssociativeAST.AssociativeNode n = node as ProtoCore.AST.AssociativeAST.AssociativeNode; ProtoCore.Utils.Validity.Assert(n != null); // Append the temporaries only if it is not a function def or class decl bool isFunctionOrClassDef = n is FunctionDefinitionNode || n is ClassDeclNode; // Handle non Binary expression nodes separately if (n is ProtoCore.AST.AssociativeAST.ModifierStackNode) { core.BuildStatus.LogSemanticError("Modifier Blocks are not supported currently."); } else if (n is ProtoCore.AST.AssociativeAST.ImportNode) { core.BuildStatus.LogSemanticError("Import statements are not supported in CodeBlock Nodes."); } else if (isFunctionOrClassDef) { // Add node as it is astNodes.Add(node); } else { // Handle temporary naming for temporary Binary exp. nodes and non-assignment nodes BinaryExpressionNode ben = node as BinaryExpressionNode; if (ben != null && ben.Optr == ProtoCore.DSASM.Operator.assign) { ModifierStackNode mNode = ben.RightNode as ModifierStackNode; if (mNode != null) { core.BuildStatus.LogSemanticError("Modifier Blocks are not supported currently."); } IdentifierNode lNode = ben.LeftNode as IdentifierNode; if (lNode != null && lNode.Value == ProtoCore.DSASM.Constants.kTempProcLeftVar) { string name = string.Format("temp_{0}_{1}", index++, postfixGuid); BinaryExpressionNode newNode = new BinaryExpressionNode(new IdentifierNode(name), ben.RightNode); astNodes.Add(newNode); } else { // Add node as it is astNodes.Add(node); } } else { // These nodes are non-assignment nodes string name = string.Format("temp_{0}_{1}", index++, postfixGuid); BinaryExpressionNode newNode = new BinaryExpressionNode(new IdentifierNode(name), n); astNodes.Add(newNode); } } } return(astNodes); }