13514
|
1 /*
|
|
2 * Copyright (c) 2013 Oracle and/or its affiliates. All rights reserved. This
|
|
3 * code is released under a tri EPL/GPL/LGPL license. You can use it,
|
|
4 * redistribute it and/or modify it under the terms of the:
|
|
5 *
|
|
6 * Eclipse Public License version 1.0
|
|
7 * GNU General Public License version 2
|
|
8 * GNU Lesser General Public License version 2.1
|
|
9 */
|
|
10 package com.oracle.truffle.ruby.nodes.core;
|
|
11
|
|
12 import com.oracle.truffle.api.*;
|
|
13 import com.oracle.truffle.api.dsl.*;
|
|
14 import com.oracle.truffle.ruby.runtime.*;
|
|
15 import com.oracle.truffle.ruby.runtime.core.*;
|
|
16
|
|
17 @CoreClass(name = "NilClass")
|
|
18 public abstract class NilClassNodes {
|
|
19
|
|
20 @CoreMethod(names = "!", needsSelf = false, maxArgs = 0)
|
|
21 public abstract static class NotNode extends CoreMethodNode {
|
|
22
|
|
23 public NotNode(RubyContext context, SourceSection sourceSection) {
|
|
24 super(context, sourceSection);
|
|
25 }
|
|
26
|
|
27 public NotNode(NotNode prev) {
|
|
28 super(prev);
|
|
29 }
|
|
30
|
|
31 @Specialization
|
|
32 public boolean not() {
|
|
33 return true;
|
|
34 }
|
|
35 }
|
|
36
|
|
37 @CoreMethod(names = "==", needsSelf = false, minArgs = 1, maxArgs = 1)
|
|
38 public abstract static class EqualNode extends CoreMethodNode {
|
|
39
|
|
40 public EqualNode(RubyContext context, SourceSection sourceSection) {
|
|
41 super(context, sourceSection);
|
|
42 }
|
|
43
|
|
44 public EqualNode(EqualNode prev) {
|
|
45 super(prev);
|
|
46 }
|
|
47
|
|
48 @Specialization
|
|
49 public boolean equal(Object b) {
|
|
50 return b instanceof NilPlaceholder || b instanceof RubyNilClass;
|
|
51 }
|
|
52
|
|
53 }
|
|
54
|
|
55 @CoreMethod(names = "!=", needsSelf = false, minArgs = 1, maxArgs = 1)
|
|
56 public abstract static class NotEqualNode extends CoreMethodNode {
|
|
57
|
|
58 public NotEqualNode(RubyContext context, SourceSection sourceSection) {
|
|
59 super(context, sourceSection);
|
|
60 }
|
|
61
|
|
62 public NotEqualNode(NotEqualNode prev) {
|
|
63 super(prev);
|
|
64 }
|
|
65
|
|
66 @Specialization
|
|
67 public boolean equal(Object b) {
|
|
68 return !(b instanceof NilPlaceholder || b instanceof RubyNilClass);
|
|
69 }
|
|
70
|
|
71 }
|
|
72
|
|
73 @CoreMethod(names = "inspect", needsSelf = false, maxArgs = 0)
|
|
74 public abstract static class InpsectNode extends CoreMethodNode {
|
|
75
|
|
76 public InpsectNode(RubyContext context, SourceSection sourceSection) {
|
|
77 super(context, sourceSection);
|
|
78 }
|
|
79
|
|
80 public InpsectNode(InpsectNode prev) {
|
|
81 super(prev);
|
|
82 }
|
|
83
|
|
84 @Specialization
|
|
85 public RubyString inspect() {
|
|
86 return getContext().makeString("nil");
|
|
87 }
|
|
88 }
|
|
89
|
|
90 @CoreMethod(names = "nil?", needsSelf = false, maxArgs = 0)
|
|
91 public abstract static class NilNode extends CoreMethodNode {
|
|
92
|
|
93 public NilNode(RubyContext context, SourceSection sourceSection) {
|
|
94 super(context, sourceSection);
|
|
95 }
|
|
96
|
|
97 public NilNode(NilNode prev) {
|
|
98 super(prev);
|
|
99 }
|
|
100
|
|
101 @Specialization
|
|
102 public boolean nil() {
|
|
103 return true;
|
|
104 }
|
|
105 }
|
|
106
|
|
107 @CoreMethod(names = "to_i", needsSelf = false, maxArgs = 0)
|
|
108 public abstract static class ToINode extends CoreMethodNode {
|
|
109
|
|
110 public ToINode(RubyContext context, SourceSection sourceSection) {
|
|
111 super(context, sourceSection);
|
|
112 }
|
|
113
|
|
114 public ToINode(ToINode prev) {
|
|
115 super(prev);
|
|
116 }
|
|
117
|
|
118 @Specialization
|
|
119 public int toI() {
|
|
120 return 0;
|
|
121 }
|
|
122 }
|
|
123
|
|
124 @CoreMethod(names = "to_s", needsSelf = false, maxArgs = 0)
|
|
125 public abstract static class ToSNode extends CoreMethodNode {
|
|
126
|
|
127 public ToSNode(RubyContext context, SourceSection sourceSection) {
|
|
128 super(context, sourceSection);
|
|
129 }
|
|
130
|
|
131 public ToSNode(ToSNode prev) {
|
|
132 super(prev);
|
|
133 }
|
|
134
|
|
135 @Specialization
|
|
136 public RubyString toS() {
|
|
137 return getContext().makeString("");
|
|
138 }
|
|
139 }
|
|
140
|
|
141 }
|