Esempio n. 1
0
    public override string GenCode()
    {
        Child?.GenCode();

        string text = "";

        switch (OperatorType)
        {
        case OpType.Minus:
            text = "neg";
            break;

        case OpType.BitNot:
            text = "not";
            break;

        case OpType.LogNot:
            // Create fake node with const 1
            // Add it to stack and call bit xor with old stack top
            var helperNode = new ConstantNode(-1, ValType.Bool, true);
            helperNode.GenCode();
            text = "xor";
            break;

        case OpType.IntCast:
            text = "conv.i4";
            break;

        case OpType.DoubleCast:
            text = "conv.r8";
            break;

        default:
            Compiler.AddError(new UndefinedRuntimeError(LineNo));
            break;
        }

        Compiler.EmitCode(text);
        if (GenPop)
        {
            Compiler.EmitCode("pop", true);
        }

        return(text);
    }