コード例 #1
0
        public override dynamic Visit(WriteStatementNode node)
        {
            for (var i = 0; i < node.Arguments.Count; i++)
            {
                if (node.Arguments[i] is LValueNode lvn)
                {
                    node.Arguments[i] = new ValueOfNode
                    {
                        LValue = lvn,
                        Type   = lvn.Type,
                        Token  = lvn.Token
                    };
                }

                var argument = node.Arguments[i];
                argument.Accept(this);
                // var id = ((IdNode) argument).Id.Accept(this);

                if (!WriteStatementTypes.Includes(argument.Type.PrimitiveType))
                {
                    Context.ErrorService.Add(
                        ErrorType.Unknown,
                        argument.Token,
                        $"invalid parameter of type {argument.Type.PrimitiveType} for writeln"
                        );
                }
                // throw new Exception($"invalid parameter of type {argument.Type.PrimitiveType} for writeln");
            }

            return(null);
        }
コード例 #2
0
        public override dynamic Visit(WriteStatementNode node)
        {
            var newArguments = node.Arguments.Select(Replace).ToList();

            node.Arguments = newArguments;

            return(null);
        }
コード例 #3
0
 public abstract dynamic Visit(WriteStatementNode node);
コード例 #4
0
        public override dynamic Visit(WriteStatementNode node)
        {
            CurrentBlock.AddStatement(node);

            return(null);
        }
コード例 #5
0
 public SymConst Visit(WriteStatementNode node)
 {
     throw EvalException();
 }