|
|
@ -4010,10 +4010,21 @@ oop prim_String_pop(oop func, oop self, oop args, oop env) |
|
|
|
} |
|
|
|
|
|
|
|
oop prim_String_asInteger(oop func, oop self, oop args, oop env) |
|
|
|
{ assert(is(String, self)); |
|
|
|
{ assert(is(Object, args)); |
|
|
|
int argc = _get(args, Object,isize); assert(is(String, self)); |
|
|
|
if (argc > 1) fatal("String.asInteger: expected either 0 or 1 arguments, got %d\n", argc); |
|
|
|
|
|
|
|
char *str = String_content(self); // ensure nul terminator |
|
|
|
char *end = 0; |
|
|
|
long value = strtol(str, &end, 0); |
|
|
|
long value; |
|
|
|
|
|
|
|
if (argc == 1) { |
|
|
|
oop base = _get(args, Object,indexed)[0]; |
|
|
|
value = strtol(str, &end, integerValue(base, "String.asInteger")); |
|
|
|
} else { |
|
|
|
value = strtol(str, &end, 0); |
|
|
|
} |
|
|
|
|
|
|
|
if (*end) return nil; |
|
|
|
return newInteger(value); |
|
|
|
} |
|
|
|