コード例 #1
0
ファイル: CallFormula.cs プロジェクト: urasandesu/NTroll
 public CallFormula(Formula instance, MethodInfo mi, Formula[] arguments)
     : base()
 {
     Instance = instance;
     Method = mi.ToMethodDecl();
     arguments.AddRangeTo(Arguments);
 }
コード例 #2
0
 public Formula Visit(Formula formula)
 {
     return formula;
 }
コード例 #3
0
ファイル: ReturnFormula.cs プロジェクト: urasandesu/NTroll
 public ReturnFormula(Formula body)
 {
     Body = body;
 }
コード例 #4
0
ファイル: ConvertIncreaser.cs プロジェクト: urasandesu/NTroll
 void IncreaseIfNecessary(Formula formula, Func<Formula, ITypeDeclaration> getExpectedType, Action<Formula> increase)
 {
     if (formula != null)
     {
         var expectedType = getExpectedType(formula);
         if (!expectedType.IsValueType && formula.TypeDeclaration.IsValueType && expectedType.IsAssignableFrom(formula.TypeDeclaration))
         {
             var convert = new ConvertFormula(formula, expectedType);
             increase(convert);
         }
     }
 }
コード例 #5
0
ファイル: FormulaAdapter.g.cs プロジェクト: urasandesu/NTroll
 public virtual Formula Visit(Formula formula)
 {
     return visitor.Visit(formula);
 }
コード例 #6
0
 public ReflectiveFieldFormula(Formula instance, FieldInfo fi)
     : base(instance, fi)
 {
 }
コード例 #7
0
ファイル: ReturnFormula.g.cs プロジェクト: urasandesu/NTroll
 protected override void InitializeForCodeGeneration()
 {
     base.InitializeForCodeGeneration();
     NodeType = NodeType.Return;
     Body = default(Formula);
 }
コード例 #8
0
 public static void EvalStaticMethodCall(MethodCallExpression exp, ExpressionToFormulaState state)
 {
     EvalArguments(exp.Arguments, state);
     var arguments = new Formula[state.Arguments.Count];
     state.Arguments.MoveTo(arguments);
     state.CurrentBlock.Formulas.Push(new CallFormula(null, exp.Method, arguments));
 }
コード例 #9
0
 public static void EvalNew(NewExpression exp, ExpressionToFormulaState state)
 {
     EvalArguments(exp.Arguments, state);
     var arguments = new Formula[state.Arguments.Count];
     state.Arguments.MoveTo(arguments);
     state.CurrentBlock.Formulas.Push(new NewFormula(exp.Constructor, arguments));
 }
コード例 #10
0
 public static void EvalNewArrayInit(NewArrayExpression exp, ExpressionToFormulaState state)
 {
     EvalArguments(exp.Expressions, state);
     var arguments = new Formula[state.Arguments.Count];
     state.Arguments.MoveTo(arguments);
     state.CurrentBlock.Formulas.Push(new NewArrayInitFormula(arguments, exp.Type));
 }
コード例 #11
0
 public static void EvalMethodInfoInvoke_object_objects(MethodCallExpression exp, ExpressionToFormulaState state)
 {
     exp.Object.ConvertTo(state.InlineValueState);
     var mi = (MethodInfo)state.InlineValueState.Result;
     var instance = default(Formula);
     if (!mi.IsStatic)
     {
         EvalExpression(exp.Arguments[0], state);
         instance = state.CurrentBlock.Formulas.Pop();
     }
     var arguments = new Formula[] { };
     if (exp.Arguments[1].NodeType == ExpressionType.NewArrayInit)
     {
         EvalArguments(((NewArrayExpression)exp.Arguments[1]).Expressions, state);
         arguments = new Formula[state.Arguments.Count];
         state.Arguments.MoveTo(arguments);
     }
     else
     {
         throw new NotImplementedException();
     }
     state.CurrentBlock.Formulas.Push(new ReflectiveCallFormula(instance, mi, arguments));
 }
コード例 #12
0
 public static void EvalConstructorInfoInvoke_objects(MethodCallExpression exp, ExpressionToFormulaState state)
 {
     exp.Object.ConvertTo(state.InlineValueState);
     var ci = (ConstructorInfo)state.InlineValueState.Result;
     var arguments = new Formula[] { };
     if (exp.Arguments[0].NodeType == ExpressionType.NewArrayInit)
     {
         EvalArguments(((NewArrayExpression)exp.Arguments[0]).Expressions, state);
         arguments = new Formula[state.Arguments.Count];
         state.Arguments.MoveTo(arguments);
     }
     else if (exp.Arguments[0].NodeType == ExpressionType.Constant && ((ConstantExpression)exp.Arguments[0]).Value == null)
     {
         // discard...
     }
     else
     {
         throw new NotImplementedException();
     }
     state.CurrentBlock.Formulas.Push(new ReflectiveNewFormula(ci, arguments));
 }
コード例 #13
0
ファイル: FieldFormula.cs プロジェクト: urasandesu/NTroll
 public FieldFormula(Formula instance, FieldInfo fi)
 {
     Instance = instance;
     Member = fi.ToFieldDecl();
 }
コード例 #14
0
 public NewArrayInitFormula(Formula[] formulas, Type type)
 {
     formulas.AddRangeTo(Formulas);
     TypeDeclaration = type.ToTypeDecl();
 }
コード例 #15
0
ファイル: TypeAsFormula.cs プロジェクト: urasandesu/NTroll
 public TypeAsFormula(Formula operand, Type type)
 {
     Operand = operand;
     TypeDeclaration = type.ToTypeDecl();
 }
コード例 #16
0
ファイル: PropertyFormula.cs プロジェクト: urasandesu/NTroll
 public PropertyFormula(Formula instance, PropertyInfo pi)
 {
     Instance = instance;
     Member = pi.ToPropertyDecl();
 }
コード例 #17
0
ファイル: BinaryFormula.g.cs プロジェクト: urasandesu/NTroll
 protected override void InitializeForCodeGeneration()
 {
     base.InitializeForCodeGeneration();
     NodeType = NodeType.None;
     Left = default(Formula);
     Method = default(IMethodDeclaration);
     Right = default(Formula);
 }
コード例 #18
0
 protected override void InitializeForCodeGeneration()
 {
     base.InitializeForCodeGeneration();
     NodeType = NodeType.Conditional;
     Test = default(Formula);
     IfTrue = default(Formula);
     IfFalse = default(Formula);
 }
コード例 #19
0
 public ReflectiveNewFormula(ConstructorInfo ci, Formula[] arguments)
     : base(ci, arguments)
 {
 }
コード例 #20
0
 public ReflectivePropertyFormula(Formula instance, PropertyInfo pi)
     : base(instance, pi)
 {
 }
コード例 #21
0
ファイル: NewFormula.cs プロジェクト: urasandesu/NTroll
 public NewFormula(ConstructorInfo ci, Formula[] arguments)
 {
     Constructor = ci.ToConstructorDecl();
     arguments.AddRangeTo(Arguments);
 }