/* In-memory PRG compilation via FrbCompile / FrbExec. */ FUNCTION Main() LOCAL pStr, cSource /* 1. FrbCompile a small lib, call its functions */ cSource := ; 'FUNCTION Reverse(cStr)' + Chr(10) + ; ' LOCAL i, cResult := ""' + Chr(10) + ; ' FOR i := Len(cStr) TO 1 STEP -1' + Chr(10) + ; ' cResult += SubStr(cStr, i, 1)' + Chr(10) + ; ' NEXT' + Chr(10) + ; ' RETURN cResult' + Chr(10) + ; 'FUNCTION Triple(n)' + Chr(10) + ; ' RETURN n * 3' + Chr(10) pStr := FrbCompile(cSource) IF pStr == NIL ? "FAIL: FrbCompile returned NIL" RETURN NIL ENDIF ? "1. Reverse('Hello') =", FrbDo(pStr, "REVERSE", "Hello"), "(expect olleH)" ? "2. Triple(7) =", FrbDo(pStr, "TRIPLE", 7), "(expect 21)" FrbUnload(pStr) /* 2. One-shot FrbExec */ ? "3. Sum 1..100 via FrbExec:" ? " ", FrbExec( ; 'FUNCTION Main()' + Chr(10) + ; ' LOCAL i, n := 0' + Chr(10) + ; ' FOR i := 1 TO 100' + Chr(10) + ; ' n += i' + Chr(10) + ; ' NEXT' + Chr(10) + ; ' RETURN n' + Chr(10) ), "(expect 5050)" ? "DONE" RETURN NIL