Skip to content

Commit c6c0fbd

Browse files
committed
Implement ASCII only str.__getitem__
1 parent e57a0df commit c6c0fbd

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

py/string.go

+19
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,24 @@ func (a String) M__imod__(other Object) Object {
164164
return a.M__mod__(other)
165165
}
166166

167+
func (s String) M__getitem__(key Object) Object {
168+
// FIXME doesn't take into account unicode yet - ASCII only!!!
169+
if slice, ok := key.(*Slice); ok {
170+
start, stop, step, slicelength := slice.GetIndices(len(s))
171+
if step == 1 {
172+
// Return a subslice since strings are immutable
173+
return s[start:stop]
174+
}
175+
newString := make([]byte, slicelength)
176+
for i, j := start, 0; j < slicelength; i, j = i+step, j+1 {
177+
newString[j] = s[i]
178+
}
179+
return String(newString)
180+
}
181+
i := IndexIntCheck(key, len(s))
182+
return s[i : i+1]
183+
}
184+
167185
// Check stringerface is satisfied
168186
var _ richComparison = String("")
169187
var _ sequenceArithmetic = String("")
@@ -172,3 +190,4 @@ var _ I__rmod__ = String("")
172190
var _ I__imod__ = String("")
173191
var _ I__len__ = String("")
174192
var _ I__bool__ = String("")
193+
var _ I__getitem__ = String("")

0 commit comments

Comments
 (0)