From 471575087a140ea1e36319c808827213271a34b0 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Tue, 24 Nov 2020 10:56:35 +0900 Subject: [PATCH] basic:trying to add array pre/append operators --- assets/tbas/basic.js | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/assets/tbas/basic.js b/assets/tbas/basic.js index 8496115..f875716 100644 --- a/assets/tbas/basic.js +++ b/assets/tbas/basic.js @@ -384,7 +384,25 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length "BXOR" : function(lnum, args) { return twoArgNum(lnum, args, function(lh, rh) { return lh ^ rh; }); }, -"+" : function(lnum, args) { +":" : function(lnum, args) { // Haskell-style CONS + return twoArg(lnum, args, function(lh, rh) { + if (isNaN(lh)) + throw lang.illegalType(lnum, lh); // BASIC array is numbers only + if (!Array.isArray(rh)) + throw lang.illegalType(lnum, rh); + return [lh].concat(rh); + }); +}, +"~" : function(lnum, args) { // array PUSH + return twoArg(lnum, args, function(lh, rh) { + if (isNaN(rh)) + throw lang.illegalType(lnum, rh); // BASIC array is numbers only + if (!Array.isArray(lh)) + throw lang.illegalType(lnum, lh); + return lh.concat([rh]); + }); +}, +"+" : function(lnum, args) { // addition, string concat return twoArg(lnum, args, function(lh, rh) { return lh + rh; }); }, "-" : function(lnum, args) { @@ -411,8 +429,8 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length } } else { - for (let k = to; k >= from; k--) { - a.push(k); + for (let k = -from; k <= -to; k++) { + a.push(-k); } } @@ -702,9 +720,10 @@ bF._opPrc = { "OR":12, "TO":13, "STEP":14, + ":":15,"~":15, // FIXME it seems every operator is utilised as rightmost-derivative "=":999 }; -bF._opRh = {"^":1,"=":1}; +bF._opRh = {"^":1,"=":1,":":1}; bF._keywords = { };