Exemplo n.º 1
0
        protected internal override ProcedureCallNode Compile(IEnumerable<string> portNames)
        {
            ExternMacro m = new ExternMacro(
               delegate(FSharpList<Expression> args, ExecutionEnvironment environment)
               {
                   if (this.Bench.RunCancelled)
                       throw new CancelEvaluationException(false);

                   IdlePromiseDelegate<Expression> eval = delegate
                    {
                        this.Bench.InIdleThread = true;
                        dynElementSettings.SharedInstance.Bench.InitTransaction();

                        try
                        {
                            var exp = environment.Evaluate(args[0]);

                            UpdateLayoutDelegate uld = new UpdateLayoutDelegate(CallUpdateLayout);
                            Dispatcher.Invoke(uld, System.Windows.Threading.DispatcherPriority.Background, new object[] { this });

                            dynElementSettings.SharedInstance.Bench.EndTransaction();

                            this.ValidateConnections();

                            return exp;
                        }
                        catch (CancelEvaluationException ex)
                        {
                            throw ex;
                        }
                        catch (Exception ex)
                        {
                            this.Dispatcher.Invoke(new Action(
                                delegate
                                {
                                    Debug.WriteLine(ex.Message + " : " + ex.StackTrace);
                                    this.Bench.Log(ex);
                                    this.Bench.ShowElement(this);

                                    dynElementSettings.SharedInstance.Writer.WriteLine(ex.Message);
                                    dynElementSettings.SharedInstance.Writer.WriteLine(ex.StackTrace);
                                }
                            ));

                            this.Error(ex.Message);
                            return null;
                        }
                    };

                   if (dynElementSettings.SharedInstance.Bench.RunInDebug)
                   {
                       var val = environment.Evaluate(args[0]);
                       this._isDirty = false;
                       return val;
                   }

                   var result = IdlePromise<Expression>.ExecuteOnIdle(eval);

                   this.Bench.InIdleThread = false;

                   return result;
               }
            );

            return new ExternalMacroNode(m, portNames);
        }
Exemplo n.º 2
0
Arquivo: Node.cs Projeto: Dewb/Dynamo
 public ExternalMacroNode(ExternMacro m)
     : this(m, new List<string>())
 {
 }
Exemplo n.º 3
0
 public static Expression MakeMacro(ExternMacro macro)
 {
     //return Expression.NewSpecial(
      //   FuncConvert.ToFSharpFunc(
      //     delegate(FSharpFunc<Expression, Expression> c)
      //     {
      //        return FuncConvert.ToFSharpFunc(
      //           delegate(FSharpList<FSharpRef<FSharpMap<string, FSharpRef<Expression>>>> env)
      //           {
      //              return FuncConvert.ToFSharpFunc(
      //                 delegate(FSharpList<Expression> args)
      //                 {
      //                    return c.Invoke(macro(args, env));
      //                 }
      //              );
      //           }
      //        );
      //     }
      //   )
      //);
      return FScheme.makeExternMacro(new FScheme.ExternMacro(
     delegate(FSharpList<Expression> args, FSharpRef<FSharpMap<string, FSharpRef<Expression>>> env)
     {
        return macro(args, new ExecutionEnvironment(env));
     }
      ));
 }
Exemplo n.º 4
0
Arquivo: Node.cs Projeto: Dewb/Dynamo
 public ExternalMacroNode(ExternMacro m, IEnumerable<string> inputList)
     : base(inputList)
 {
     this.EntryPoint = m;
 }