Exemplo n.º 1
0
    internal bool IsEquivalent(ESIR_NodeKind kind, ESIR_NodeValue value)
    {
        if (kind != nodeKind)
        {
            return(false);
        }

        return(nodeValue.Equals(value));
    }
Exemplo n.º 2
0
    public static ESIR_LiteralExpression LiteralExpression(ESIR_NodeKind kind, ESIR_ValueNode value)
    {
        if (kind < ESIR_NodeKind.LiteralInt || kind > ESIR_NodeKind.LiteralChar)
        {
            throw new ArgumentOutOfRangeException(nameof(kind), "Kind is not an literal expression.");
        }

        return(LiteralExpressionInternal(kind, value));
    }
Exemplo n.º 3
0
    public static bool IsBinaryComparison(this ESIR_NodeKind kind)
    {
        return(kind switch {
            ESIR_NodeKind.BinaryExprLesserThan => true,
            ESIR_NodeKind.BinaryExprGreaterThan => true,
            ESIR_NodeKind.BinaryExprLesserThanEqual => true,
            ESIR_NodeKind.BinaryExprGreaterThanEqual => true,

            ESIR_NodeKind.BinaryExprEquals => true,
            ESIR_NodeKind.BinaryExprNotEquals => true,

            _ => false,
        });
Exemplo n.º 4
0
    private static ESIR_LiteralExpression LiteralExpressionInternal(ESIR_NodeKind kind, ESIR_ValueNode?value)
    {
        var node = ESIR_NodeCache.Shared.TryGetNode(kind, value, out var hash);

        if (node is not null)
        {
            return((ESIR_LiteralExpression)node);
        }

        var ret = new ESIR_LiteralExpression(kind, value);

        if (hash >= 0)
        {
            ESIR_NodeCache.Shared.AddNode(ret, hash);
        }

        return(ret);
    }
Exemplo n.º 5
0
    public static ESIR_UnaryExpression UnaryExpression(ESIR_NodeKind kind, ESIR_Expression inner)
    {
        if (kind < ESIR_NodeKind.UnaryNegative || kind > ESIR_NodeKind.UnaryPostDecrement)
        {
            throw new ArgumentOutOfRangeException(nameof(kind), "Kind is not an unary expression.");
        }

        var node = ESIR_NodeCache.Shared.TryGetNode(kind, inner, out var hash);

        if (node is not null)
        {
            return((ESIR_UnaryExpression)node);
        }

        var ret = new ESIR_UnaryExpression(kind, inner);

        if (hash >= 0)
        {
            ESIR_NodeCache.Shared.AddNode(ret, hash);
        }

        return(ret);
    }
Exemplo n.º 6
0
    public static ESIR_SimpleBinaryExpression SimpleBinaryExpression(ESIR_NodeKind kind, ESIR_Expression left, ESIR_Expression right)
    {
        if (kind < ESIR_NodeKind.BinaryExprConcat || kind > ESIR_NodeKind.BinaryExprLogicalOr)
        {
            throw new ArgumentOutOfRangeException(nameof(kind), "Kind is not a simple binary expression.");
        }

        var node = ESIR_NodeCache.Shared.TryGetNode(kind, left, right, out var hash);

        if (node is not null)
        {
            return((ESIR_SimpleBinaryExpression)node);
        }

        var ret = new ESIR_SimpleBinaryExpression(kind, left, right);

        if (hash >= 0)
        {
            ESIR_NodeCache.Shared.AddNode(ret, hash);
        }

        return(ret);
    }
Exemplo n.º 7
0
 internal ESIR_SimpleBinaryExpression(ESIR_NodeKind op, ESIR_Expression left, ESIR_Expression right)
 {
     kind      = op;
     leftNode  = left;
     rightNode = right;
 }
Exemplo n.º 8
0
 internal ESIR_LiteralExpression(ESIR_NodeKind op, ESIR_ValueNode?value)
 {
     kind      = op;
     valueNode = value;
 }
Exemplo n.º 9
0
 internal ESIR_UnaryExpression(ESIR_NodeKind op, ESIR_Expression inner)
 {
     kind      = op;
     innerNode = inner;
 }
Exemplo n.º 10
0
 private static ESIR_ValueNode ValueNode(ESIR_NodeKind kind, ESIR_NodeValue value)
 => ESIR_ValueNodeCache.Shared.GetNode(kind, value);
Exemplo n.º 11
0
 internal ESIR_ValueNode(ESIR_NodeKind kind, ESIR_NodeValue value)
 {
     nodeKind  = kind;
     nodeValue = value;
 }