source: proto/s2k/trunk/framework/src/toolchain/s2k/lang/paramBuiltin/S2KParamBuiltinsUtil.java @ 4106

Last change on this file since 4106 was 4106, checked in by ksherdy, 4 years ago

Refactored support for sk s2k functions.

File size: 2.4 KB
Line 
1package toolchain.s2k.lang.paramBuiltin;
2
3import s2k.ast.ASTNode;
4import s2k.ast.CompoundIdentifierNode;
5import s2k.ast.IdisaFuncCallNode;
6import toolchain.s2k.ast.Accessors;
7
8public class S2KParamBuiltinsUtil {
9
10    ///////////////////////////////////////////////////////////////////////////////////
11    // builtin(node) - what builtin does this node invoke?
12    // guard invocations with isBuiltInCall
13    ///////////////////////////////////////////////////////////////////////////////////
14    public static S2KParamBuiltins builtin(ASTNode node) {
15        assert isBuiltInCall(node) : "Unknown builtin: " + Accessors.name(node);
16        CompoundIdentifierNode compound = (CompoundIdentifierNode)Accessors.nameNode((IdisaFuncCallNode)node);
17        String fullyQualifiedName = Accessors.name(compound);
18        S2KParamBuiltins builtin = S2KParamBuiltins.forName(fullyQualifiedName);
19        return builtin;
20    }
21   
22    ///////////////////////////////////////////////////////////////////////////////////
23    // isBuiltinCall(node, builtin) - is this node an invocation of the given builtin?
24    ///////////////////////////////////////////////////////////////////////////////////
25    public static boolean isBuiltInCall(ASTNode node, S2KParamBuiltins builtin) {
26        if(isBuiltInCall(node)) {
27            return builtin(node) == builtin;
28        }
29        return false;
30    }
31
32    ///////////////////////////////////////////////////////////////////////////////////
33    // isBuiltinCall(node) - is this node an invocation of a builtin?
34    ///////////////////////////////////////////////////////////////////////////////////
35    public static boolean isBuiltInCall(ASTNode node) {
36        if(!(node instanceof IdisaFuncCallNode)) {
37            return false; 
38        }
39       
40        ASTNode nameNode = Accessors.nameNode((IdisaFuncCallNode)node);
41        return isBuiltinCompoundIdentifier(nameNode);
42    }
43    private static boolean isBuiltinCompoundIdentifier(ASTNode nameNode) {
44
45        if (nameNode instanceof CompoundIdentifierNode) {
46            CompoundIdentifierNode compound = (CompoundIdentifierNode)nameNode;
47            String builtinName = Accessors.name(compound);
48            S2KParamBuiltins builtin = S2KParamBuiltins.forName(builtinName);
49
50            if (builtin != S2KParamBuiltins.NULL_BUILTIN) {
51                return true;
52            }           
53        }
54       
55        return false;
56    }
57}
Note: See TracBrowser for help on using the repository browser.