Skip to content

Commit

Permalink
more cleanup of string vs symbol usage.
Browse files Browse the repository at this point in the history
enebo committed Apr 16, 2018

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
1 parent 61703bd commit 070b78c
Showing 4 changed files with 13 additions and 6 deletions.
5 changes: 2 additions & 3 deletions core/src/main/java/org/jruby/RubyKernel.java
Original file line number Diff line number Diff line change
@@ -227,7 +227,7 @@ public static IRubyObject method_missing(ThreadContext context, IRubyObject recv
}

protected static IRubyObject methodMissingDirect(ThreadContext context, IRubyObject recv, RubySymbol symbol, Visibility lastVis, CallType lastCallType, IRubyObject[] args) {
return methodMissing(context, recv, symbol.toString(), lastVis, lastCallType, args, true);
return methodMissing(context, recv, symbol.idString(), lastVis, lastCallType, args, true);
}

public static IRubyObject methodMissing(ThreadContext context, IRubyObject recv, String name, Visibility lastVis, CallType lastCallType, IRubyObject[] args) {
@@ -774,8 +774,7 @@ public static RubyArray local_variables19(ThreadContext context, IRubyObject rec
while (currentScope != null) {
for (String id: currentScope.getStaticScope().getVariables()) {
RubySymbol name = runtime.newSymbol(id);
// FIXME: Technically a non-charset String will still not work here.
if (IdUtil.isLocal(name.toString()) && !encounteredLocalVariables.contains(name)) {
if (name.validLocalVariableName() && !encounteredLocalVariables.contains(name)) {
allLocalVariables.push(name);
encounteredLocalVariables.add(name);
}
4 changes: 2 additions & 2 deletions core/src/main/java/org/jruby/RubyModule.java
Original file line number Diff line number Diff line change
@@ -3012,7 +3012,7 @@ public IRubyObject module_exec(ThreadContext context, IRubyObject[] args, Block
@JRubyMethod(name = "remove_method", rest = true, visibility = PRIVATE)
public RubyModule remove_method(ThreadContext context, IRubyObject[] args) {
for(int i=0;i<args.length;i++) {
removeMethod(context, TypeConverter.checkID(args[i]).toString());
removeMethod(context, TypeConverter.checkID(args[i]).idString());
}
return this;
}
@@ -4407,7 +4407,7 @@ protected final String validateConstant(IRubyObject name) {
return symbol.idString();
}

@Deprecated
// FIXME: bytelist_love: This should really be working with symbol segments (errorName is FQN).
protected final String validateConstant(String name, IRubyObject errorName) {
if (IdUtil.isValidConstantName19(name)) return name;

8 changes: 8 additions & 0 deletions core/src/main/java/org/jruby/RubySymbol.java
Original file line number Diff line number Diff line change
@@ -242,6 +242,14 @@ public boolean validInstanceVariableName() {
return valid && getBytes().length() >= 2; // FIXME: good enough on length check? Trying to avoid counter.
}

public boolean validLocalVariableName() {
boolean valid = ByteListHelper.eachCodePoint(getBytes(), (int index, int codepoint, Encoding encoding) ->
index == 0 && (!encoding.isDigit(codepoint) && (encoding.isAlnum(codepoint) || !Encoding.isAscii(codepoint) || codepoint == '_')) ||
index != 0 && (encoding.isAlnum(codepoint) || !Encoding.isAscii(codepoint) || codepoint == '_'));

return valid && getBytes().length() >= 1;
}

@Override
public boolean isImmediate() {
return true;
2 changes: 1 addition & 1 deletion core/src/main/java/org/jruby/RubyThread.java
Original file line number Diff line number Diff line change
@@ -749,7 +749,7 @@ public static IRubyObject handle_interrupt(ThreadContext context, IRubyObject se
public void visit(ThreadContext context, RubyHash self, IRubyObject key, IRubyObject value, int index, Object state) {
if (value instanceof RubySymbol) {
RubySymbol sym = (RubySymbol) value;
switch (sym.toString()) {
switch (sym.idString()) {
case "immediate" : return;
case "on_blocking" : return;
case "never" : return;

0 comments on commit 070b78c

Please sign in to comment.