Inheritance: ExprNode
    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);
    }
Example #2
0
    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);
    }