Esempio n. 1
0
        private ExpressionNode Visit(ExpressionNode node)
        {
            LLVMValueRef v = null;

            if (node.op == 6)
            {
                Visit(node.f);
                v = GetProperty(node.f).addr;
            }
            else if (node.op == 5)
            {
                throw new NotImplementedException();
            }
            else
            {
                Visit(node.e1);
                Visit(node.e2);
                if (node.op == 1)
                {
                    v = builder.BuildAdd(GetProperty(node.e1).addr, GetProperty(node.e2).addr);
                }
                else if (node.op == 2)
                {
                    v = builder.BuildSub(GetProperty(node.e1).addr, GetProperty(node.e2).addr);
                }
                else if (node.op == 3)
                {
                    v = builder.BuildMul((LLVMValueRef)GetProperty(node.e1).addr, (LLVMValueRef)GetProperty(node.e2).addr, "".AsSpan());
                }
                else if (node.op == 4)
                {
                    v = builder.BuildSDiv((LLVMValueRef)GetProperty(node.e1).addr, (LLVMValueRef)GetProperty(node.e2).addr, "".AsSpan());
                }
            }
            GetProperty(node).addr = v;
            return(node);
        }