basic: new operator MIN, MAX, (\) (integer div)

This commit is contained in:
minjaesong
2020-12-16 20:02:00 +09:00
parent 8d9258dff3
commit 47f413a9e0
2 changed files with 39 additions and 22 deletions

View File

@@ -671,11 +671,20 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length
"/" : function(lnum, stmtnum, args) { "/" : function(lnum, stmtnum, args) {
return twoArgNum(lnum, stmtnum, args, (lh,rh) => { return twoArgNum(lnum, stmtnum, args, (lh,rh) => {
if (rh == 0) throw lang.divByZero; if (rh == 0) throw lang.divByZero;
return lh / rh return lh / rh;
});
},
"\\" : function(lnum, stmtnum, args) { // integer division, rounded towards zero
return twoArgNum(lnum, stmtnum, args, (lh,rh) => {
if (rh == 0) throw lang.divByZero;
return (lh / rh)|0;
}); });
}, },
"MOD" : function(lnum, stmtnum, args) { "MOD" : function(lnum, stmtnum, args) {
return twoArgNum(lnum, stmtnum, args, (lh,rh) => lh % rh); return twoArgNum(lnum, stmtnum, args, (lh,rh) => {
if (rh == 0) throw lang.divByZero;
return lh % rh;
});
}, },
"^" : function(lnum, stmtnum, args) { "^" : function(lnum, stmtnum, args) {
return twoArgNum(lnum, stmtnum, args, (lh,rh) => Math.pow(lh, rh)); return twoArgNum(lnum, stmtnum, args, (lh,rh) => Math.pow(lh, rh));
@@ -1140,6 +1149,12 @@ if no arg text were given (e.g. "10 NEXT"), args will have zero length
return bStatus.builtin[jmpFun](lnum, stmtnum, [jmpTarget]); return bStatus.builtin[jmpFun](lnum, stmtnum, [jmpTarget]);
}, },
"MIN" : function(lnum, stmtnum, args) {
return twoArg(lnum, stmtnum, args, (lh,rh) => (lh > rh) ? rh : lh);
},
"MAX" : function(lnum, stmtnum, args) {
return twoArg(lnum, stmtnum, args, (lh,rh) => (lh < rh) ? rh : lh);
},
"OPTIONDEBUG" : function(lnum, stmtnum, args) { "OPTIONDEBUG" : function(lnum, stmtnum, args) {
return oneArgNum(lnum, stmtnum, args, (lh) => { return oneArgNum(lnum, stmtnum, args, (lh) => {
if (lh != 0 && lh != 1) throw lang.syntaxfehler(line); if (lh != 0 && lh != 1) throw lang.syntaxfehler(line);
@@ -1228,22 +1243,23 @@ bF._isSep = function(code) {
bF._opPrc = { bF._opPrc = {
// function call in itself has highest precedence // function call in itself has highest precedence
"^":1, "^":1,
"*":2,"/":2, "*":2,"/":2,"\\":2,
"MOD":3, "MOD":3,
"+":4,"-":4, "+":4,"-":4,
"NOT":5,"BNOT":5, "NOT":5,"BNOT":5,
"<<":6,">>":6, "<<":6,">>":6,
"<":7,">":7,"<=":7,"=<":7,">=":7,"=>":7, "<":7,">":7,"<=":7,"=<":7,">=":7,"=>":7,
"==":8,"<>":8,"><":8, "==":8,"<>":8,"><":8,
"BAND":8, "MIN":10,"MAX":10,
"BXOR":9, "BAND":20,
"BOR":10, "BXOR":21,
"AND":11, "BOR":22,
"OR":12, "AND":30,
"TO":13, "OR":31,
"STEP":14, "TO":40,
"!":15,"~":15, // array CONS and PUSH "STEP":41,
"#": 16, // array concat "!":50,"~":51, // array CONS and PUSH
"#": 52, // array concat
"=":999, "=":999,
"IN":1000 "IN":1000
}; };

View File

@@ -728,22 +728,23 @@ let BasicAST = function() {
bF._opPrc = { bF._opPrc = {
// function call in itself has highest precedence // function call in itself has highest precedence
"^":1, "^":1,
"*":2,"/":2, "*":2,"/":2,"\\":2,
"MOD":3, "MOD":3,
"+":4,"-":4, "+":4,"-":4,
"NOT":5,"BNOT":5, "NOT":5,"BNOT":5,
"<<":6,">>":6, "<<":6,">>":6,
"<":7,">":7,"<=":7,"=<":7,">=":7,"=>":7, "<":7,">":7,"<=":7,"=<":7,">=":7,"=>":7,
"==":8,"<>":8,"><":8, "==":8,"<>":8,"><":8,
"BAND":8, "MIN":10,"MAX":10,
"BXOR":9, "BAND":20,
"BOR":10, "BXOR":21,
"AND":11, "BOR":22,
"OR":12, "AND":30,
"TO":13, "OR":31,
"STEP":14, "TO":40,
"!":15,"~":15, // array CONS and PUSH "STEP":41,
"#": 16, // array concat "!":50,"~":51, // array CONS and PUSH
"#": 52, // array concat
"=":999, "=":999,
"IN":1000 "IN":1000
}; };