コード例 #1
0
        public SynchronousFunctionModuleBuilder(
            FunctionCompilerSharedData sharedData,
            string functionName,
            IEnumerable <AsyncStateGroup> asyncStateGroups)
            : base(sharedData)
        {
            _functionName     = functionName;
            _asyncStateGroups = asyncStateGroups;

            var         parameterTypes   = GetParameterLLVMTypes();
            LLVMTypeRef syncFunctionType = LLVMSharp.LLVM.FunctionType(SharedData.Context.VoidType, parameterTypes.ToArray(), false);

            SyncFunction           = Module.AddFunction(FunctionNames.GetSynchronousFunctionName(functionName), syncFunctionType);
            SyncFunctionEntryBlock = SyncFunction.AppendBasicBlock("entry");

            foreach (AsyncStateGroup asyncStateGroup in asyncStateGroups)
            {
                LLVMBasicBlockRef groupBasicBlock    = SyncFunction.AppendBasicBlock($"{asyncStateGroup.Label}_begin");
                LLVMBasicBlockRef continueBasicBlock = asyncStateGroup.IsSkippable
                    ? SyncFunction.AppendBasicBlock($"{asyncStateGroup.Label}_continue")
                    : default(LLVMBasicBlockRef);
                LLVMBasicBlockRef endBasicBlock = asyncStateGroup.IsSkippable
                    ? SyncFunction.AppendBasicBlock($"{asyncStateGroup.Label}_end")
                    : default(LLVMBasicBlockRef);
                AsyncStateGroups[asyncStateGroup] = new AsyncStateGroupData(asyncStateGroup, SharedData.Context, SyncFunction, groupBasicBlock, continueBasicBlock, endBasicBlock, null);
            }
        }
コード例 #2
0
 public static AgendaSlideConfig AddSlide(SyncFunction syncFunction, SlidePurpose slidePurpose)
 {
     return(new AgendaSlideConfig(syncFunction, slidePurpose));
 }
コード例 #3
0
 public static AgendaSlideConfig AddSlide(SyncFunction syncFunction, SlidePurpose slidePurpose)
 {
     return new AgendaSlideConfig(syncFunction, slidePurpose);
 }
コード例 #4
0
 private AgendaSlideConfig(SyncFunction syncFunction, SlidePurpose slidePurpose)
 {
     SyncFunction = syncFunction;
     SlidePurpose = slidePurpose;
 }
コード例 #5
0
 private AgendaSlideConfig(SyncFunction syncFunction, SlidePurpose slidePurpose)
 {
     SyncFunction = syncFunction;
     SlidePurpose = slidePurpose;
 }