-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Truffle] Introduce BooleanCastWithDefaultNode which cast and allow a…
… default for NotProvided. * Reduce the number of specializations from 3 to 1.
- 9.4.12.0
- 9.4.11.0
- 9.4.10.0
- 9.4.9.0
- 9.4.8.0
- 9.4.7.0
- 9.4.6.0
- 9.4.5.0
- 9.4.4.0
- 9.4.3.0
- 9.4.2.0
- 9.4.1.0
- 9.4.0.0
- 9.3.15.0
- 9.3.14.0
- 9.3.13.0
- 9.3.12.0
- 9.3.11.0
- 9.3.10.0
- 9.3.9.0
- 9.3.8.0
- 9.3.7.0
- 9.3.6.0
- 9.3.5.0
- 9.3.4.0
- 9.3.3.0
- 9.3.2.0
- 9.3.1.0
- 9.3.0.0
- 9.2.21.0
- 9.2.20.1
- 9.2.20.0
- 9.2.19.0
- 9.2.18.0
- 9.2.17.0
- 9.2.16.0
- 9.2.15.0
- 9.2.14.0
- 9.2.13.0
- 9.2.12.0
- 9.2.11.1
- 9.2.11.0
- 9.2.10.0
- 9.2.9.0
- 9.2.8.0
- 9.2.7.0
- 9.2.6.0
- 9.2.5.0
- 9.2.4.1
- 9.2.4.0
- 9.2.3.0
- 9.2.2.0
- 9.2.1.0
- 9.2.0.0
- 9.1.17.0
- 9.1.16.0
- 9.1.15.0
- 9.1.14.0
- 9.1.13.0
- 9.1.12.0
- 9.1.11.0
- 9.1.10.0
- 9.1.9.0
- 9.1.8.0
- 9.1.7.0
- 9.1.6.0
- 9.1.5.0
- 9.1.4.0
- 9.1.3.0
- 9.1.2.0
- 9.1.1.0
- 9.1.0.0
- 9.0.5.0
- 9.0.4.0
- 9.0.3.0
- 9.0.1.0
- 9.0.0.0
- 9.0.0.0.rc2
Showing
6 changed files
with
207 additions
and
184 deletions.
There are no files selected for viewing
75 changes: 75 additions & 0 deletions
75
truffle/src/main/java/org/jruby/truffle/nodes/cast/BooleanCastWithDefaultNode.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
/* | ||
* Copyright (c) 2013, 2015 Oracle and/or its affiliates. All rights reserved. This | ||
* code is released under a tri EPL/GPL/LGPL license. You can use it, | ||
* redistribute it and/or modify it under the terms of the: | ||
* | ||
* Eclipse Public License version 1.0 | ||
* GNU General Public License version 2 | ||
* GNU Lesser General Public License version 2.1 | ||
*/ | ||
package org.jruby.truffle.nodes.cast; | ||
|
||
import com.oracle.truffle.api.dsl.NodeChild; | ||
import com.oracle.truffle.api.dsl.Specialization; | ||
import com.oracle.truffle.api.frame.VirtualFrame; | ||
import com.oracle.truffle.api.source.SourceSection; | ||
|
||
import org.jruby.truffle.nodes.RubyNode; | ||
import org.jruby.truffle.runtime.NotProvided; | ||
import org.jruby.truffle.runtime.RubyContext; | ||
import org.jruby.truffle.runtime.core.RubyBasicObject; | ||
|
||
/** | ||
* Casts a value into a boolean and defaults to the given value if not provided. | ||
*/ | ||
@NodeChild(value = "value", type = RubyNode.class) | ||
public abstract class BooleanCastWithDefaultNode extends RubyNode { | ||
|
||
private final boolean defaultValue; | ||
|
||
public BooleanCastWithDefaultNode(RubyContext context, SourceSection sourceSection, boolean defaultValue) { | ||
super(context, sourceSection); | ||
this.defaultValue = defaultValue; | ||
} | ||
|
||
public abstract boolean executeBoolean(VirtualFrame frame, Object value); | ||
|
||
@Specialization | ||
public boolean doDefault(NotProvided value) { | ||
return defaultValue; | ||
} | ||
|
||
@Specialization | ||
public boolean doBoolean(boolean value) { | ||
return value; | ||
} | ||
|
||
@Specialization(guards = "isNil(nil)") | ||
public boolean doNil(Object nil) { | ||
return false; | ||
} | ||
|
||
@Specialization | ||
public boolean doIntegerFixnum(int value) { | ||
return true; | ||
} | ||
|
||
@Specialization | ||
public boolean doLongFixnum(long value) { | ||
return true; | ||
} | ||
|
||
@Specialization | ||
public boolean doFloat(double value) { | ||
return true; | ||
} | ||
|
||
@Specialization(guards = "!isNil(object)") | ||
public boolean doBasicObject(RubyBasicObject object) { | ||
return true; | ||
} | ||
|
||
@Override | ||
public abstract boolean executeBoolean(VirtualFrame frame); | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1e55229
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@chrisseaton @nirvdrum @pitr-ch I added a special version of BooleanCastNode with a default value.
This was a fairly frequent case and removes the need for additional NotProvided and RubyBasicObject specializations.