From 95ab9bef2875d1b2a72411d031c89a35ed561b42 Mon Sep 17 00:00:00 2001 From: mtardy Date: Mon, 7 Sep 2020 09:19:41 +0200 Subject: [PATCH] Fix Integer factory --- parse.leg | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/parse.leg b/parse.leg index 689670d..f24109a 100644 --- a/parse.leg +++ b/parse.leg @@ -1906,16 +1906,17 @@ oop prim_Integer(oop scope, oop params) return makeInteger(0); } case Integer: { - // does it make sense to copy an integer? - // return arg; - return makeInteger(getInteger(arg)); + return arg; } case String: { - return makeInteger(strtoll(get(arg, String, value), NULL, 10)); - } - case Symbol: { - // since symbol are ident, they cannot start with a number so it's impossible that strtoll succeed - return makeInteger(strtoll(get(arg, Symbol, name), NULL, 10)); + if (!map_hasIntegerKey(params, 1)) { + return makeInteger(strtoll(get(arg, String, value), NULL, 0)); + } + int base= getInteger(get(params, Map, elements)[1].value); + if (base > 36 || base < 2) { + runtimeError("base must be between 2 and 36 inclusive"); + } + return makeInteger(strtoll(get(arg, String, value), NULL, base)); } } return null;