mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-10 23:04:04 +09:00
PRINT function to differentiate , and ;
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user