mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-03-07 19:51:51 +09:00
basic: defun f call to run on complex expr as argument, not just a constant you dumbass
This commit is contained in:
8
assets/disk0/home/basic/fcallcomplex.bas
Normal file
8
assets/disk0/home/basic/fcallcomplex.bas
Normal file
@@ -0,0 +1,8 @@
|
||||
1 optiontrace 1:optiondebug 1
|
||||
10 defun fun(x)=2^x
|
||||
20 defun apply(f,x)=f((x+1)/2)
|
||||
30 k=apply(fun,6)
|
||||
40 print k
|
||||
50 print typeof k
|
||||
60 unresolve k
|
||||
70 resolve k
|
||||
@@ -2839,9 +2839,8 @@ bF._executeSyntaxTree = function(lnum, stmtnum, syntaxTree, recDepth) {
|
||||
}
|
||||
// userdefun with args
|
||||
// apply given arguments (syntaxTree.astLeaves) to the expression tree and evaluate it
|
||||
// if tree has leaves and their leaves are all terminal leaves (does not have grandchild AND they are not usrdefun)
|
||||
else if (syntaxTree.astType == "usrdefun" && syntaxTree.astLeaves[0] !== undefined &&
|
||||
syntaxTree.astLeaves.every(child => child.astLeaves[0] == undefined && child.astType !== "usrdefun")) {
|
||||
// if tree has leaves:
|
||||
else if (syntaxTree.astType == "usrdefun" && syntaxTree.astLeaves[0] !== undefined) {
|
||||
let oldTree = syntaxTree.astValue;
|
||||
let argsTro = syntaxTree.astLeaves.map(it => bF._executeSyntaxTree(lnum, stmtnum, it, recDepth + 1));
|
||||
let newTree = oldTree; // curryDefun() will make a clone of it for us
|
||||
|
||||
Reference in New Issue
Block a user