예제 #1
0
        /// <summary>Outputs a portable lambda.</summary>
        private IWorkshopTree OutputPortable(ActionSet actionSet, IWorkshopTree[] parameterValues)
        {
            var determiner = actionSet.DeltinScript.GetComponent <LambdaGroup>();
            var builder    = new FunctionBuildController(actionSet, new CallHandler(parameterValues), determiner);

            return(builder.Call());
        }
예제 #2
0
 public SubroutineInfo(Subroutine routine, FunctionBuildController functionBuilder, IndexReference[] parameterStores, IndexReference objectStore)
 {
     Subroutine      = routine;
     FunctionBuilder = functionBuilder;
     ParameterStores = parameterStores;
     ObjectStore     = objectStore;
 }
예제 #3
0
        // IFunctionLookupTable
        public void Build(FunctionBuildController builder)
        {
            // Create the switch that chooses the lambda.
            SwitchBuilder lambdaSwitch = new SwitchBuilder(builder.ActionSet);

            foreach (IFunctionHandler option in _functionHandlers)
            {
                // The action set for the overload.
                ActionSet optionSet = builder.ActionSet.New(builder.ActionSet.IndexAssigner.CreateContained());

                // Go to next case
                lambdaSwitch.NextCase(new V_Number(_identifiers[option.UniqueIdentifier()]));

                // Add the object variables of the selected method.
                var callerObject = ((Element)builder.ActionSet.CurrentObject)[1];

                // Add the class objects.
                option.ContainingType?.AddObjectVariablesToAssigner(callerObject, optionSet.IndexAssigner);

                // then parse the block.
                builder.Subcall(optionSet.SetThis(callerObject).New(builder.ActionSet.CurrentObject), option);
            }

            // Finish the switch.
            lambdaSwitch.Finish(((Element)builder.ActionSet.CurrentObject)[0]);
        }
        // Parses the method.
        public override IWorkshopTree Parse(ActionSet actionSet, MethodCall methodCall)
        {
            actionSet = actionSet.New(actionSet.IndexAssigner.CreateContained());
            var controller = new FunctionBuildController(actionSet, methodCall, new DefaultGroupDeterminer(GetOverrideFunctionHandlers()));

            return(controller.Call());
        }
        public IWorkshopTree Invoke(ActionSet actionSet, params IWorkshopTree[] parameterValues)
        {
            var buildController = new FunctionBuildController(actionSet, new CallHandler(parameterValues), new DefaultGroupDeterminer(new IFunctionHandler[] { _functionHandler }));

            return(buildController.Build());
        }
예제 #6
0
        public IWorkshopTree Call(ActionSet actionSet, ICallHandler call)
        {
            var builder = new FunctionBuildController(actionSet, call, this);

            return(builder.Call());
        }
 // IFunctionLookupTable
 public void Build(FunctionBuildController builder) => _function.ParseInner(builder.ActionSet);
        public override void Parse(ActionSet actionSet, IWorkshopTree[] parameterValues, object[] additionalParameterData)
        {
            var builder = new FunctionBuildController(actionSet.PackThis(), new CallHandler(parameterValues), new ConstructorDeterminer(this));

            builder.Call();
        }