difftreelog
Merge pull request #90 from CertainLach/parse-intrinsics
in: master
1 file changed
crates/jrsonnet-stdlib/src/std.jsonnetdiffbeforeafterboth25 stringChars(str)::25 stringChars(str)::26 std.makeArray(std.length(str), function(i) str[i]),26 std.makeArray(std.length(str), function(i) str[i]),272728 local parse_nat(str, base) =29 assert base > 0 && base <= 16 : 'integer base %d invalid' % base;30 // These codepoints are in ascending order:31 local zero_code = std.codepoint('0');32 local upper_a_code = std.codepoint('A');33 local lower_a_code = std.codepoint('a');34 local addDigit(aggregate, char) =35 local code = std.codepoint(char);36 local digit = if code >= lower_a_code then37 code - lower_a_code + 1038 else if code >= upper_a_code then39 code - upper_a_code + 1040 else41 code - zero_code;42 assert digit >= 0 && digit < base : '%s is not a base %d integer' % [str, base];43 base * aggregate + digit;44 std.foldl(addDigit, std.stringChars(str), 0),4546 parseInt(str)::47 assert std.isString(str) : 'Expected string, got ' + std.type(str);48 assert std.length(str) > 0 && str != '-' : 'Not an integer: "%s"' % [str];49 if str[0] == '-' then50 -parse_nat(str[1:], 10)51 else52 parse_nat(str, 10),5354 parseOctal(str)::55 assert std.isString(str) : 'Expected string, got ' + std.type(str);56 assert std.length(str) > 0 : 'Not an octal number: ""';57 parse_nat(str, 8),5859 parseHex(str)::60 assert std.isString(str) : 'Expected string, got ' + std.type(str);61 assert std.length(str) > 0 : 'Not hexadecimal: ""';62 parse_nat(str, 16),6364 split(str, c):: std.splitLimit(str, c, -1),28 split(str, c):: std.splitLimit(str, c, -1),652966 repeat(what, count)::30 repeat(what, count)::