-
-
Notifications
You must be signed in to change notification settings - Fork 925
Commit
- 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
There are no files selected for viewing
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1271,41 +1271,66 @@ public int hash(DynamicObject string) { | |
|
||
} | ||
|
||
@CoreMethod(names = "initialize", optional = 1, taintFrom = 1) | ||
@CoreMethod(names = "initialize_internal", optional = 2, taintFrom = 1) | ||
This comment has been minimized.
Sorry, something went wrong.
This comment has been minimized.
Sorry, something went wrong.
eregon
Member
|
||
public abstract static class InitializeNode extends CoreMethodArrayArgumentsNode { | ||
|
||
@Child private IsFrozenNode isFrozenNode; | ||
@Child private ToStrNode toStrNode; | ||
@Child private CallDispatchHeadNode forceEncodingNode; | ||
|
||
@Specialization | ||
public DynamicObject initialize(DynamicObject self, NotProvided from) { | ||
public DynamicObject initialize(DynamicObject self, NotProvided from, NotProvided encoding) { | ||
return self; | ||
} | ||
|
||
@Specialization | ||
public DynamicObject initializeJavaString(DynamicObject self, String from) { | ||
public DynamicObject initializeJavaString(DynamicObject self, String from, NotProvided encoding) { | ||
raiseIfFrozen(self); | ||
StringOperations.setRope(self, StringOperations.encodeRope(from, ASCIIEncoding.INSTANCE)); | ||
return self; | ||
} | ||
|
||
@Specialization(guards = "isRubyString(from)") | ||
public DynamicObject initialize(DynamicObject self, DynamicObject from) { | ||
public DynamicObject initialize(DynamicObject self, DynamicObject from, NotProvided encoding) { | ||
raiseIfFrozen(self); | ||
|
||
StringOperations.setRope(self, rope(from)); | ||
|
||
return self; | ||
} | ||
|
||
@Specialization(guards = {"isRubyString(from)"}) | ||
public DynamicObject initialize(VirtualFrame frame, DynamicObject self, DynamicObject from, DynamicObject encoding) { | ||
raiseIfFrozen(self); | ||
|
||
StringOperations.setRope(self, rope(from)); | ||
|
||
if (forceEncodingNode == null) { | ||
CompilerDirectives.transferToInterpreterAndInvalidate(); | ||
forceEncodingNode = insert(DispatchHeadNodeFactory.createMethodCall(getContext())); | ||
} | ||
|
||
return (DynamicObject) forceEncodingNode.call(frame, self, "force_encoding", encoding); | ||
} | ||
|
||
@Specialization(guards = { "!isRubyString(from)", "!isString(from)", "wasProvided(from)" }) | ||
public DynamicObject initialize(VirtualFrame frame, DynamicObject self, Object from, NotProvided encoding) { | ||
if (toStrNode == null) { | ||
CompilerDirectives.transferToInterpreterAndInvalidate(); | ||
toStrNode = insert(ToStrNodeGen.create(getContext(), null, null)); | ||
} | ||
|
||
return initialize(self, toStrNode.executeToStr(frame, from), NotProvided.INSTANCE); | ||
} | ||
|
||
@Specialization(guards = { "!isRubyString(from)", "!isString(from)", "wasProvided(from)" }) | ||
public DynamicObject initialize(VirtualFrame frame, DynamicObject self, Object from) { | ||
public DynamicObject initialize(VirtualFrame frame, DynamicObject self, Object from, DynamicObject encoding) { | ||
if (toStrNode == null) { | ||
CompilerDirectives.transferToInterpreterAndInvalidate(); | ||
toStrNode = insert(ToStrNodeGen.create(getContext(), null, null)); | ||
} | ||
|
||
return initialize(self, toStrNode.executeToStr(frame, from)); | ||
return initialize(frame, self, toStrNode.executeToStr(frame, from), encoding); | ||
} | ||
|
||
protected void raiseIfFrozen(Object object) { | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1555,6 +1555,18 @@ def index(str, start=undefined) | |
m.character_index str, start | ||
end | ||
|
||
def initialize(other = undefined, encoding: undefined) | ||
This comment has been minimized.
Sorry, something went wrong.
eregon
Member
|
||
if !undefined.equal?(other) && !undefined.equal?(encoding) | ||
return self.initialize_internal(other, encoding) | ||
elsif !undefined.equal?(other) | ||
return self.initialize_internal(other) | ||
elsif !undefined.equal?(encoding) | ||
return self.initialize_internal("", encoding) | ||
end | ||
|
||
self.initialize_internal | ||
end | ||
|
||
def rindex(sub, finish=undefined) | ||
if undefined.equal?(finish) | ||
finish = size | ||
|
This should be marked
@NonStandard
.