summaryrefslogtreecommitdiff
path: root/src/main/java/com/seaofnodes/simple/node/ToIntegerNode.java
blob: 33806300afa717fb26635b40201a7a31c514461a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.seaofnodes.simple.node;

import com.seaofnodes.simple.type.Type;
import com.seaofnodes.simple.type.TypeFloat;
import com.seaofnodes.simple.type.TypeInteger;

// Truncate toward zero, saturating overflow; NaN converts to zero.
public class ToIntegerNode extends Node {
    public ToIntegerNode(Node lhs) { super(null,lhs); }
    @Override public Tag serialTag() { return Tag.ToInteger; }
    @Override public String label() { return "ToInteger"; }
    @Override protected String format() { return "(int)%1"; }

    @Override public Type compute() {
        Type t = in(1)._type;
        if( t.isHigh() ) return TypeInteger.TOP;
        if( t instanceof TypeFloat tf && tf.isConstant() )
            return TypeInteger.constant((long)tf.value());
        return TypeInteger.BOT;
    }

    @Override public Node idealize() { return null; }
    @Override Node copy(Node lhs, Node rhs) { return new ToIntegerNode(lhs); }
}