Пример #1
0
        internal override ExpressionType EmitCs(EmitCodeContext codecontext)
        {
            codecontext.WriteLine("public partial class " + ClassName + " : ExtractionObjectBase");
            codecontext.WriteLine("{");
            EmitCsInnerClass(codecontext.NewScope());
            codecontext.WriteLine("}");

            return(ExpressionType.VoidType);
        }
Пример #2
0
        internal override ExpressionType EmitCs(EmitCodeContext codecontext)
        {
            if (Body != null)
            {
                codecontext.WriteLine("// " + DeclMethodName);
                codecontext.WriteLine("private static void " + GeneratedMethodName + "(DataContext _datacontext, LocalVariables _parameters)");
                codecontext.WriteLine("{");

                EmitCodeContext bodycontext = codecontext.NewScope();

                // declare parameters as local variables
                foreach (var x in MethodArguments)
                {
                    // declare variable from _parameters argument
                    // checks for declaration duplicity
                    bodycontext.DeclareLocalVar(
                        x.VariableType,
                        x.VariableName,
                        new CustomExpression(x.Position, x.VariableType, "(" + x.VariableType.CsArgumentTypeName + ")_parameters[\"" + x.VariableName + "\"]")
                        );
                }

                // declare special scope variable
                bodycontext.WriteLine("ScopesStack " + scopeLocalVarName + " = new ScopesStack(_datacontext, null);");

                // emit method body
                Body.EmitCs(bodycontext);

                //
                codecontext.WriteLine("}" + codecontext.Output.NewLine);

                return(ExpressionType.VoidType);
            }
            else if (BodyCSharp != null)
            {
                codecontext.WriteLine("// " + DeclMethodName);
                codecontext.WriteLine("private static " + ReturnType.CsArgumentTypeName + " " + GeneratedMethodName + "(" + CsArgList + ")");
                codecontext.WriteLine("{");
                string[] lines = BodyCSharp.Split(new string[] { codecontext.Output.NewLine }, StringSplitOptions.None);
                foreach (var line in lines)
                {
                    codecontext.WriteLine(line);
                }
                codecontext.WriteLine("}");

                return(ReturnType);
            }


            return(ExpressionType.VoidType);
        }
Пример #3
0
        /// <summary>
        /// Emit the C# source code.
        /// </summary>
        /// <param name="output">Output stream.</param>
        /// <param name="level">The level of code indent, default 0.</param>
        /// <param name="declaredVariables">List of variables declared in the current context and their type.</param>
        internal override ExpressionType EmitCs(EmitCodeContext codecontext)
        {
            codecontext.WriteLine("/*");
            codecontext.WriteLine(" * Generated LinqToWeb context");
            codecontext.WriteLine(" * " + DateTime.Now.ToString());
            codecontext.WriteLine(" */");
            codecontext.WriteLine();
            codecontext.WriteLine("using System;");
            codecontext.WriteLine("using System.Collections.Generic;");
            codecontext.WriteLine("using System.Text;");
            codecontext.WriteLine("using System.Diagnostics;");
            codecontext.WriteLine("using linqtoweb.Core.datacontext;");
            codecontext.WriteLine("using linqtoweb.Core.extraction;");
            codecontext.WriteLine("using linqtoweb.Core.methods;");
            codecontext.WriteLine("using linqtoweb.Core.storage;");
            codecontext.WriteLine();
            codecontext.WriteLine("namespace " + codecontext.NamespaceName);
            codecontext.WriteLine("{");

            EmitCodeContext indentc = codecontext.NewScope();

            indentc.WriteLine("public partial class " + codecontext.ContextName + " : ExtractionContext");
            indentc.WriteLine("{");

            Declarations.EmitCs(indentc.NewScope());

            // emit initialize, emit vars (use arguments from main methods), constructors
            EmitCs_Init(indentc.NewScope());

            indentc.WriteLine("}");

            codecontext.WriteLine("}");


            return(ExpressionType.VoidType);
        }