Integer type behind macros
This commit is contained in:
parent
9015176bbb
commit
976db6f954
@ -439,7 +439,7 @@ static void number(int canAssign) {
|
||||
}
|
||||
|
||||
/* If we got here, it's an integer of some sort. */
|
||||
long value = strtol(start, NULL, base);
|
||||
krk_integer_type value = parseStrInt(start, NULL, base);
|
||||
emitConstant(INTEGER_VAL(value));
|
||||
}
|
||||
|
||||
|
12
kuroko.h
12
kuroko.h
@ -4,6 +4,18 @@
|
||||
#include <stddef.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
typedef long long krk_integer_type;
|
||||
#define PRIkrk_int "%lld"
|
||||
#define PRIkrk_hex "%llx"
|
||||
#define parseStrInt strtoll
|
||||
#else
|
||||
typedef long krk_integer_type;
|
||||
#define PRIkrk_int "%ld"
|
||||
#define PRIkrk_hex "%lx"
|
||||
#define parseStrInt strtol
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
#define ENABLE_DISASSEMBLY
|
||||
#define ENABLE_TRACING
|
||||
|
4
value.c
4
value.c
@ -30,7 +30,7 @@ void krk_freeValueArray(KrkValueArray * array) {
|
||||
void krk_printValue(FILE * f, KrkValue printable) {
|
||||
if (!IS_OBJECT(printable)) {
|
||||
switch (printable.type) {
|
||||
case VAL_INTEGER: fprintf(f, "%ld", AS_INTEGER(printable)); break;
|
||||
case VAL_INTEGER: fprintf(f, PRIkrk_int, AS_INTEGER(printable)); break;
|
||||
case VAL_BOOLEAN: fprintf(f, "%s", AS_BOOLEAN(printable) ? "True" : "False"); break;
|
||||
case VAL_FLOATING: fprintf(f, "%g", AS_FLOATING(printable)); break;
|
||||
case VAL_NONE: fprintf(f, "None"); break;
|
||||
@ -47,7 +47,7 @@ void krk_printValue(FILE * f, KrkValue printable) {
|
||||
} else if (AS_INTEGER(printable) == 0) {
|
||||
fprintf(f, "{unset default}");
|
||||
} else {
|
||||
fprintf(f, "{sentinel=%ld}",AS_INTEGER(printable));
|
||||
fprintf(f, "{sentinel=" PRIkrk_int "}",AS_INTEGER(printable));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
2
value.h
2
value.h
@ -26,7 +26,7 @@ typedef struct {
|
||||
KrkValueType type;
|
||||
union {
|
||||
char boolean;
|
||||
long integer;
|
||||
krk_integer_type integer;
|
||||
double floating;
|
||||
KrkJumpTarget handler;
|
||||
KrkObj * object;
|
||||
|
14
vm.c
14
vm.c
@ -1262,7 +1262,7 @@ KrkValue krk_callSimple(KrkValue value, int argCount, int isMethod) {
|
||||
} else if (result == 1) {
|
||||
return krk_runNext();
|
||||
}
|
||||
krk_runtimeError(vm.exceptions.typeError, "Invalid internal method call.");
|
||||
krk_runtimeError(vm.exceptions.typeError, "Invalid internal method call: %d ('%s')", result, krk_typeName(value));
|
||||
return NONE_VAL();
|
||||
}
|
||||
|
||||
@ -1460,7 +1460,7 @@ static KrkValue _int_to_floating(int argc, KrkValue argv[]) {
|
||||
|
||||
/* int.__chr__() */
|
||||
static KrkValue _int_to_char(int argc, KrkValue argv[]) {
|
||||
long value = AS_INTEGER(argv[0]);
|
||||
krk_integer_type value = AS_INTEGER(argv[0]);
|
||||
unsigned char out[5] = {0};
|
||||
if (value > 0xFFFF) {
|
||||
out[0] = (0xF0 | (value >> 18));
|
||||
@ -1619,7 +1619,7 @@ static KrkValue _string_int(int argc, KrkValue argv[]) {
|
||||
base = 8;
|
||||
start += 2;
|
||||
}
|
||||
long value = strtol(start, NULL, base);
|
||||
krk_integer_type value = parseStrInt(start, NULL, base);
|
||||
return INTEGER_VAL(value);
|
||||
}
|
||||
|
||||
@ -2557,7 +2557,7 @@ static KrkValue _module_repr(int argc, KrkValue argv[]) {
|
||||
*/
|
||||
static KrkValue _int_to_str(int argc, KrkValue argv[]) {
|
||||
char tmp[100];
|
||||
size_t l = sprintf(tmp, "%ld", (long)AS_INTEGER(argv[0]));
|
||||
size_t l = sprintf(tmp, PRIkrk_int, (krk_integer_type)AS_INTEGER(argv[0]));
|
||||
return OBJECT_VAL(krk_copyString(tmp, l));
|
||||
}
|
||||
|
||||
@ -2698,8 +2698,8 @@ static KrkValue _hex(int argc, KrkValue argv[]) {
|
||||
return NONE_VAL();
|
||||
}
|
||||
char tmp[20];
|
||||
long x = AS_INTEGER(argv[0]);
|
||||
size_t len = sprintf(tmp, "%s0x%lx", x < 0 ? "-" : "", x < 0 ? -x : x);
|
||||
krk_integer_type x = AS_INTEGER(argv[0]);
|
||||
size_t len = sprintf(tmp, "%s0x" PRIkrk_hex, x < 0 ? "-" : "", x < 0 ? -x : x);
|
||||
return OBJECT_VAL(krk_copyString(tmp,len));
|
||||
}
|
||||
|
||||
@ -2724,7 +2724,7 @@ static KrkValue _tuple_iter_call(int argc, KrkValue argv[]) {
|
||||
KrkTuple * myTuple = self->_internal;
|
||||
KrkValue t = myTuple->values.values[0]; /* Tuple to iterate */
|
||||
KrkValue i = myTuple->values.values[1]; /* Index value */
|
||||
if (AS_INTEGER(i) >= (long int)AS_TUPLE(t)->values.count) {
|
||||
if (AS_INTEGER(i) >= (krk_integer_type)AS_TUPLE(t)->values.count) {
|
||||
return argv[0];
|
||||
} else {
|
||||
myTuple->values.values[1] = INTEGER_VAL(AS_INTEGER(i)+1);
|
||||
|
Loading…
x
Reference in New Issue
Block a user