mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-09 14:44:05 +09:00
basic: new operator MIN, MAX, (\) (integer div)
This commit is contained in:
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user