Skip to content

Commit

Permalink
defined? returns frozen strings; fix JIT.
Browse files Browse the repository at this point in the history
JIT did not know about ConstantStringLiteral, but it's basically
identical to FrozenString so we'll use that instead.
  • Loading branch information
headius committed Mar 3, 2015
1 parent 8e7db2f commit 81a5ac5
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 39 deletions.
32 changes: 16 additions & 16 deletions core/src/main/java/org/jruby/ir/IRBuilder.java
Expand Up @@ -1345,21 +1345,21 @@ public Operand buildGetDefinition(Node node) {
case DASGNNODE: case GLOBALASGNNODE: case LOCALASGNNODE: case MULTIPLEASGNNODE:
case MULTIPLEASGN19NODE: case OPASGNNODE: case OPASGNANDNODE: case OPASGNORNODE:
case OPELEMENTASGNNODE: case INSTASGNNODE:
return new ConstantStringLiteral("assignment");
return new FrozenString("assignment");
case ORNODE: case ANDNODE:
return new ConstantStringLiteral("expression");
return new FrozenString("expression");
case FALSENODE:
return new ConstantStringLiteral("false");
return new FrozenString("false");
case LOCALVARNODE: case DVARNODE:
return new ConstantStringLiteral("local-variable");
return new FrozenString("local-variable");
case MATCH2NODE: case MATCH3NODE:
return new ConstantStringLiteral("method");
return new FrozenString("method");
case NILNODE:
return new ConstantStringLiteral("nil");
return new FrozenString("nil");
case SELFNODE:
return new ConstantStringLiteral("self");
return new FrozenString("self");
case TRUENODE:
return new ConstantStringLiteral("true");
return new FrozenString("true");
case DREGEXPNODE: case DSTRNODE: {
final Node dNode = node;

Expand All @@ -1368,7 +1368,7 @@ public Operand buildGetDefinition(Node node) {
public Operand run() {
build(dNode);
// always an expression as long as we get through here without an exception!
return new ConstantStringLiteral("expression");
return new FrozenString("expression");
}
};
// rescue block
Expand All @@ -1381,7 +1381,7 @@ public Operand run() {
Label doneLabel = getNewLabel();
Variable tmpVar = getValueInTemporaryVariable(v);
addInstr(BNEInstr.create(tmpVar, manager.getNil(), doneLabel));
addInstr(new CopyInstr(tmpVar, new ConstantStringLiteral("expression")));
addInstr(new CopyInstr(tmpVar, new FrozenString("expression")));
addInstr(new LabelInstr(doneLabel));

return tmpVar;
Expand All @@ -1398,7 +1398,7 @@ public Operand run() {
addInstr(BEQInstr.create(result, manager.getNil(), undefLabel));
}

addInstr(new CopyInstr(tmpVar, new ConstantStringLiteral("expression")));
addInstr(new CopyInstr(tmpVar, new FrozenString("expression")));
addInstr(new JumpInstr(doneLabel));
addInstr(new LabelInstr(undefLabel));
addInstr(new CopyInstr(tmpVar, manager.getNil()));
Expand Down Expand Up @@ -1449,7 +1449,7 @@ public Operand run() {
addInstr(new CopyInstr(tmpVar, manager.getNil()));
addInstr(new JumpInstr(doneLabel));
addInstr(new LabelInstr(defLabel));
addInstr(new CopyInstr(tmpVar, new ConstantStringLiteral("constant")));
addInstr(new CopyInstr(tmpVar, new FrozenString("constant")));
addInstr(new LabelInstr(doneLabel));
return tmpVar;
}
Expand All @@ -1472,7 +1472,7 @@ public Operand run() {
build(((Colon2Node)colon).getLeftNode()) : new ObjectClass();

Variable tmpVar = createTemporaryVariable();
addInstr(new RuntimeHelperCall(tmpVar, IS_DEFINED_CONSTANT_OR_METHOD, new Operand[] {v, new ConstantStringLiteral(name)}));
addInstr(new RuntimeHelperCall(tmpVar, IS_DEFINED_CONSTANT_OR_METHOD, new Operand[] {v, new FrozenString(name)}));
return tmpVar;
}
};
Expand Down Expand Up @@ -1569,7 +1569,7 @@ public Operand run() {
return protectCodeWithRescue(protectedCode, rescueBlock);
}
default:
return new ConstantStringLiteral("expression");
return new FrozenString("expression");
}
}

Expand All @@ -1587,13 +1587,13 @@ protected Variable buildDefinitionCheck(ResultInstr definedInstr, String defined
Label undefLabel = getNewLabel();
addInstr((Instr) definedInstr);
addInstr(BEQInstr.create(definedInstr.getResult(), manager.getFalse(), undefLabel));
return buildDefnCheckIfThenPaths(undefLabel, new ConstantStringLiteral(definedReturnValue));
return buildDefnCheckIfThenPaths(undefLabel, new FrozenString(definedReturnValue));
}

public Operand buildGetArgumentDefinition(final Node node, String type) {
if (node == null) return new StringLiteral(type);

Operand rv = new ConstantStringLiteral(type);
Operand rv = new FrozenString(type);
boolean failPathReqd = false;
Label failLabel = getNewLabel();
if (node instanceof ArrayNode) {
Expand Down

This file was deleted.

4 changes: 4 additions & 0 deletions core/src/main/java/org/jruby/ir/operands/FrozenString.java
Expand Up @@ -30,6 +30,10 @@ public FrozenString(ByteList byteList) {
this.bytelist = byteList;
}

public FrozenString(String s) {
this(ByteList.create(s));
}

@Override
public Object createCacheObject(ThreadContext context) {
return context.runtime.freezeAndDedupString(RubyString.newString(context.runtime, bytelist));
Expand Down

0 comments on commit 81a5ac5

Please sign in to comment.