Пример #1
0
 protected override Completion ExecuteImpl(ExecutionEnvironment enviroment)
 {
     try
     {
         foreach (var c in ObjectType.GetConstructors())
         {
             if ((Parameters.Count > 0 && c.GetParameters().Length == Parameters.Count) ||
                 (Parameters.Count == 0 && (c.GetParameters() == null || c.GetParameters().Length == 0)))
             {
                 object[] ps = new object[Parameters.Count];
                 for (int i = 0; i < Parameters.Count; i++)
                 {
                     if (Parameters[i] == null)
                     {
                         return(Completion.Exception(Properties.Language.ParameterNullException, this));
                     }
                     try
                     {
                         var p = Parameters[i].Execute(enviroment);
                         if (p.Type != CompletionType.Value)
                         {
                             return(p);
                         }
                         ps[i] = p.ReturnValue;
                     }
                     catch (Exception e)
                     {
                         return(Completion.Exception(e.Message, Parameters[i]));
                     }
                 }
                 object value = c.Invoke(ps);
                 return(new Completion(value));
             }
         }
     }catch (Exception ex)
     {
         return(Completion.Exception(ex.Message, this));
     }
     return(Completion.Exception(Properties.Language.FailedNewException, this));
 }