Skip to content

Commit 4403cbc

Browse files
committed
Replace undefined.equal?(obj) with TrufflePrimitive.undefined?(obj)
1 parent 2913c62 commit 4403cbc

32 files changed

+149
-179
lines changed

src/main/java/org/truffleruby/core/IsUndefinedNode.java

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/main/java/org/truffleruby/core/basicobject/BasicObjectNodes.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -527,8 +527,8 @@ protected DynamicObject allocate(DynamicObject rubyClass) {
527527

528528
}
529529

530-
@NodeChild(value = "value", type = RubyNode.class)
531530
@Primitive(name = "check_frozen")
531+
@NodeChild(value = "value", type = RubyNode.class)
532532
public static abstract class CheckFrozenNode extends PrimitiveNode {
533533

534534
public static CheckFrozenNode create() {
@@ -555,4 +555,15 @@ protected Object check(Object value,
555555
}
556556
}
557557

558+
@Primitive(name = "undefined?")
559+
@NodeChild(value = "value", type = RubyNode.class)
560+
public static abstract class IsUndefinedNode extends PrimitiveNode {
561+
562+
@Specialization
563+
protected boolean isUndefined(Object value) {
564+
return value == NotProvided.INSTANCE;
565+
}
566+
}
567+
568+
558569
}

src/main/java/org/truffleruby/parser/BodyTranslator.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@
2727
import org.truffleruby.builtins.PrimitiveNodeConstructor;
2828
import org.truffleruby.core.CoreLibrary;
2929
import org.truffleruby.core.IsNilNode;
30-
import org.truffleruby.core.IsUndefinedNode;
3130
import org.truffleruby.core.array.ArrayAppendOneNodeGen;
3231
import org.truffleruby.core.array.ArrayConcatNode;
3332
import org.truffleruby.core.array.ArrayDropTailNode;
@@ -512,16 +511,6 @@ public RubyNode visitCallNode(CallParseNode node) {
512511
return addNewlineIfNeeded(node, ret);
513512
}
514513

515-
if (receiver instanceof VCallParseNode // undefined.equal?(obj)
516-
&& ((VCallParseNode) receiver).getName().equals("undefined") && inCore() &&
517-
methodName.equals("equal?")) {
518-
RubyNode argument = translateArgumentsAndBlock(sourceSection, null, node.getArgsNode(), methodName)
519-
.getArguments()[0];
520-
final RubyNode ret = new IsUndefinedNode(argument);
521-
ret.unsafeSetSourceSection(sourceSection);
522-
return addNewlineIfNeeded(node, ret);
523-
}
524-
525514
final RubyNode translated = translateCallNode(node, false, false, false);
526515

527516
// TODO CS 23-Apr-19 I've tried to design logic so we never try to assign source sections twice but can't figure it out here

src/main/ruby/truffleruby/core/array.rb

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def <=>(other)
109109

110110
def *(count)
111111
result = TrufflePrimitive.array_mul(self, count)
112-
if !undefined.equal?(result)
112+
if !TrufflePrimitive.undefined?(result)
113113
result
114114
elsif str = Truffle::Type.rb_check_convert_type(count, String, :to_str)
115115
join(str)
@@ -120,7 +120,7 @@ def *(count)
120120

121121
def ==(other)
122122
result = TrufflePrimitive.array_equal self, other
123-
unless undefined.equal?(result)
123+
unless TrufflePrimitive.undefined?(result)
124124
return result
125125
end
126126

@@ -146,7 +146,7 @@ def ==(other)
146146
end
147147

148148
private def element_reference_fallback(start, length)
149-
if undefined.equal?(length)
149+
if TrufflePrimitive.undefined?(length)
150150
arg = start
151151
case arg
152152
when Range
@@ -181,7 +181,7 @@ def ==(other)
181181
end
182182

183183
private def element_set_fallback(index, length, value)
184-
if undefined.equal?(value)
184+
if TrufflePrimitive.undefined?(value)
185185
value = length
186186
if Range === index
187187
index = TrufflePrimitive.range_to_int_range(index)
@@ -308,7 +308,7 @@ def combination(num)
308308

309309
def count(item = undefined)
310310
seq = 0
311-
if !undefined.equal?(item)
311+
if !TrufflePrimitive.undefined?(item)
312312
each { |o| seq += 1 if item == o }
313313
elsif block_given?
314314
each { |o| seq += 1 if yield(o) }
@@ -378,7 +378,7 @@ def each_index
378378

379379
def eql?(other)
380380
result = TrufflePrimitive.array_eql self, other
381-
unless undefined.equal?(result)
381+
unless TrufflePrimitive.undefined?(result)
382382
return result
383383
end
384384

@@ -409,12 +409,12 @@ def fetch(idx, default=undefined)
409409

410410
if idx < 0 or idx >= size
411411
if block_given?
412-
warn 'block supersedes default value argument', uplevel: 1 unless undefined.equal?(default)
412+
warn 'block supersedes default value argument', uplevel: 1 unless TrufflePrimitive.undefined?(default)
413413

414414
return yield(orig)
415415
end
416416

417-
return default unless undefined.equal?(default)
417+
return default unless TrufflePrimitive.undefined?(default)
418418

419419
raise IndexError, "index #{idx} out of bounds"
420420
end
@@ -426,25 +426,25 @@ def fetch(idx, default=undefined)
426426
TrufflePrimitive.check_frozen self
427427

428428
if block_given?
429-
unless undefined.equal?(c)
429+
unless TrufflePrimitive.undefined?(c)
430430
raise ArgumentError, 'wrong number of arguments'
431431
end
432432
one = a
433433
two = b
434434
else
435-
if undefined.equal?(a)
435+
if TrufflePrimitive.undefined?(a)
436436
raise ArgumentError, 'wrong number of arguments'
437437
end
438438
obj = a
439439
one = b
440440
two = c
441441
end
442442

443-
if undefined.equal?(one) || !one
443+
if TrufflePrimitive.undefined?(one) || !one
444444
left = 0
445445
right = size
446446
elsif one.kind_of? Range
447-
raise TypeError, 'length invalid with range' unless undefined.equal?(two)
447+
raise TypeError, 'length invalid with range' unless TrufflePrimitive.undefined?(two)
448448

449449
left = Truffle::Type.coerce_to_collection_length one.begin
450450
left += size if left < 0
@@ -460,7 +460,7 @@ def fetch(idx, default=undefined)
460460
left += size if left < 0
461461
left = 0 if left < 0
462462

463-
if !undefined.equal?(two) and two
463+
if !TrufflePrimitive.undefined?(two) and two
464464
begin
465465
right = Truffle::Type.coerce_to_collection_length two
466466
rescue ArgumentError
@@ -497,7 +497,7 @@ def fetch(idx, default=undefined)
497497
end
498498

499499
def first(n = undefined)
500-
return at(0) if undefined.equal?(n)
500+
return at(0) if TrufflePrimitive.undefined?(n)
501501

502502
n = Truffle::Type.coerce_to_collection_index(n)
503503
raise ArgumentError, 'Size must be positive' if n < 0
@@ -681,7 +681,7 @@ def keep_if(&block)
681681
end
682682

683683
def last(n=undefined)
684-
if undefined.equal?(n)
684+
if TrufflePrimitive.undefined?(n)
685685
return at(-1)
686686
elsif size < 1
687687
return []
@@ -703,7 +703,7 @@ def permutation(num=undefined, &block)
703703
end
704704
end
705705

706-
if undefined.equal? num
706+
if TrufflePrimitive.undefined? num
707707
num = size
708708
else
709709
num = Truffle::Type.coerce_to_collection_index num
@@ -738,7 +738,7 @@ def permutation(num=undefined, &block)
738738

739739
def permutation_size(num)
740740
n = self.size
741-
if undefined.equal? num
741+
if TrufflePrimitive.undefined? num
742742
k = self.size
743743
else
744744
k = Truffle::Type.coerce_to_collection_index num
@@ -938,7 +938,7 @@ def reverse_each
938938
end
939939

940940
def rindex(obj=undefined)
941-
if undefined.equal?(obj)
941+
if TrufflePrimitive.undefined?(obj)
942942
return to_enum(:rindex, obj) unless block_given?
943943

944944
i = size - 1
@@ -1000,9 +1000,9 @@ def rand(size)
10001000
end
10011001

10021002
def sample(count=undefined, options=undefined)
1003-
return at Kernel.rand(size) if undefined.equal? count
1003+
return at Kernel.rand(size) if TrufflePrimitive.undefined? count
10041004

1005-
if undefined.equal? options
1005+
if TrufflePrimitive.undefined? options
10061006
if o = Truffle::Type.rb_check_convert_type(count, Hash, :to_hash)
10071007
options = o
10081008
count = nil
@@ -1133,7 +1133,7 @@ def shuffle!(options = undefined)
11331133

11341134
random_generator = Kernel
11351135

1136-
unless undefined.equal? options
1136+
unless TrufflePrimitive.undefined? options
11371137
options = Truffle::Type.coerce_to options, Hash, :to_hash
11381138
random_generator = options[:random] if options[:random].respond_to?(:rand)
11391139
end
@@ -1565,7 +1565,7 @@ def reverse!
15651565
def slice!(start, length=undefined)
15661566
TrufflePrimitive.check_frozen self
15671567

1568-
if undefined.equal? length
1568+
if TrufflePrimitive.undefined? length
15691569
if start.kind_of? Range
15701570
range = start
15711571
out = self[range]

src/main/ruby/truffleruby/core/complex.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def self.convert(real, imag = undefined)
4343
if nil.equal?(real) || nil.equal?(imag)
4444
raise TypeError, 'cannot convert nil into Complex'
4545
end
46-
imag = nil if undefined.equal?(imag)
46+
imag = nil if TrufflePrimitive.undefined?(imag)
4747

4848
if check_real?(real) && check_real?(imag)
4949
return new(real, imag)

src/main/ruby/truffleruby/core/dir.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ class Dir
4343
def initialize(path, options=undefined)
4444
@path = Truffle::Type.coerce_to_path path
4545

46-
if undefined.equal? options
46+
if TrufflePrimitive.undefined? options
4747
enc = nil
4848
else
4949
options = Truffle::Type.coerce_to options, Hash, :to_hash

0 commit comments

Comments
 (0)