summaryrefslogtreecommitdiff
path: root/sources/scalac/atree/AInvokeStyle.java
blob: f833aad2f0c83dce78165989f2f0992b85a095d6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*     ____ ____  ____ ____  ______                                     *\
**    / __// __ \/ __// __ \/ ____/    SOcos COmpiles Scala             **
**  __\_ \/ /_/ / /__/ /_/ /\_ \       (c) 2002, LAMP/EPFL              **
** /_____/\____/\___/\____/____/                                        **
\*                                                                      */

// $Id$

package scalac.atree;

import scalac.util.Debug;

/** This class represents a method invocation style. */
public class AInvokeStyle {

    //########################################################################
    // Public Cases

    public case New;
    public case Dynamic;
    public case Static(boolean onInstance);

    //########################################################################
    // Public Constants

    public static final AInvokeStyle StaticClass    = Static(false);
    public static final AInvokeStyle StaticInstance = Static(true);

    //########################################################################
    // Public Methods

    /** Is this a new object creation? */
    public boolean isNew() {
        switch (this) {
        case New:
            return true;
        default:
            return false;
        }
    }

    /** Is this a dynamic method call? */
    public boolean isDynamic() {
        switch (this) {
        case Dynamic:
            return true;
        default:
            return false;
        }
    }

    /** Is this a static method call? */
    public boolean isStatic() {
        switch (this) {
        case Static(_):
            return true;
        default:
            return false;
        }
    }

    /** Is this an instance method call? */
    public boolean hasInstance() {
        switch (this) {
        case Dynamic:
            return true;
        case Static(boolean onInstance):
            return onInstance;
        default:
            return false;
        }
    }

    /** Returns a string representation of this style. */
    public String toString() {
        switch (this) {
        case New:
            return "new";
        case Dynamic:
            return "dynamic";
        case Static(false):
            return "static-class";
        case Static(true):
            return "static-instance";
        default:
            throw Debug.abort("unknown case", this);
        }
    }

    //########################################################################
}