internal override ExpressionType EmitCs(EmitCodeContext codecontext) { codecontext.WriteLine("public partial class " + ClassName + " : ExtractionObjectBase"); codecontext.WriteLine("{"); EmitCsInnerClass(codecontext.NewScope()); codecontext.WriteLine("}"); return(ExpressionType.VoidType); }
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); }
/// <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); }