Esempio n. 1
0
        /// <summary>
        /// Used by the builder.
        /// </summary>
        public TransientModule(int id, EvalKinds kind, TransientCompilationUnit /*!*/ unit, TransientAssembly /*!*/ scriptAssembly,
                               TransientModule containingModule, string sourcePath)
            : base(unit, scriptAssembly)
        {
            Debug.Assert(unit != null && scriptAssembly != null);

            this.id               = id;
            this.sourcePath       = sourcePath;
            this.kind             = kind;
            this.containingModule = containingModule;
        }
Esempio n. 2
0
		internal TransientModuleBuilder(int id, EvalKinds kind, TransientCompilationUnit/*!*/ compilationUnit,
			TransientAssemblyBuilder/*!*/ assemblyBuilder, TransientModule containingModule, string sourcePath)
            : base(id, kind, compilationUnit, assemblyBuilder.TransientAssembly, containingModule, sourcePath)
		{
			this.assemblyBuilder = assemblyBuilder;

			if (!compilationUnit.IsDynamic)
			{
				this.globalBuilder = assemblyBuilder.RealModuleBuilder.DefineType(MakeName("<Global>", true),
					TypeAttributes.SpecialName | TypeAttributes.Class | TypeAttributes.Public);
			}
			else
			{
				this.globalBuilder = null;
			}
		}
Esempio n. 3
0
        internal TransientModuleBuilder /*!*/ DefineModule(TransientAssemblyBuilder /*!*/ assemblyBuilder,
                                                           TransientCompilationUnit /*!*/ compilationUnit, int containerId, EvalKinds kind, string sourcePath)
        {
            TransientModule container = GetModule(containerId);

            int new_id;

            rwLock.EnterWriteLock();

            try
            {
                // reserve slot in the module list:
                new_id = modules.Count;
                modules.Add(null);
            }
            finally
            {
                rwLock.ExitWriteLock();
            }

            return(new TransientModuleBuilder(new_id, kind, compilationUnit, assemblyBuilder, container, sourcePath));
        }
Esempio n. 4
0
        /// <summary>
        /// Used by the builder.
        /// </summary>
        public TransientModule(int id, EvalKinds kind, TransientCompilationUnit/*!*/ unit, TransientAssembly/*!*/ scriptAssembly,
            TransientModule containingModule, string sourcePath)
            : base(unit, scriptAssembly)
        {
            Debug.Assert(unit != null && scriptAssembly != null);

            this.id = id;
            this.sourcePath = sourcePath;
            this.kind = kind;
            this.containingModule = containingModule;
        }
Esempio n. 5
0
		public ClientSourceCodeUnit(TransientCompilationUnit/*!*/ compilationUnit, string/*!*/ code, PhpSourceFile/*!*/ sourceFile,
			Encoding/*!*/ encoding, int line, int column)
			: base(compilationUnit, code, sourceFile, encoding, line, column)
		{
			this.initialState = Lexer.LexicalStates.INITIAL;
		}
Esempio n. 6
0
 public ClientSourceCodeUnit(TransientCompilationUnit /*!*/ compilationUnit, string /*!*/ code, PhpSourceFile /*!*/ sourceFile,
                             Encoding /*!*/ encoding, int line, int column)
     : base(compilationUnit, code, sourceFile, encoding, line, column)
 {
     this.initialState = Lexer.LexicalStates.INITIAL;
 }
Esempio n. 7
0
		public TransientModuleBuilder/*!*/ DefineModule(TransientCompilationUnit/*!*/ compilationUnit, bool debuggable,
			int containerId, EvalKinds kind, string sourcePath)
		{
			InitializeRealAssembly(debuggable);
			Debug.Assert(this.debuggable == debuggable);

			return TransientAssembly.DefineModule(this, compilationUnit, containerId, kind, sourcePath);
		}
Esempio n. 8
0
		/// <summary>
		/// The argument <paramref name="completeSource" /> determines whether the source code
		/// is complete PHP script file, which is a case in dynamic include in Silverlight
		/// </summary>
		public TransientCompilationUnit Build(string/*!*/ sourceCode, SourceCodeDescriptor descriptor,
			EvalKinds kind, CompilationContext/*!*/ context, ScriptContext/*!*/ scriptContext,
			DTypeDesc referringType, NamingContext namingContext, bool completeSource)
		{
			PhpSourceFile source_file = new PhpSourceFile(context.Config.Compiler.SourceRoot,
				RelativePath.ParseCanonical(descriptor.ContainingSourcePath));

			Encoding encoding = context.Config.Globalization.PageEncoding;

			TransientCompilationUnit result = new TransientCompilationUnit
				(sourceCode, source_file, encoding, namingContext, descriptor.Line, descriptor.Column, completeSource);
			if (!result.PreCompile(context, scriptContext, descriptor, kind, referringType)) return null;

			DefineGlobalType(((TransientModuleBuilder)result.ModuleBuilder).AssemblyBuilder.RealModuleBuilder);
			if (!result.Compile(context, kind)) return null;

			BakeGlobals();
			result.PostCompile(descriptor);
			return result;
		}