mirror of
https://github.com/curioustorvald/tsvm.git
synced 2026-06-13 16:04:05 +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
|
// userdefun with args
|
||||||
// apply given arguments (syntaxTree.astLeaves) to the expression tree and evaluate it
|
// 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)
|
// if tree has leaves:
|
||||||
else if (syntaxTree.astType == "usrdefun" && syntaxTree.astLeaves[0] !== undefined &&
|
else if (syntaxTree.astType == "usrdefun" && syntaxTree.astLeaves[0] !== undefined) {
|
||||||
syntaxTree.astLeaves.every(child => child.astLeaves[0] == undefined && child.astType !== "usrdefun")) {
|
|
||||||
let oldTree = syntaxTree.astValue;
|
let oldTree = syntaxTree.astValue;
|
||||||
let argsTro = syntaxTree.astLeaves.map(it => bF._executeSyntaxTree(lnum, stmtnum, it, recDepth + 1));
|
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
|
let newTree = oldTree; // curryDefun() will make a clone of it for us
|
||||||
|
|||||||
Reference in New Issue
Block a user