コード例 #1
0
ファイル: ExecSqlCodeExpr.cs プロジェクト: flashlin/Samples
        public override void WriteToStream(IndentStream stream)
        {
            stream.Write($"{ExecToken}");
            if (ReturnVariable != null)
            {
                stream.Write(" ");
                ReturnVariable.WriteToStream(stream);
                stream.Write(" =");
            }

            stream.Write(" ");
            Name.WriteToStream(stream);

            stream.Write(" ");
            Parameters.WriteToStreamWithComma(stream);
        }
コード例 #2
0
 public override void WriteToStream(IndentStream stream)
 {
     stream.Write("CREATE FUNCTION ");
     Name.WriteToStream(stream);
     stream.Write("(");
     Arguments.WriteToStreamWithComma(stream);
     stream.WriteLine(")");
     stream.Write("RETURNS ");
     if (ReturnVariable != null)
     {
         ReturnVariable.WriteToStream(stream);
         stream.Write(" ");
     }
     ReturnType.WriteToStream(stream);
     stream.WriteLine();
     stream.WriteLine("AS BEGIN");
     Body.WriteToStream(stream);
     stream.WriteLine();
     stream.Write("END");
 }
コード例 #3
0
 public CreateMethodFrame(MethodSlot slot) : base(slot.HandlerType, (MethodInfo)slot.Method)
 {
     EventType = Method.GetEventType(null);
     ReturnVariable.OverrideName(ReturnVariable.Usage + ++_counter);
 }
コード例 #4
0
        private void BtnParse_Click(object sender, EventArgs e)
        {
            var def = txtDefinition.Text;

            if (def.IndexOf(' ') == -1)
            {
                MessageBox.Show("Unable to find return space after return type.");
                return;
            }

            var retPart   = def.Substring(0, def.IndexOf(' '));
            var type      = ParseDatatype(retPart, true, 0, out bool isArr, out UInt16 arrLen, out bool isPtr);
            var returnVar = new ReturnVariable()
            {
                Pointer = isPtr,
                Length  = isArr ? arrLen : (UInt16)1,
                Type    = type
            };

            if (returnVar.Type == null)
            {
                return;
            }

            var rest = def.Substring(def.IndexOf(' '));

            if (rest.IndexOf('(') == -1 || rest.IndexOf(')') == -1)
            {
                MessageBox.Show("No argument list found.");
                return;
            }

            var funcName = rest.Substring(0, rest.IndexOf('('));
            var sIdx     = rest.IndexOf('(') + 1;
            var eIdx     = rest.IndexOf(')');

            var args       = rest.Substring(sIdx, eIdx - sIdx).Split(',');
            var i          = 1;
            var parsedArgs = new List <Argument>();

            foreach (var a in args)
            {
                if (a == "()")
                {
                    continue;
                }

                var aspl  = a.Split(' ');
                var name  = aspl[1];
                var atype = ParseDatatype(aspl[0], false, i++, out bool aisArr, out UInt16 aarrLen, out bool aisPtr);
                parsedArgs.Add(new Argument()
                {
                    Name = name,
                    Type = atype
                });
            }


            this.func.Name       = funcName.Trim();
            this.func.ReturnType = returnVar;
            this.func.Arguments  = parsedArgs;


            txtDefinition.Text = this.func.Definition;
        }