| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569 |
- //
- // System.Web.Compilation.PageCompiler
- //
- // Authors:
- // Gonzalo Paniagua Javier ([email protected])
- //
- // (C) 2002,2003 Ximian, Inc (http://www.ximian.com)
- //
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using System;
- using System.CodeDom;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.Reflection;
- using System.Text;
- using System.Web.Configuration;
- using System.Web.UI;
- using System.Web.SessionState;
- using System.Web.Util;
- using System.Web.Profile;
- namespace System.Web.Compilation
- {
- class PageCompiler : TemplateControlCompiler
- {
- PageParser pageParser;
- static CodeTypeReference intRef = new CodeTypeReference (typeof (int));
- public PageCompiler (PageParser pageParser)
- : base (pageParser)
- {
- this.pageParser = pageParser;
- }
- protected override void CreateStaticFields ()
- {
- base.CreateStaticFields ();
-
- CodeMemberField fld = new CodeMemberField (typeof (object), "__fileDependencies");
- fld.Attributes = MemberAttributes.Private | MemberAttributes.Static;
- fld.InitExpression = new CodePrimitiveExpression (null);
- mainClass.Members.Add (fld);
- if (pageParser.OutputCache) {
- fld = new CodeMemberField (typeof (OutputCacheParameters), "__outputCacheSettings");
- fld.Attributes = MemberAttributes.Private | MemberAttributes.Static;
- fld.InitExpression = new CodePrimitiveExpression (null);
- mainClass.Members.Add (fld);
- }
- }
-
- protected override void CreateConstructor (CodeStatementCollection localVars,
- CodeStatementCollection trueStmt)
- {
- MainDirectiveAttribute <string> masterPageFile = pageParser.MasterPageFile;
- if (masterPageFile != null && !masterPageFile.IsExpression)
- // This is here just to trigger master page build, so that its type
- // is available when compiling the page itself.
- BuildManager.GetCompiledType (masterPageFile.Value);
- MainDirectiveAttribute <string> clientTarget;
- clientTarget = pageParser.ClientTarget;
- if (clientTarget != null) {
- CodeExpression prop;
- prop = new CodePropertyReferenceExpression (thisRef, "ClientTarget");
- CodeExpression ct = null;
- if (clientTarget.IsExpression) {
- var pi = GetFieldOrProperty (typeof (Page), "ClientTarget") as PropertyInfo;
- if (pi != null)
- ct = CompileExpression (pi, pi.PropertyType, clientTarget.UnparsedValue, false);
- }
- if (ct == null)
- ct = new CodePrimitiveExpression (clientTarget.Value);
- if (localVars == null)
- localVars = new CodeStatementCollection ();
- localVars.Add (new CodeAssignStatement (prop, ct));
- }
- ArrayList deps = pageParser.Dependencies;
- int depsCount = deps != null ? deps.Count : 0;
-
- if (depsCount > 0) {
- if (localVars == null)
- localVars = new CodeStatementCollection ();
- if (trueStmt == null)
- trueStmt = new CodeStatementCollection ();
- CodeAssignStatement assign;
- localVars.Add (
- new CodeVariableDeclarationStatement (
- typeof (string[]),
- "dependencies")
- );
- CodeVariableReferenceExpression dependencies = new CodeVariableReferenceExpression ("dependencies");
- trueStmt.Add (
- new CodeAssignStatement (dependencies, new CodeArrayCreateExpression (typeof (string), depsCount))
- );
-
- CodeArrayIndexerExpression arrayIndex;
- object o;
-
- for (int i = 0; i < depsCount; i++) {
- o = deps [i];
- arrayIndex = new CodeArrayIndexerExpression (dependencies, new CodeExpression[] {new CodePrimitiveExpression (i)});
- assign = new CodeAssignStatement (arrayIndex, new CodePrimitiveExpression (o));
- trueStmt.Add (assign);
- }
-
- CodeMethodInvokeExpression getDepsCall = new CodeMethodInvokeExpression (
- thisRef,
- "GetWrappedFileDependencies",
- new CodeExpression[] {dependencies}
- );
- assign = new CodeAssignStatement (GetMainClassFieldReferenceExpression ("__fileDependencies"), getDepsCall);
- trueStmt.Add (assign);
- }
- base.CreateConstructor (localVars, trueStmt);
- }
-
- protected override void AddInterfaces ()
- {
- base.AddInterfaces ();
- CodeTypeReference cref;
-
- if (pageParser.EnableSessionState) {
- cref = new CodeTypeReference (typeof (IRequiresSessionState));
- if (partialClass != null)
- partialClass.BaseTypes.Add (cref);
- else
- mainClass.BaseTypes.Add (cref);
- }
-
- if (pageParser.ReadOnlySessionState) {
- cref = new CodeTypeReference (typeof (IReadOnlySessionState));
- if (partialClass != null)
- partialClass.BaseTypes.Add (cref);
- else
- mainClass.BaseTypes.Add (cref);
- }
- if (pageParser.Async)
- mainClass.BaseTypes.Add (new CodeTypeReference (typeof (System.Web.IHttpAsyncHandler)));
-
- mainClass.BaseTypes.Add (new CodeTypeReference (typeof (System.Web.IHttpHandler)));
- }
- void CreateGetTypeHashCode ()
- {
- CodeMemberMethod method = new CodeMemberMethod ();
- method.ReturnType = intRef;
- method.Name = "GetTypeHashCode";
- method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
- Random rnd = new Random (pageParser.InputFile.GetHashCode ());
- method.Statements.Add (new CodeMethodReturnStatement (new CodePrimitiveExpression (rnd.Next ())));
- mainClass.Members.Add (method);
- }
- static CodeExpression GetExpressionForValueAndType (object value, Type valueType)
- {
- // Put short circuit types here
- if (valueType == typeof (TimeSpan)) {
- CodeMethodReferenceExpression mref = new CodeMethodReferenceExpression (
- new CodeTypeReferenceExpression (typeof (TimeSpan)),
- "Parse");
- return new CodeMethodInvokeExpression (
- mref,
- new CodeExpression[] { new CodePrimitiveExpression (((TimeSpan) value).ToString ()) }
- );
- }
- throw new HttpException (String.Format ("Unable to create assign expression for type '{0}'.", valueType));
- }
- static CodeAssignStatement CreatePropertyAssign (CodeExpression owner, string name, CodeExpression rhs)
- {
- return new CodeAssignStatement (new CodePropertyReferenceExpression (owner, name), rhs);
- }
-
- static CodeAssignStatement CreatePropertyAssign (CodeExpression owner, string name, object value)
- {
- CodeExpression rhs;
- if (value == null || value is string)
- rhs = new CodePrimitiveExpression (value);
- else {
- Type vt = value.GetType ();
- if (vt.IsPrimitive)
- rhs = new CodePrimitiveExpression (value);
- else
- rhs = GetExpressionForValueAndType (value, vt);
- }
-
- return CreatePropertyAssign (owner, name, rhs);
- }
- static CodeAssignStatement CreatePropertyAssign (string name, object value)
- {
- return CreatePropertyAssign (thisRef, name, value);
- }
- void AssignPropertyWithExpression <T> (CodeMemberMethod method, string name, MainDirectiveAttribute <T> value, ILocation location)
- {
- if (value == null)
- return;
- CodeAssignStatement assign;
- CodeExpression rhs = null;
-
- if (value.IsExpression) {
- var pi = GetFieldOrProperty (typeof (Page), name) as PropertyInfo;
- if (pi != null)
- rhs = CompileExpression (pi, pi.PropertyType, value.UnparsedValue, false);
- }
-
- if (rhs != null)
- assign = CreatePropertyAssign (thisRef, name, rhs);
- else
- assign = CreatePropertyAssign (name, value.Value);
- method.Statements.Add (AddLinePragma (assign, location));
- }
-
- void AddStatementsFromDirective (ControlBuilder builder, CodeMemberMethod method, ILocation location)
- {
- AssignPropertyWithExpression <string> (method, "ResponseEncoding", pageParser.ResponseEncoding, location);
- AssignPropertyWithExpression <int> (method, "CodePage", pageParser.CodePage, location);
- AssignPropertyWithExpression <int> (method, "LCID", pageParser.LCID, location);
- string contentType = pageParser.ContentType;
- if (contentType != null)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign ("ContentType", contentType), location));
- string culture = pageParser.Culture;
- if (culture != null)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign ("Culture", culture), location));
- culture = pageParser.UICulture;
- if (culture != null)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign ("UICulture", culture), location));
- string errorPage = pageParser.ErrorPage;
- if (errorPage != null)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign ("ErrorPage", errorPage), location));
- if (pageParser.HaveTrace) {
- CodeAssignStatement stmt = new CodeAssignStatement ();
- stmt.Left = new CodePropertyReferenceExpression (thisRef, "TraceEnabled");
- stmt.Right = new CodePrimitiveExpression (pageParser.Trace);
- method.Statements.Add (AddLinePragma (stmt, location));
- }
- if (pageParser.TraceMode != TraceMode.Default) {
- CodeAssignStatement stmt = new CodeAssignStatement ();
- CodeTypeReferenceExpression tm = new CodeTypeReferenceExpression ("System.Web.TraceMode");
- stmt.Left = new CodePropertyReferenceExpression (thisRef, "TraceModeValue");
- stmt.Right = new CodeFieldReferenceExpression (tm, pageParser.TraceMode.ToString ());
- method.Statements.Add (AddLinePragma (stmt, location));
- }
- if (pageParser.NotBuffer) {
- CodeAssignStatement stmt = new CodeAssignStatement ();
- stmt.Left = new CodePropertyReferenceExpression (thisRef, "Buffer");
- stmt.Right = new CodePrimitiveExpression (false);
- method.Statements.Add (AddLinePragma (stmt, location));
- }
- if (!pageParser.EnableEventValidation) {
- CodeAssignStatement stmt = new CodeAssignStatement ();
- CodePropertyReferenceExpression prop;
- prop = new CodePropertyReferenceExpression (thisRef, "EnableEventValidation");
- stmt.Left = prop;
- stmt.Right = new CodePrimitiveExpression (pageParser.EnableEventValidation);
- method.Statements.Add (AddLinePragma (stmt, location));
- }
- if (pageParser.MaintainScrollPositionOnPostBack) {
- CodeAssignStatement stmt = new CodeAssignStatement ();
- CodePropertyReferenceExpression prop;
- prop = new CodePropertyReferenceExpression (thisRef, "MaintainScrollPositionOnPostBack");
- stmt.Left = prop;
- stmt.Right = new CodePrimitiveExpression (pageParser.MaintainScrollPositionOnPostBack);
- method.Statements.Add (AddLinePragma (stmt, location));
- }
- }
- protected override void AddStatementsToConstructor (CodeConstructor ctor)
- {
- base.AddStatementsToConstructor (ctor);
- if (pageParser.OutputCache)
- OutputCacheParamsBlock (ctor);
- }
-
- protected override void AddStatementsToInitMethodTop (ControlBuilder builder, CodeMemberMethod method)
- {
- base.AddStatementsToInitMethodTop (builder, method);
-
- ILocation directiveLocation = pageParser.DirectiveLocation;
- AddStatementsFromDirective (builder, method, directiveLocation);
- CodeArgumentReferenceExpression ctrlVar = new CodeArgumentReferenceExpression("__ctrl");
- if (pageParser.EnableViewStateMacSet)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "EnableViewStateMac", pageParser.EnableViewStateMacSet), directiveLocation));
- AssignPropertyWithExpression <string> (method, "Title", pageParser.Title, directiveLocation);
- AssignPropertyWithExpression <string> (method, "MasterPageFile", pageParser.MasterPageFile, directiveLocation);
- AssignPropertyWithExpression <string> (method, "Theme", pageParser.Theme, directiveLocation);
- if (pageParser.StyleSheetTheme != null)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "StyleSheetTheme", pageParser.StyleSheetTheme), directiveLocation));
- if (pageParser.Async != false)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "AsyncMode", pageParser.Async), directiveLocation));
- if (pageParser.AsyncTimeout != -1)
- method.Statements.Add (AddLinePragma (CreatePropertyAssign (ctrlVar, "AsyncTimeout",
- TimeSpan.FromSeconds (pageParser.AsyncTimeout)), directiveLocation));
- CodeMethodInvokeExpression expr = new CodeMethodInvokeExpression (thisRef, "InitializeCulture");
- method.Statements.Add (AddLinePragma (new CodeExpressionStatement (expr), directiveLocation));
- }
- #if NET_4_0
- protected override void AddStatementsToInitMethodBottom (ControlBuilder builder, CodeMemberMethod method)
- {
- ILocation directiveLocation = pageParser.DirectiveLocation;
- AssignPropertyWithExpression <string> (method, "MetaDescription", pageParser.MetaDescription, directiveLocation);
- AssignPropertyWithExpression <string> (method, "MetaKeywords", pageParser.MetaKeywords, directiveLocation);
- }
- #endif
- protected override void PrependStatementsToFrameworkInitialize (CodeMemberMethod method)
- {
- base.PrependStatementsToFrameworkInitialize (method);
- if (pageParser.StyleSheetTheme != null)
- method.Statements.Add (CreatePropertyAssign ("StyleSheetTheme", pageParser.StyleSheetTheme));
- }
-
- protected override void AppendStatementsToFrameworkInitialize (CodeMemberMethod method)
- {
- base.AppendStatementsToFrameworkInitialize (method);
- ArrayList deps = pageParser.Dependencies;
- int depsCount = deps != null ? deps.Count : 0;
- if (depsCount > 0) {
- CodeFieldReferenceExpression fileDependencies = GetMainClassFieldReferenceExpression ("__fileDependencies");
- method.Statements.Add (
- new CodeMethodInvokeExpression (
- thisRef,
- "AddWrappedFileDependencies",
- new CodeExpression[] {fileDependencies})
- );
- }
- if (pageParser.OutputCache) {
- CodeMethodReferenceExpression init = new CodeMethodReferenceExpression (thisRef, "InitOutputCache");
- CodeMethodInvokeExpression invoke = new CodeMethodInvokeExpression (init, GetMainClassFieldReferenceExpression ("__outputCacheSettings"));
- method.Statements.Add (invoke);
- }
- if (pageParser.ValidateRequest) {
- CodeMethodInvokeExpression expr = new CodeMethodInvokeExpression ();
- CodePropertyReferenceExpression prop;
- prop = new CodePropertyReferenceExpression (thisRef, "Request");
- expr.Method = new CodeMethodReferenceExpression (prop, "ValidateInput");
- method.Statements.Add (expr);
- }
- }
- CodeAssignStatement AssignOutputCacheParameter (CodeVariableReferenceExpression variable, string propName, object value)
- {
- var ret = new CodeAssignStatement ();
- ret.Left = new CodeFieldReferenceExpression (variable, propName);
- if (value is OutputCacheLocation)
- ret.Right = new CodeFieldReferenceExpression (
- new CodeTypeReferenceExpression (new CodeTypeReference (typeof (OutputCacheLocation), CodeTypeReferenceOptions.GlobalReference)),
- value.ToString ()
- );
- else
- ret.Right = new CodePrimitiveExpression (value);
- return ret;
- }
-
- void OutputCacheParamsBlock (CodeMemberMethod method)
- {
- var statements = new List <CodeStatement> ();
- var localSettingsDecl = new CodeVariableDeclarationStatement (typeof (OutputCacheParameters), "outputCacheSettings");
- var localSettings = new CodeVariableReferenceExpression ("outputCacheSettings");
-
- statements.Add (localSettingsDecl);
- statements.Add (
- new CodeAssignStatement (
- localSettings,
- new CodeObjectCreateExpression (typeof (OutputCacheParameters), new CodeExpression[] {})
- )
- );
-
- TemplateParser.OutputCacheParsedParams parsed = pageParser.OutputCacheParsedParameters;
- if ((parsed & TemplateParser.OutputCacheParsedParams.CacheProfile) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "CacheProfile", pageParser.OutputCacheCacheProfile));
- statements.Add (AssignOutputCacheParameter (localSettings, "Duration", pageParser.OutputCacheDuration));
- if ((parsed & TemplateParser.OutputCacheParsedParams.Location) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "Location", pageParser.OutputCacheLocation));
- if ((parsed & TemplateParser.OutputCacheParsedParams.NoStore) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "NoStore", pageParser.OutputCacheNoStore));
- if ((parsed & TemplateParser.OutputCacheParsedParams.SqlDependency) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "SqlDependency", pageParser.OutputCacheSqlDependency));
- if ((parsed & TemplateParser.OutputCacheParsedParams.VaryByContentEncodings) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "VaryByContentEncoding", pageParser.OutputCacheVaryByContentEncodings));
- if ((parsed & TemplateParser.OutputCacheParsedParams.VaryByControl) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "VaryByControl", pageParser.OutputCacheVaryByControls));
- if ((parsed & TemplateParser.OutputCacheParsedParams.VaryByCustom) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "VaryByCustom", pageParser.OutputCacheVaryByCustom));
- if ((parsed & TemplateParser.OutputCacheParsedParams.VaryByHeader) != 0)
- statements.Add (AssignOutputCacheParameter (localSettings, "VaryByHeader", pageParser.OutputCacheVaryByHeader));
- statements.Add (AssignOutputCacheParameter (localSettings, "VaryByParam", pageParser.OutputCacheVaryByParam));
- CodeFieldReferenceExpression outputCacheSettings = GetMainClassFieldReferenceExpression ("__outputCacheSettings");
- statements.Add (new CodeAssignStatement (outputCacheSettings, localSettings));
-
- var cond = new CodeConditionStatement (
- new CodeBinaryOperatorExpression (
- outputCacheSettings,
- CodeBinaryOperatorType.IdentityEquality,
- new CodePrimitiveExpression (null)
- ),
- statements.ToArray ()
- );
- method.Statements.Add (cond);
- }
- void CreateStronglyTypedProperty (Type type, string name)
- {
- if (type == null)
- return;
-
- CodeMemberProperty mprop = new CodeMemberProperty ();
- mprop.Name = name;
- mprop.Type = new CodeTypeReference (type);
- mprop.Attributes = MemberAttributes.Public | MemberAttributes.New;
- CodeExpression prop = new CodePropertyReferenceExpression (new CodeBaseReferenceExpression (), name);
- prop = new CodeCastExpression (type, prop);
- mprop.GetStatements.Add (new CodeMethodReturnStatement (prop));
- if (partialClass != null)
- partialClass.Members.Add (mprop);
- else
- mainClass.Members.Add (mprop);
- AddReferencedAssembly (type.Assembly);
- }
-
- protected internal override void CreateMethods ()
- {
- base.CreateMethods ();
- CreateProfileProperty ();
- CreateStronglyTypedProperty (pageParser.MasterType, "Master");
- CreateStronglyTypedProperty (pageParser.PreviousPageType, "PreviousPage");
- CreateGetTypeHashCode ();
- if (pageParser.Async)
- CreateAsyncMethods ();
- }
- void CreateAsyncMethods ()
- {
- CodeMemberMethod method = new CodeMemberMethod ();
- CodeParameterDeclarationExpression arg;
- CodeMethodInvokeExpression invoke;
- // public virtual System.IAsyncResult BeginProcessRequest(System.Web.HttpContext context, System.AsyncCallback cb, object data);
- method.ReturnType = new CodeTypeReference (typeof (IAsyncResult));
- method.Name = "BeginProcessRequest";
- method.Attributes = MemberAttributes.Public;
-
- arg = new CodeParameterDeclarationExpression ();
- arg.Type = new CodeTypeReference (typeof (HttpContext));
- arg.Name = "context";
- method.Parameters.Add (arg);
- arg = new CodeParameterDeclarationExpression ();
- arg.Type = new CodeTypeReference (typeof (AsyncCallback));
- arg.Name = "cb";
- method.Parameters.Add (arg);
- arg = new CodeParameterDeclarationExpression ();
- arg.Type = new CodeTypeReference (typeof (object));
- arg.Name = "data";
- method.Parameters.Add (arg);
- invoke = new CodeMethodInvokeExpression (thisRef, "AsyncPageBeginProcessRequest");
- invoke.Parameters.Add (new CodeArgumentReferenceExpression ("context"));
- invoke.Parameters.Add (new CodeArgumentReferenceExpression ("cb"));
- invoke.Parameters.Add (new CodeArgumentReferenceExpression ("data"));
- method.Statements.Add (new CodeMethodReturnStatement (invoke));
- mainClass.Members.Add (method);
- // public virtual void EndProcessRequest(System.IAsyncResult ar);
- method = new CodeMemberMethod ();
- method.ReturnType = new CodeTypeReference (typeof (void));
- method.Name = "EndProcessRequest";
- method.Attributes = MemberAttributes.Public;
- arg = new CodeParameterDeclarationExpression ();
- arg.Type = new CodeTypeReference (typeof (IAsyncResult));
- arg.Name = "ar";
- method.Parameters.Add (arg);
- invoke = new CodeMethodInvokeExpression (thisRef, "AsyncPageEndProcessRequest");
- invoke.Parameters.Add (new CodeArgumentReferenceExpression ("ar"));
- method.Statements.Add (invoke);
- mainClass.Members.Add (method);
- // public override void ProcessRequest(System.Web.HttpContext context);
- method = new CodeMemberMethod ();
- method.ReturnType = new CodeTypeReference (typeof (void));
- method.Name = "ProcessRequest";
- method.Attributes = MemberAttributes.Public | MemberAttributes.Override;
- arg = new CodeParameterDeclarationExpression ();
- arg.Type = new CodeTypeReference (typeof (HttpContext));
- arg.Name = "context";
- method.Parameters.Add (arg);
-
- invoke = new CodeMethodInvokeExpression (new CodeBaseReferenceExpression (), "ProcessRequest");
- invoke.Parameters.Add (new CodeArgumentReferenceExpression ("context"));
- method.Statements.Add (invoke);
- mainClass.Members.Add (method);
- }
-
- public static Type CompilePageType (PageParser pageParser)
- {
- PageCompiler compiler = new PageCompiler (pageParser);
- return compiler.GetCompiledType ();
- }
- }
- }
|