Exemplo n.º 1
0
 public CalledAndIndexedMemberNode(MemberNode member, CallExpressionNode call, ExpressionNode index,
                                   SourceCodePosition pos) : base(pos)
 {
     Member = member;
     Call   = call;
     Index  = index;
 }
        private CallExpressionNode BuildCallExpressionNode(LexSpan func, LexSpan lPar, SyntaxNodeOrToken args, LexSpan rPar)
        {
            var callExp = new CallExpressionNode();

            callExp.AddNode(new GlobalFunctionToken(func));
            callExp.AddNode(new ParenToken(lPar));
            callExp.AddNode(args);
            callExp.AddNode(new ParenToken(rPar));

            return(callExp);
        }
Exemplo n.º 3
0
 private EbiValueBase Evaluate(EbiScope scope, ExpressionNode expr)
 {
     return(expr switch
     {
         LiteralNode l => l.Value,
         IdentifierNode id => scope[id.Name]?.Value ?? throw new RuntimeException($"No such identifier named '{id.Name}'"),
         CallExpressionNode call => Evaluate(scope, call),
         UnaryExpressionNode un => Evaluate(scope, un),
         BinaryExpressionNode bin => Evaluate(scope, bin),
         _ => new EbiNull(),
     });
Exemplo n.º 4
0
        private CallExpressionNode Call(IdentifierNode ident)
        {
            CallExpressionNode itsAST;
            SourceCodePosition itsPos = _currentToken.SourcePosition;

            Accept(Token.TokenType.LeftParen);
            ArgumentSequenceNode itsArgs = Arguments();

            Accept(Token.TokenType.RightParen);
            itsAST = new CallExpressionNode(ident, itsArgs, itsPos);
            return(itsAST);
        }
Exemplo n.º 5
0
 public object Visit(CallExpressionNode n, object o)
 {
     Append("(");
     n.Arguments.Accept(this, null);
     if (StandardLibrary.IsStdlibMethod(n.Identifier.Value))
     {
         // if the call is to a stdlib method, append the source code position to the string such that errors
         // from external libraries can be emitted with the position of the offending Deslang code piece
         Append($", \"{n.SourcePosition}\"");
     }
     Append(")");
     return(null);
 }
Exemplo n.º 6
0
        private MemberExpressionNode MemberReference()
        {
            MemberExpressionNode itsAST;
            SourceCodePosition   itsPos  = _currentToken.SourcePosition;
            IdentifierNode       itsName = new IdentifierNode(_currentToken);

            Accept(Token.TokenType.Identifier);
            MemberNode itsMember = new SimpleMemberNode(itsName, itsPos);

            if (_currentToken.Type == Token.TokenType.LeftParen)
            {
                CallExpressionNode itsCall = Call(itsName);     // add the associated identifier to the call
                itsMember = new CalledMemberNode(itsMember, itsCall, itsPos);
                if (_currentToken.Type == Token.TokenType.LeftBracket)
                {
                    ExpressionNode itsIndex = ArrayExpression();
                    itsMember = new CalledAndIndexedMemberNode(itsMember, itsCall, itsIndex, itsPos);
                }
            }
            else if (_currentToken.Type == Token.TokenType.LeftBracket)
            {
                ExpressionNode itsIndex = ArrayExpression();
                itsMember = new IndexedMemberNode(itsMember, itsIndex, itsPos);
            }

            while (_currentToken.Type == Token.TokenType.Dot)
            {
                Accept(Token.TokenType.Dot);
                itsName = new IdentifierNode(_currentToken);
                Accept(Token.TokenType.Identifier);
                itsMember = new DotMemberNode(itsMember, itsName, itsPos);

                if (_currentToken.Type == Token.TokenType.LeftParen)
                {
                    CallExpressionNode itsCall = Call(itsName);     // add the associated identifier to the call
                    itsMember = new CalledMemberNode(itsMember, itsCall, itsPos);
                    if (_currentToken.Type == Token.TokenType.LeftBracket)
                    {
                        ExpressionNode itsIndex = ArrayExpression();
                        itsMember = new CalledAndIndexedMemberNode(itsMember, itsCall, itsIndex, itsPos);
                    }
                }
                else if (_currentToken.Type == Token.TokenType.LeftBracket)
                {
                    ExpressionNode itsIndex = ArrayExpression();
                    itsMember = new IndexedMemberNode(itsMember, itsIndex, itsPos);
                }
            }
            itsAST = new MemberExpressionNode(itsMember, itsPos);
            return(itsAST);
        }
        private CallExpressionNode BuildCallExpressionNode(
            SyntaxNodeOrToken member,
            LexSpan lPar,
            SyntaxNodeOrToken args,
            LexSpan rPar)
        {
            var callExp = new CallExpressionNode();

            callExp.AddNode(member);
            callExp.AddNode(new ParenToken(lPar));
            callExp.AddNode(args);
            callExp.AddNode(new ParenToken(rPar));

            return(callExp);
        }
Exemplo n.º 8
0
        private static PythonNode Wrap(CallExpression exp, PythonNode parent)
        {
            var result = new CallExpressionNode(exp)
            {
                Parent = parent
            };

            result.AddChild(Wrap(exp.Target, result));
            for (var i = 0; i < exp.Args.Count; i++)
            {
                var arg = exp.Args[i];
                result.AddChild(Wrap(arg, result));
            }
            return(result);
        }
Exemplo n.º 9
0
 private void Write(CallExpressionNode exp)
 {
     Write(exp.Children[0]);
     _code.Append("(");
     for (var i = 1; i < exp.Children.Count; i++)
     {
         var arg = exp.Children[i];
         Write(arg);
         if (i < exp.Children.Count - 1)
         {
             _code.Append(", ");
         }
     }
     _code.Append(")");
 }
 public virtual Value evaluate(Context cx, CallExpressionNode node)
 {
     output("<CallExpressionNode position=\"" + node.pos() + "\">");
     indent_Renamed_Field++;
     if (node.expr != null)
     {
         node.expr.evaluate(cx, this);
     }
     if (node.args != null)
     {
         node.args.evaluate(cx, this);
     }
     indent_Renamed_Field--;
     output("</CallExpressionNode>");
     return(null);
 }
Exemplo n.º 11
0
        private static void Walk([NotNull] Agent agent, [NotNull] CallExpressionNode callExpression, bool isStrict)
        {
            if (callExpression.Callee is SuperNode)
            {
                //TODO
            }
            else
            {
                //TODO
                Walk(agent, callExpression.Callee, isStrict);
            }

            foreach (var argument in callExpression.Arguments)
            {
                if (argument != null)
                {
                    Walk(agent, argument, isStrict);
                }
            }
        }
Exemplo n.º 12
0
 public CalledMemberNode(MemberNode member, CallExpressionNode call, SourceCodePosition pos)
     : base(pos)
 {
     Member = member;
     Call   = call;
 }
Exemplo n.º 13
0
 public object Visit(CallExpressionNode n, object o)
 {
     return(null);
 }
		public virtual Value evaluate(Context cx, CallExpressionNode node)
		{
			output("<CallExpressionNode position=\"" + node.pos() + "\">");
			indent_Renamed_Field++;
			if (node.expr != null)
			{
				node.expr.evaluate(cx, this);
			}
			if (node.args != null)
			{
				node.args.evaluate(cx, this);
			}
			indent_Renamed_Field--;
			output("</CallExpressionNode>");
			return null;
		}
Exemplo n.º 15
0
 private void PerformIdentificationOnCallDeclaration(CallExpressionNode callExpression)
 {
     PerformIdentification(callExpression.Identifier);
     PerformIdentification(callExpression.Parameter);
 }