void Imperative_Ident(out Node node) { ProtoCore.DSASM.UnaryOperator op = ProtoCore.DSASM.UnaryOperator.None; DesignScript.Parser.Imperative.IdentifierNode var = null; Expect(1); int ltype = (0 == String.Compare(t.val, "return")) ? (int)ProtoCore.PrimitiveType.kTypeReturn : (int)ProtoCore.PrimitiveType.kTypeVar; DesignScript.Parser.Imperative.IdentifierNode var2 = new DesignScript.Parser.Imperative.IdentifierNode() { // TODO Jun: Move the primitive types into a class table Col = t.col, Line = t.line, Name = t.val, type = ltype, datatype = (ProtoCore.PrimitiveType)ltype }; if (t.val == "return") var2.Return.setValue(t.col, t.line, t.val); else var2.Value = t.val; var = var2; #if ENABLE_INC_DEC_FIX if (la.kind == 66 || la.kind == 67) { Imperative_PostFixOp(out op); DesignScript.Parser.Imperative.PostFixNode pfNode = new DesignScript.Parser.Imperative.PostFixNode(); pfNode.OperatorPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode }; pfNode.Operator = op; pfNode.Identifier = var; pfNode.Line = var.Line; pfNode.Col = var.Col; var = pfNode; } #endif node = var; }
void Imperative_functioncall(out Node node) { Expect(1); DesignScript.Parser.Imperative.IdentifierNode function = new DesignScript.Parser.Imperative.IdentifierNode() { Value = t.val, Name = t.val, Col = t.col, Line = t.line }; List<Node> arglist = new List<Node>(); List<DesignScript.Parser.Imperative.IDEHelpNode> argCommaPosList = new List<DesignScript.Parser.Imperative.IDEHelpNode>(); DesignScript.Parser.Imperative.IDEHelpNode openParenPos = null; DesignScript.Parser.Imperative.IDEHelpNode closeParenPos = null; if (la.val == "(") openParenPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = la.col, Line = la.line, Value = la.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode }; Expect(9); if (StartOf(18)) { Node argNode = null; Imperative_expr(out argNode); arglist.Add(argNode); while (la.kind == 52) { Get(); DesignScript.Parser.Imperative.IDEHelpNode commaPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = t.col, Line = t.line, Value = t.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode }; argCommaPosList.Add(commaPos); Imperative_expr(out argNode); arglist.Add(argNode); } } if (la.val == ")" && openParenPos != null) closeParenPos = new DesignScript.Parser.Imperative.IDEHelpNode() { Col = la.col, Line = la.line, Value = la.val, Type = DesignScript.Parser.Imperative.IDEHelpNode.HelpNodeType.PunctuationNode }; else if (la.val != ")") openParenPos = null; Expect(10); DesignScript.Parser.Imperative.FunctionCallNode funcNode = new DesignScript.Parser.Imperative.FunctionCallNode(); funcNode.Col = function.Col; funcNode.Line = function.Line; funcNode.OpenParenPos = openParenPos; funcNode.CloseParenPos = closeParenPos; funcNode.ArgCommaPosList = argCommaPosList; funcNode.Function = function; funcNode.FormalArguments = arglist; node = funcNode; }