Esempio n. 1
0
        public override void EmitPushValue(DMObject dmObject, DMProc proc)
        {
            if (_astNode.Parameters.Length == 0 || _astNode.Parameters.Length > 4)
            {
                throw new CompileErrorException(_astNode.Location, "Invalid input() parameter count");
            }

            //Push input's four arguments, pushing null for the missing ones
            for (int i = 3; i >= 0; i--)
            {
                if (i < _astNode.Parameters.Length)
                {
                    DMASTCallParameter parameter = _astNode.Parameters[i];

                    if (parameter.Key != null)
                    {
                        throw new CompileErrorException(parameter.Location, "input() does not take named arguments");
                    }
                    DMExpression.Create(dmObject, proc, parameter.Value).EmitPushValue(dmObject, proc);
                }
                else
                {
                    proc.PushNull();
                }
            }

            proc.Prompt(_astNode.Types);
        }
Esempio n. 2
0
        public void VisitNewList(DMASTNewList newList)
        {
            DMExpression[] expressions = new DMExpression[newList.Parameters.Length];

            for (int i = 0; i < newList.Parameters.Length; i++)
            {
                DMASTCallParameter parameter = newList.Parameters[i];
                if (parameter.Name != null)
                {
                    throw new CompileErrorException(newList.Location, "newlist() does not take named arguments");
                }

                expressions[i] = DMExpression.Create(_dmObject, _proc, parameter.Value, _inferredPath);
            }

            Result = new Expressions.NewList(newList.Location, expressions);
        }