PRINT function to differentiate , and ;

This commit is contained in:
minjaesong
2020-06-25 21:20:14 +09:00
parent 8a638df3fc
commit 9aaf6200eb

View File

@@ -159,28 +159,28 @@ function resolve(variable) {
else else
throw "InternalError: unknown variable with type "+variable.type+", with value "+variable.value throw "InternalError: unknown variable with type "+variable.type+", with value "+variable.value
} }
function oneArgNonNull(lnum, args, predicate) { function oneArgNonNull(lnum, args, action) {
if (args.length != 1) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); if (args.length != 1) throw lang.syntaxfehler(lnum, args.length + " arguments were given");
var resolvedargs0 = resolve(args[0]); var resolvedargs0 = resolve(args[0]);
if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value); if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value);
return predicate(resolvedargs0); return action(resolvedargs0);
} }
function oneArgNonNullNumeric(lnum, args, predicate) { function oneArgNonNullNumeric(lnum, args, action) {
if (args.length != 1) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); if (args.length != 1) throw lang.syntaxfehler(lnum, args.length + " arguments were given");
var resolvedargs0 = resolve(args[0]); var resolvedargs0 = resolve(args[0]);
if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value); if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value);
if (isNaN(resolvedargs0)) throw lang.illegalType(lnum, resolvedargs0.value); if (isNaN(resolvedargs0)) throw lang.illegalType(lnum, resolvedargs0.value);
return predicate(resolvedargs0); return action(resolvedargs0);
} }
function twoArgNonNull(lnum, args, predicate) { function twoArgNonNull(lnum, args, action) {
if (args.length != 2) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); if (args.length != 2) throw lang.syntaxfehler(lnum, args.length + " arguments were given");
var resolvedargs0 = resolve(args[0]); var resolvedargs0 = resolve(args[0]);
if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value); if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value);
var resolvedargs1 = resolve(args[1]); var resolvedargs1 = resolve(args[1]);
if (resolvedargs1 === undefined) throw lang.refError(lnum, resolvedargs1.value); if (resolvedargs1 === undefined) throw lang.refError(lnum, resolvedargs1.value);
return predicate(resolvedargs0, resolvedargs1); return action(resolvedargs0, resolvedargs1);
} }
function twoArgNonNullNumeric(lnum, args, predicate) { function twoArgNonNullNumeric(lnum, args, action) {
if (args.length != 2) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); if (args.length != 2) throw lang.syntaxfehler(lnum, args.length + " arguments were given");
var resolvedargs0 = resolve(args[0]); var resolvedargs0 = resolve(args[0]);
if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value); if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value);
@@ -188,9 +188,9 @@ function twoArgNonNullNumeric(lnum, args, predicate) {
var resolvedargs1 = resolve(args[1]); var resolvedargs1 = resolve(args[1]);
if (resolvedargs1 === undefined) throw lang.refError(lnum, resolvedargs1.value); if (resolvedargs1 === undefined) throw lang.refError(lnum, resolvedargs1.value);
if (isNaN(resolvedargs1)) throw lang.illegalType(lnum, resolvedargs1.value); if (isNaN(resolvedargs1)) throw lang.illegalType(lnum, resolvedargs1.value);
return predicate(resolvedargs0, resolvedargs1); return action(resolvedargs0, resolvedargs1);
} }
function threeArgNonNull(lnum, args, predicate) { function threeArgNonNull(lnum, args, action) {
if (args.length != 3) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); if (args.length != 3) throw lang.syntaxfehler(lnum, args.length + " arguments were given");
var resolvedargs0 = resolve(args[0]); var resolvedargs0 = resolve(args[0]);
if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value); if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value);
@@ -198,9 +198,9 @@ function threeArgNonNull(lnum, args, predicate) {
if (resolvedargs1 === undefined) throw lang.refError(lnum, resolvedargs1.value); if (resolvedargs1 === undefined) throw lang.refError(lnum, resolvedargs1.value);
var resolvedargs2 = resolve(args[2]); var resolvedargs2 = resolve(args[2]);
if (resolvedargs2 === undefined) throw lang.refError(lnum, resolvedargs2.value); if (resolvedargs2 === undefined) throw lang.refError(lnum, resolvedargs2.value);
return predicate(resolvedargs0, resolvedargs1, resolvedargs2); return action(resolvedargs0, resolvedargs1, resolvedargs2);
} }
function threeArgNonNullNumeric(lnum, args, predicate) { function threeArgNonNullNumeric(lnum, args, action) {
if (args.length != 3) throw lang.syntaxfehler(lnum, args.length + " arguments were given"); if (args.length != 3) throw lang.syntaxfehler(lnum, args.length + " arguments were given");
var resolvedargs0 = resolve(args[0]); var resolvedargs0 = resolve(args[0]);
if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value); if (resolvedargs0 === undefined) throw lang.refError(lnum, resolvedargs0.value);
@@ -211,7 +211,7 @@ function threeArgNonNullNumeric(lnum, args, predicate) {
var resolvedargs2 = resolve(args[2]); var resolvedargs2 = resolve(args[2]);
if (resolvedargs2 === undefined) throw lang.refError(lnum, resolvedargs2.value); if (resolvedargs2 === undefined) throw lang.refError(lnum, resolvedargs2.value);
if (isNaN(resolvedargs2)) throw lang.illegalType(lnum, resolvedargs2.value); if (isNaN(resolvedargs2)) throw lang.illegalType(lnum, resolvedargs2.value);
return predicate(resolvedargs0, resolvedargs1, resolvedargs2); return action(resolvedargs0, resolvedargs1, resolvedargs2);
} }
var basicInterpreterStatus = {}; var basicInterpreterStatus = {};
basicInterpreterStatus.gosubStack = []; basicInterpreterStatus.gosubStack = [];
@@ -295,25 +295,30 @@ basicInterpreterStatus.builtin = {
"^" : function(lnum, args) { "^" : function(lnum, args) {
return twoArgNonNullNumeric(lnum, args, function(lh, rh) { Math.pow(lh, rh); }); return twoArgNonNullNumeric(lnum, args, function(lh, rh) { Math.pow(lh, rh); });
}, },
"PRINT" : function(lnum, args) { "PRINT" : function(lnum, args, seps) {
//serial.println("BASIC func: PRINT -- args="+(args.map(function(it) { return it.type+" "+it.value; })).join(", ")); //serial.println("BASIC func: PRINT -- args="+(args.map(function(it) { return it.type+" "+it.value; })).join(", "));
if (args.length == 0) if (args.length == 0)
println(); println();
else { else {
if (args[args.length - 1].type == "null") { for (var llll = 0; llll < args.length; llll++) {
print(args.slice(0, args.length - 1).map(function(it) { // parse separators.
var it2 = resolve(it); // ; - concat
return ((!isNaN(it2)) ? " " : "") + it2; // BASIC always put a space before a number // , - tab
}).join("\t")); // numbers always surrounded by 1 whitespace
} if (llll >= 1) {
else { if (seps[llll - 1] == ",") print("\t");
println(args.map(function(it) { }
var it2 = resolve(it);
return ((!isNaN(it2)) ? " " : "") + it2; // BASIC always put a space before a number var resolvedargs = resolve(args[llll]);
}).join("\t")); if (args[llll].type == "number")
print(" "+resolvedargs+" ");
else
print(resolvedargs);
} }
} }
if (args[args.length - 1].type != "null") println();
}, },
"EMIT" : function(lnum, args) { "EMIT" : function(lnum, args) {
if (args.length > 0) { if (args.length > 0) {
@@ -1212,12 +1217,13 @@ basicFunctions._executeSyntaxTree = function(lnum, syntaxTree, recDepth) {
} }
else { else {
try { try {
var funcCallResult = func(lnum, args); var funcCallResult = func(lnum, args, syntaxTree.seps);
return new SyntaxTreeReturnObj( return new SyntaxTreeReturnObj(
JStoBASICtype(funcCallResult), JStoBASICtype(funcCallResult),
funcCallResult, funcCallResult,
(basicFunctions._gotoCmds[funcName] !== undefined) ? funcCallResult : lnum + 1 (basicFunctions._gotoCmds[funcName] !== undefined) ? funcCallResult : lnum + 1,
syntaxTree.seps
); );
} }
catch (eeeee) { catch (eeeee) {