Ver a proveniência

Add optional base argument to String.asInteger

master
MaximeBarniaudy há 11 meses
ascendente
cometimento
b23a65dbb0
2 ficheiros alterados com 19 adições e 2 eliminações
  1. +13
    -2
      minproto.leg
  2. +6
    -0
      test.txt

+ 13
- 2
minproto.leg Ver ficheiro

@ -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);
}

+ 6
- 0
test.txt Ver ficheiro

@ -378,6 +378,12 @@ ast = (`6 * @myNode;); // user-defined node in AST
print("AST eval => ", eval(ast), "\n");
print("String to int conversion\n");
print("11111111".asInteger(2), "\n");
print("377".asInteger(8), "\n");
print("255".asInteger(), "\n");
print("FF".asInteger(16), "\n");
for (i from 0 to 10) print(i, " "); print("\n");
for (i from 10 to 0) print(i, " "); print("\n");
for (i in 10) print(i, " "); print("\n");

Carregando…
Cancelar
Guardar