Skip to content

Commit

Permalink
Correctly restore Tilde when returning from ReadAsFunction
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisJefferson authored and fingolfin committed Nov 21, 2017
1 parent 4412a13 commit 3afa20b
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/read.c
Original file line number Diff line number Diff line change
Expand Up @@ -2739,6 +2739,7 @@ ExecStatus ReadEvalCommand(Obj context, Obj *evalResult, UInt *dualSemicolon)
volatile Obj stackNams;
volatile UInt readTop;
volatile UInt readTilde;
volatile Obj tilde;
volatile UInt currLHSGVar;
volatile Obj errorLVars;
syJmp_buf readJmpError;
Expand Down Expand Up @@ -2767,13 +2768,15 @@ ExecStatus ReadEvalCommand(Obj context, Obj *evalResult, UInt *dualSemicolon)
stackNams = STATE(StackNams);
readTop = STATE(ReadTop);
readTilde = STATE(ReadTilde);
tilde = STATE(Tilde);
currLHSGVar = STATE(CurrLHSGVar);
memcpy( readJmpError, STATE(ReadJmpError), sizeof(syJmp_buf) );

/* intialize everything and begin an interpreter */
STATE(StackNams) = NEW_PLIST( T_PLIST, 16 );
STATE(ReadTop) = 0;
STATE(ReadTilde) = 0;
STATE(Tilde) = 0;
STATE(CurrLHSGVar) = 0;
RecreateStackNams(context);
errorLVars = STATE(ErrorLVars);
Expand Down Expand Up @@ -2843,6 +2846,7 @@ ExecStatus ReadEvalCommand(Obj context, Obj *evalResult, UInt *dualSemicolon)
STATE(StackNams) = stackNams;
STATE(ReadTop) = readTop;
STATE(ReadTilde) = readTilde;
STATE(Tilde) = tilde;
STATE(CurrLHSGVar) = currLHSGVar;
STATE(ErrorLVars) = errorLVars;

Expand All @@ -2869,6 +2873,7 @@ UInt ReadEvalFile(Obj *evalResult)
volatile Obj stackNams;
volatile UInt readTop;
volatile UInt readTilde;
volatile Obj tilde;
volatile UInt currLHSGVar;
syJmp_buf readJmpError;
volatile UInt nr;
Expand Down Expand Up @@ -2896,6 +2901,7 @@ UInt ReadEvalFile(Obj *evalResult)
stackNams = STATE(StackNams);
readTop = STATE(ReadTop);
readTilde = STATE(ReadTilde);
tilde = STATE(Tilde);
currLHSGVar = STATE(CurrLHSGVar);
#ifdef HPCGAP
lockSP = RegionLockSP();
Expand All @@ -2906,6 +2912,7 @@ UInt ReadEvalFile(Obj *evalResult)
STATE(StackNams) = NEW_PLIST( T_PLIST, 16 );
STATE(ReadTop) = 0;
STATE(ReadTilde) = 0;
STATE(Tilde) = 0;
STATE(CurrLHSGVar) = 0;
IntrBegin(STATE(BottomLVars));

Expand Down Expand Up @@ -2978,6 +2985,7 @@ UInt ReadEvalFile(Obj *evalResult)
STATE(StackNams) = stackNams;
STATE(ReadTop) = readTop;
STATE(ReadTilde) = readTilde;
STATE(Tilde) = tilde;
STATE(CurrLHSGVar) = currLHSGVar;

/* copy the result (if any) */
Expand Down
3 changes: 3 additions & 0 deletions tst/testinstall/tilde.tst
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,7 @@ true
gap> bool := (rec1 < rec2);;
gap> ForAll([1..10000], q -> ( (rec1 < rec2) = bool) );
true
gap> i := InputTextString( "local a; a := 10; return rec(a := a*10, b := ~);" );;
gap> r := rec(a := ~, b := ReadAsFunction(i)(), c := ~.b.a);
rec( a := ~, b := rec( a := 100, b := ~.b ), c := 100 )
gap> STOP_TEST( "tilde.tst", 1);

0 comments on commit 3afa20b

Please sign in to comment.