Skip to content

Commit

Permalink
Showing 4 changed files with 35 additions and 10 deletions.

This file was deleted.

1 change: 0 additions & 1 deletion spec/truffle/tags/core/marshal/dump_tags.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
fails:Marshal.dump dumps an extended_object
fails:Marshal.dump dumps an object that has had an ivar added and removed as though the ivar never was set
fails:Marshal.dump with a Float dumps a Float
fails:Marshal.dump with a String dumps a String extended with a Module
fails:Marshal.dump with a Regexp dumps a Regexp
Original file line number Diff line number Diff line change
@@ -1037,6 +1037,36 @@ public Object instanceVariableSet(DynamicObject object, String name, Object valu

}

@CoreMethod(names = "remove_instance_variable", raiseIfFrozenSelf = true, required = 1)
@NodeChildren({
@NodeChild(type = RubyNode.class, value = "object"),
@NodeChild(type = RubyNode.class, value = "name")
})
public abstract static class RemoveInstanceVariableNode extends CoreMethodNode {

public RemoveInstanceVariableNode(RubyContext context, SourceSection sourceSection) {
super(context, sourceSection);
}

@CreateCast("name")
public RubyNode coerceToString(RubyNode name) {
return NameToJavaStringNodeGen.create(getContext(), getSourceSection(), name);
}

@TruffleBoundary
@Specialization
public Object removeInstanceVariable(DynamicObject object, String name) {
final String ivar = RubyContext.checkInstanceVariableName(getContext(), name, this);
final Object value = object.get(ivar, nil());
if (!object.delete(name)) {
CompilerDirectives.transferToInterpreter();

This comment has been minimized.

Copy link
@chrisseaton

chrisseaton Oct 12, 2015

Contributor

Transfer within a boundary here.

This comment has been minimized.

Copy link
@eregon

eregon Oct 12, 2015

Author Member

I know, I am used to transfer before the raise/throw as it helps me to read the normal code path.
Is it an issue?

This comment has been minimized.

Copy link
@chrisseaton

chrisseaton Oct 12, 2015

Contributor

I guess it might slow down the interpreter without any purpose, but not sure it matters that much.

This comment has been minimized.

Copy link
@pitr-ch

pitr-ch Oct 13, 2015

Member

OTOH if the boundary is removed in future there will be transferToInterpreter missing, I think it's safer to keep it.

throw new RaiseException(getContext().getCoreLibrary().nameErrorInstanceVariableNotDefined(name, this));
}
return value;
}

}

@CoreMethod(names = { "instance_variables", "__instance_variables__" })
public abstract static class InstanceVariablesNode extends CoreMethodArrayArgumentsNode {

Original file line number Diff line number Diff line change
@@ -1067,6 +1067,11 @@ public DynamicObject nameErrorInstanceNameNotAllowable(String name, Node current
return nameError(String.format("`%s' is not allowable as an instance variable name", name), name, currentNode);
}

public DynamicObject nameErrorInstanceVariableNotDefined(String name, Node currentNode) {
CompilerAsserts.neverPartOfCompilation();
return nameError(String.format("instance variable %s not defined", name), name, currentNode);
}

public DynamicObject nameErrorReadOnly(String name, Node currentNode) {
CompilerAsserts.neverPartOfCompilation();
return nameError(String.format("%s is a read-only variable", name), name, currentNode);

0 comments on commit 5e7b193

Please sign in to comment.