From f8fdf7d0df51e6d00b4e25cf0118d5282339a560 Mon Sep 17 00:00:00 2001 From: cozis Date: Wed, 6 Apr 2022 23:49:39 +0200 Subject: [PATCH] bug fix --- examples/json.noja | 74 ++++++++++++++++++++++--------------------- examples/return2.noja | 18 +++++++++++ 2 files changed, 56 insertions(+), 36 deletions(-) create mode 100644 examples/return2.noja diff --git a/examples/json.noja b/examples/json.noja index 266c2e4..48f00eb 100644 --- a/examples/json.noja +++ b/examples/json.noja @@ -40,7 +40,8 @@ fun parse(str) { if ended(ctx): return none, 'Source only contains whitespace'; - return parseAny(ctx); + res, err = parseAny(ctx); + return res, err; } fun parseArray(ctx) { @@ -228,43 +229,44 @@ fun parseAny(ctx) { assert(not ended(ctx)); if current(ctx) == '[': - return parseArray(ctx); - - if current(ctx) == '{': - return parseObject(ctx); - - if current(ctx) == '"': - return parseString(ctx); - - if isDigit(current(ctx)): - return parseNumber(ctx); - - error("Not implemented yet"); + res, err = parseArray(ctx); + else if current(ctx) == '{': + res, err = parseObject(ctx); + else if current(ctx) == '"': + res, err = parseString(ctx); + else if isDigit(current(ctx)): + res, err = parseNumber(ctx); + else + error("Not implemented yet"); + return res, err; } -#tests = ['', '1', '10', '1.10', '"jeje"', '[]', '[1,2,3]', ' [ ] ', ' [ 1 , 2 , 3 ]', '{}', ' { } ', '{"hoy":4}', ' { "hoy" : 4 } ']; +tests = [ + '', '1', '10', + '1.@10', '1.10', '"jeje"', + '[]', '[1,2,3]', ' [ ] ', ' [ 1 , 2 , 3 ]', '{}', ' { } ', '{"hoy":4}', ' { "hoy" : 4 } ']; -#i = 0; -#while i < count(tests): { -# r = parse(tests[i]); -# if r == none: -# print('\nTest ', i, ' failed\n'); -# else -# print(tests[i], ' -> ', r, '\n'); -# i = i + 1; -#} +i = 0; +while i < count(tests): { + res, err = parse(tests[i]); + if res == none: + print('Test ', i, ' failed (', err, ')\n'); + else + print('Test ', i, ' passed (', tests[i], ' -> ', res, ')\n'); + i = i + 1; +} -file = files.openFile('examples/large-file.json', files.READ); -if file == none: - error("Failed to open file"); - -buff = newBuffer(30000000); -if buff == none: - error("Failed to create buffer"); - -n = files.read(file, buff); - -text = bufferToString(sliceBuffer(buff, 0, n)); - -print(parse(text)); +#file = files.openFile('examples/large-file.json', #files.READ); +#if file == none: +# error("Failed to open file"); +# +#buff = newBuffer(30000000); +#if buff == none: +# error("Failed to create buffer"); +# +#n = files.read(file, buff); +# +#text = bufferToString(sliceBuffer(buff, 0, n)); +# +#print(parse(text)); diff --git a/examples/return2.noja b/examples/return2.noja new file mode 100644 index 0000000..47fc57f --- /dev/null +++ b/examples/return2.noja @@ -0,0 +1,18 @@ + +fun duplica_forse(a) { + if a >= 10: + return a*2; + return none, "Il numero รจ inferiore a 10!"; +} + +fun duplica_forse2(a) { + return all duplica_forse(a); +} + +num = 5; +num2, err = duplica_forse2(num); + +if num2 == none: + print('ERRORE!!! ', err, '\n'); +else + print(num2, '\n'); \ No newline at end of file