public void visit(ExprNode_UnaryOp node)
    {
        switch (node.Op)
        {
        case "not":
            new ExprNodeVisitor_CodeEmitor(m_stmt, typeof(int), node.Expr);
            m_stmt.ILGenerator.Emit(OpCodes.Ldc_I4_0);
            m_stmt.ILGenerator.Emit(OpCodes.Ceq);
            m_currentType = typeof(int);
            break;

        case "-":
            new ExprNodeVisitor_CodeEmitor(m_stmt, typeof(double), node.Expr);
            m_stmt.ILGenerator.Emit(OpCodes.Neg);
            m_currentType = typeof(double);
            break;

        case "#":
            new ExprNodeVisitor_CodeEmitor(m_stmt, typeof(object), node.Expr);
            m_stmt.ILGenerator.Emit(OpCodes.Callvirt, typeof(List <object>).GetMethod("get_Count"));
            m_currentType = typeof(int);
            break;

        default: Trace.Assert(false);  break;
        }
    }
Beispiel #2
0
 public void visit(ExprNode_UnaryOp node)
 {
     switch (node.Op) {
         case "not":
             new ExprNodeVisitor_CodeEmitor(m_stmt, typeof(int), node.Expr);
             m_stmt.ILGenerator.Emit(OpCodes.Ldc_I4_0);
             m_stmt.ILGenerator.Emit(OpCodes.Ceq);
             m_currentType = typeof(int);
             break;
         case "-":
             new ExprNodeVisitor_CodeEmitor(m_stmt, typeof(double), node.Expr);
             m_stmt.ILGenerator.Emit(OpCodes.Neg);
             m_currentType = typeof(double);
             break;
         case "#":
             new ExprNodeVisitor_CodeEmitor(m_stmt, typeof(object), node.Expr);
             m_stmt.ILGenerator.Emit(OpCodes.Callvirt, typeof(List<object>).GetMethod("get_Count"));
             m_currentType = typeof(int);
             break;
         default: Trace.Assert(false);  break;
     }
 }