aboutsummaryrefslogtreecommitdiffhomepage
path: root/libslang/src/test/selfload.sl
diff options
context:
space:
mode:
Diffstat (limited to 'libslang/src/test/selfload.sl')
-rw-r--r--libslang/src/test/selfload.sl42
1 files changed, 42 insertions, 0 deletions
diff --git a/libslang/src/test/selfload.sl b/libslang/src/test/selfload.sl
new file mode 100644
index 0000000..a360a29
--- /dev/null
+++ b/libslang/src/test/selfload.sl
@@ -0,0 +1,42 @@
+% This is also a good test to perform leak checking on.
+_debug_info = 1; () = evalfile ("inc.sl");
+
+print ("Testing recursive function modifications ...");
+
+variable X = "";
+
+variable V1 = "define crash () { eval(V2); X += \"V1\"; }";
+variable V2 = "define crash () { eval(V1); X += \"V2\"; }";
+
+define crash ();
+
+define crash ()
+{
+ eval (V1);
+ crash ();
+ if (X != "V1")
+ failed ("V1");
+
+ if (1)
+ {
+ eval (V2);
+ crash ();
+ if (X != "V1V2")
+ failed ("V1V2");
+
+ if (1)
+ eval (V1);
+ crash ();
+ if (X != "V1V2V1")
+ failed ("V1V2V1");
+ }
+ X += "V0";
+}
+
+crash ();
+if (X != "V1V2V1V0") failed ("V1V2V1V0 : ", + X);
+
+print ("Ok\n");
+exit (0);
+
+