Example #1
0
        private BoolRelationExpressionNode Visit(BoolRelationExpressionNode node)
        {
            var props = properties[node];

            node.e1.Visit(this);
            node.e2.Visit(this);
            var op = node.op == 1 ? "<" : ">";

            generatedCode.Add(new CodeEntity()
            {
                Code = $"if {properties[node.e1].addr} {op} {properties[node.e2].addr} goto <label:{props.trueLabel.LabelId}>"
            });
            generatedCode.Add(MakeLabeledGoto(props.falseLabel));
            return(node);
        }
Example #2
0
        private BoolRelationExpressionNode Visit(BoolRelationExpressionNode node)
        {
            Visit(node.e1);
            Visit(node.e2);
            LLVMValueRef v;

            if (node.op == 1)
            {
                v = builder.BuildICmp(LLVMIntPredicate.LLVMIntSLT, GetProperty(node.e1).addr,
                                      GetProperty(node.e2).addr);
            }
            else
            {
                v = builder.BuildICmp(LLVMIntPredicate.LLVMIntSGT, GetProperty(node.e1).addr,
                                      GetProperty(node.e2).addr);
            }

            GetProperty(node).addr = v;
            return(node);
        }
Example #3
0
        private BoolRelationExpressionNode Visit(BoolRelationExpressionNode node)
        {
            dynamic props = new ExpandoObject();

            properties.Add(node, props);
            var code = new List <CodeEntry>();

            props.code = code;
            var trueLabel  = MakeLabel();
            var falseLabel = MakeLabel();

            props.trueLabel  = trueLabel;
            props.falseLabel = falseLabel;
            code.AddRange(properties[node.e1].code);
            code.AddRange(properties[node.e2].code);
            var op = node.op == 1 ? "<" : ">";

            code.Add(new CodeEntity()
            {
                Code = $"if {properties[node.e1].addr} {op} {properties[node.e2].addr} goto <label:{trueLabel.LabelId}>"
            });
            code.Add(MakeLabeledGoto(falseLabel));
            return(node);
        }