private ClassSyntax BuildMethod_GetParserAction(ClassSyntax context) { var generator = new ReadOnlyTableGenerator( data.ParserActionTable, il => il.Ldarg(0), il => il.Ldarg(1)); var args = context.Method() .Private.Static .Returning(context.Types.Int32) .Named(GetParserActionMethodName) .BeginArgs(); return(args .Argument(context.Types.Int32, args.Args.Generate()) .Argument(context.Types.Int32, args.Args.Generate()) .EndArgs() .NoOptimization .BeginBody() .Do(generator.Build) .Ret() .EndBody()); }
public void Test() { const int rows = 2; const int columns = 3; int[,] table = new int[rows, columns]; for (int r = 0; r != rows; ++r) { for (int c = 0; c != columns; ++c) { table[r, c] = r * columns + c; } } var target = new ReadOnlyTableGenerator(new MutableTable <int>(table), emit => emit.Ldarg(0), emit => emit.Ldarg(1)); var getCell = new CachedMethod <Func <int, int, int> >("TableSerializerTest.Assembly0", (emit, args) => { target.Build(emit); return(emit.Ret()); }).Delegate; for (int r = 0; r != rows; ++r) { for (int c = 0; c != columns; ++c) { Assert.AreEqual(table[r, c], getCell(r, c), "r={0}, c={1}", r, c); } } }