public void visit(ExprNode_ID node) { int argIdx = m_stmt.getArg(node.Name); if (argIdx != -1) { switch (argIdx) { case 0: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_0); break; case 1: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_1); break; case 2: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_2); break; case 3: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_3); break; default: if (argIdx < 256) { m_stmt.ILGenerator.Emit(OpCodes.Ldarg_S, argIdx); } else { m_stmt.ILGenerator.Emit(OpCodes.Ldarg, argIdx); } break; } m_currentType = typeof(object); return; } var local = m_stmt.getLocal(node.Name); if (local != null) { // optimize ???? m_stmt.ILGenerator.Emit(OpCodes.Ldloc, local); m_currentType = typeof(object); return; } m_stmt.ILGenerator.Emit(OpCodes.Ldsfld, m_stmt.Emitor.GlobalField); m_stmt.ILGenerator.Emit(OpCodes.Ldstr, node.Name); m_stmt.ILGenerator.Emit(OpCodes.Callvirt, typeof(Dictionary <string, object>).GetMethod("get_Item")); m_currentType = typeof(object); }
public void visit(ExprNode_ID node) { int argIdx = m_stmt.getArg(node.Name); if (argIdx != -1) { switch (argIdx) { case 0: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_0); break; case 1: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_1); break; case 2: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_2); break; case 3: m_stmt.ILGenerator.Emit(OpCodes.Ldarg_3); break; default: if (argIdx < 256) m_stmt.ILGenerator.Emit(OpCodes.Ldarg_S, argIdx); else m_stmt.ILGenerator.Emit(OpCodes.Ldarg, argIdx); break; } m_currentType = typeof(object); return; } var local = m_stmt.getLocal(node.Name); if (local != null) { // optimize ???? m_stmt.ILGenerator.Emit(OpCodes.Ldloc, local); m_currentType = typeof(object); return; } m_stmt.ILGenerator.Emit(OpCodes.Ldsfld, m_stmt.Emitor.GlobalField); m_stmt.ILGenerator.Emit(OpCodes.Ldstr, node.Name); m_stmt.ILGenerator.Emit(OpCodes.Callvirt, typeof(Dictionary<string, object>).GetMethod("get_Item")); m_currentType = typeof(object); }