Пример #1
0
        private void ShowType(ParamNode node)
        {
            if (!_showTypes)
            {
                return;
            }
            if (node.ExprType == ExprTypeKind.None)
            {
                return;
            }

            _wrt.Write(':');
            _wrt.Write(node.ExprType.ToString());
        }
Пример #2
0
        private ParamNode ParseParam(int index)
        {
            Contracts.Assert(0 <= index);
            Token  tok = TokCur;
            string name;

            if (tok.Kind == TokKind.Ident)
            {
                name = tok.As <IdentToken>().Value;
                TidNext();
            }
            else
            {
                PostTidError(TokCur, TokKind.Ident);
                name = "<missing>";
            }

            DataViewType type;

            if (index < _types.Length)
            {
                type = _types[index];
                for (int i = 0; ; i++)
                {
                    Contracts.Assert(i < _perm.Length);
                    Contracts.Assert(0 <= _perm[i] && _perm[i] < _perm.Length);
                    if (_perm[i] == index)
                    {
                        index = i;
                        break;
                    }
                }
            }
            else
            {
                PostError(tok, "Too many parameters, expected {0}", _types.Length);
                type = null;
            }

            var res = new ParamNode(tok, name, index, type);

            if (res.ExprType == ExprTypeKind.None)
            {
                PostError(tok, "Unsupported type");
            }

            return(res);
        }
Пример #3
0
 public override void Visit(ParamNode node)
 {
     Contracts.AssertValue(node);
     _wrt.Write(node.Name);
     ShowType(node);
 }
Пример #4
0
 public override void Visit(ParamNode node)
 {
     Contracts.Assert(false);
 }
Пример #5
0
 public abstract void Visit(ParamNode node);