public FunctionReference(CILConverter CILConverter, string Name, MethodInfo MethodInfo, SafeMethodTypeInfo SafeMethodTypeInfo = null) { var MethodInfoLazy = new Lazy <MethodInfo>(() => { return(MethodInfo); }); var MethodInfoCreated = MethodInfoLazy.Value; Initialize(CILConverter, Name, MethodInfoLazy, SafeMethodTypeInfo); }
public static Type CompileProgram(string CProgram, bool SaveTemp = false) { var CILConverter = new CILConverter(SaveAssembly: SaveTemp); CILConverter.Initialize("Program" + UniqueCounter++ + ".exe"); var CPreprocessor = new CPreprocessor(); CPreprocessor.PreprocessString(CProgram); var PreprocessedCProgram = CPreprocessor.TextWriter.ToString(); var CCompiler = new CCompiler(); var TranslationUnit = CParser.StaticParseTranslationUnit(PreprocessedCProgram); (CILConverter as ICConverter).ConvertTranslationUnit(CCompiler, TranslationUnit); return CILConverter.RootTypeBuilder; }
private void Initialize(CILConverter CILConverter, string Name, Lazy <MethodInfo> MethodInfoLazy, SafeMethodTypeInfo SafeMethodTypeInfo = null) { this.Name = Name; this._MethodInfoLazy = MethodInfoLazy; this.SafeMethodTypeInfo = SafeMethodTypeInfo; Type ReturnType; Type[] ParametersType; BodyFinalized = MethodInfoLazy.IsValueCreated; if (SafeMethodTypeInfo != null) { ReturnType = SafeMethodTypeInfo.ReturnType; ParametersType = SafeMethodTypeInfo.Parameters; } else { ReturnType = this.MethodInfo.ReturnType; ParametersType = this.MethodInfo.GetParameters().Select(Item => Item.ParameterType).ToArray(); } var ReturnCType = CILConverter.ConvertTypeToCType(ReturnType); var ParametersCType = new List <CType>(); foreach (var ParameterType in ParametersType) { ParametersCType.Add(CILConverter.ConvertTypeToCType(ParameterType)); } this.CFunctionType = new CFunctionType( ReturnCType, Name, ParametersCType.Select(Item => new CSymbol() { CType = Item }).ToArray() ); }
private void Initialize(CILConverter CILConverter, string Name, Lazy<MethodInfo> MethodInfoLazy, SafeMethodTypeInfo SafeMethodTypeInfo = null) { this.Name = Name; this._MethodInfoLazy = MethodInfoLazy; this.SafeMethodTypeInfo = SafeMethodTypeInfo; Type ReturnType; Type[] ParametersType; BodyFinalized = MethodInfoLazy.IsValueCreated; if (SafeMethodTypeInfo != null) { ReturnType = SafeMethodTypeInfo.ReturnType; ParametersType = SafeMethodTypeInfo.Parameters; } else { ReturnType = this.MethodInfo.ReturnType; ParametersType = this.MethodInfo.GetParameters().Select(Item => Item.ParameterType).ToArray(); } var ReturnCType = CILConverter.ConvertTypeToCType(ReturnType); var ParametersCType = new List<CType>(); foreach (var ParameterType in ParametersType) { ParametersCType.Add(CILConverter.ConvertTypeToCType(ParameterType)); } this.CFunctionType = new CFunctionType( ReturnCType, Name, ParametersCType.Select(Item => new CSymbol() { CType = Item }).ToArray() ); }
public FunctionReference(CILConverter CILConverter, string Name, Lazy <MethodInfo> MethodInfoLazy, SafeMethodTypeInfo SafeMethodTypeInfo = null) { Initialize(CILConverter, Name, MethodInfoLazy, SafeMethodTypeInfo); }
public FunctionReference(CILConverter CILConverter, string Name, MethodInfo MethodInfo, SafeMethodTypeInfo SafeMethodTypeInfo = null) { var MethodInfoLazy = new Lazy<MethodInfo>(() => { return MethodInfo; }); var MethodInfoCreated = MethodInfoLazy.Value; Initialize(CILConverter, Name, MethodInfoLazy, SafeMethodTypeInfo); }
public FunctionReference(CILConverter CILConverter, string Name, Lazy<MethodInfo> MethodInfoLazy, SafeMethodTypeInfo SafeMethodTypeInfo = null) { Initialize(CILConverter, Name, MethodInfoLazy, SafeMethodTypeInfo); }