diff --git a/tst/test-compile/ranges.g b/tst/test-compile/ranges.g index dd7ab7f3fdb..102321691bf 100644 --- a/tst/test-compile/ranges.g +++ b/tst/test-compile/ranges.g @@ -13,4 +13,14 @@ runtest := function() CALL_WITH_CATCH(range3, [-2^80,0, 1]); CALL_WITH_CATCH(range3, [0,2^80,2^81]); + Display([1,2..2]); + CALL_WITH_CATCH(range3, [2,2,2]); + Display([2,4..6]); + CALL_WITH_CATCH(range3, [2,4,7]); + Display([2,4..2]); + Display([2,4..0]); + CALL_WITH_CATCH(range3, [4,2,1]); + Display([4,2..0]); + Display([4,2..8]); + end; diff --git a/tst/test-compile/ranges.g.dynamic.c b/tst/test-compile/ranges.g.dynamic.c index 6e70988d663..89c68fccb51 100644 --- a/tst/test-compile/ranges.g.dynamic.c +++ b/tst/test-compile/ranges.g.dynamic.c @@ -1,6 +1,6 @@ /* C file produced by GAC */ #include "compiled.h" -#define FILE_CRC "-49750691" +#define FILE_CRC "77795076" /* global variables used in handlers */ static GVar G_CALL__WITH__CATCH; @@ -11,6 +11,8 @@ static GVar G_range3; static Obj GC_range3; static GVar G_runtest; static GVar G_BreakOnError; +static GVar G_Display; +static Obj GF_Display; /* record names used in handlers */ @@ -148,6 +150,69 @@ static Obj HdlrFunc4 ( CHANGED_BAG( t_3 ); CALL_2ARGS( t_1, t_2, t_3 ); + /* Display( [ 1, 2 .. 2 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(1), INTOBJ_INT(2), INTOBJ_INT(2) ); + CALL_1ARGS( t_1, t_2 ); + + /* CALL_WITH_CATCH( range3, [ 2, 2, 2 ] ); */ + t_1 = GF_CALL__WITH__CATCH; + t_2 = GC_range3; + CHECK_BOUND( t_2, "range3" ) + t_3 = NEW_PLIST( T_PLIST, 3 ); + SET_LEN_PLIST( t_3, 3 ); + SET_ELM_PLIST( t_3, 1, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 2, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 3, INTOBJ_INT(2) ); + CALL_2ARGS( t_1, t_2, t_3 ); + + /* Display( [ 2, 4 .. 6 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(2), INTOBJ_INT(4), INTOBJ_INT(6) ); + CALL_1ARGS( t_1, t_2 ); + + /* CALL_WITH_CATCH( range3, [ 2, 4, 7 ] ); */ + t_1 = GF_CALL__WITH__CATCH; + t_2 = GC_range3; + CHECK_BOUND( t_2, "range3" ) + t_3 = NEW_PLIST( T_PLIST, 3 ); + SET_LEN_PLIST( t_3, 3 ); + SET_ELM_PLIST( t_3, 1, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 2, INTOBJ_INT(4) ); + SET_ELM_PLIST( t_3, 3, INTOBJ_INT(7) ); + CALL_2ARGS( t_1, t_2, t_3 ); + + /* Display( [ 2, 4 .. 2 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(2), INTOBJ_INT(4), INTOBJ_INT(2) ); + CALL_1ARGS( t_1, t_2 ); + + /* Display( [ 2, 4 .. 0 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(2), INTOBJ_INT(4), INTOBJ_INT(0) ); + CALL_1ARGS( t_1, t_2 ); + + /* CALL_WITH_CATCH( range3, [ 4, 2, 1 ] ); */ + t_1 = GF_CALL__WITH__CATCH; + t_2 = GC_range3; + CHECK_BOUND( t_2, "range3" ) + t_3 = NEW_PLIST( T_PLIST, 3 ); + SET_LEN_PLIST( t_3, 3 ); + SET_ELM_PLIST( t_3, 1, INTOBJ_INT(4) ); + SET_ELM_PLIST( t_3, 2, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 3, INTOBJ_INT(1) ); + CALL_2ARGS( t_1, t_2, t_3 ); + + /* Display( [ 4, 2 .. 0 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(4), INTOBJ_INT(2), INTOBJ_INT(0) ); + CALL_1ARGS( t_1, t_2 ); + + /* Display( [ 4, 2 .. 8 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(4), INTOBJ_INT(2), INTOBJ_INT(8) ); + CALL_1ARGS( t_1, t_2 ); + /* return; */ SWITCH_TO_OLD_FRAME(oldFrame); return 0; @@ -201,13 +266,22 @@ static Obj HdlrFunc1 ( CALL_WITH_CATCH( range3, [ 1, 2, 2 ^ 80 ] ); CALL_WITH_CATCH( range3, [ - 2 ^ 80, 0, 1 ] ); CALL_WITH_CATCH( range3, [ 0, 2 ^ 80, 2 ^ 81 ] ); + Display( [ 1, 2 .. 2 ] ); + CALL_WITH_CATCH( range3, [ 2, 2, 2 ] ); + Display( [ 2, 4 .. 6 ] ); + CALL_WITH_CATCH( range3, [ 2, 4, 7 ] ); + Display( [ 2, 4 .. 2 ] ); + Display( [ 2, 4 .. 0 ] ); + CALL_WITH_CATCH( range3, [ 4, 2, 1 ] ); + Display( [ 4, 2 .. 0 ] ); + Display( [ 4, 2 .. 8 ] ); return; end; */ t_1 = NewFunction( NameFunc[4], 0, 0, HdlrFunc4 ); SET_ENVI_FUNC( t_1, STATE(CurrLVars) ); t_2 = NewFunctionBody(); SET_STARTLINE_BODY(t_2, 4); - SET_ENDLINE_BODY(t_2, 16); + SET_ENDLINE_BODY(t_2, 26); SET_FILENAME_BODY(t_2, FileName); SET_BODY_FUNC(t_1, t_2); CHANGED_BAG( STATE(CurrLVars) ); @@ -232,6 +306,7 @@ static Int PostRestore ( StructInitInfo * module ) G_range3 = GVarName( "range3" ); G_runtest = GVarName( "runtest" ); G_BreakOnError = GVarName( "BreakOnError" ); + G_Display = GVarName( "Display" ); /* record names used in handlers */ @@ -255,6 +330,7 @@ static Int InitKernel ( StructInitInfo * module ) InitFopyGVar( "CALL_WITH_CATCH", &GF_CALL__WITH__CATCH ); InitCopyGVar( "range2", &GC_range2 ); InitCopyGVar( "range3", &GC_range3 ); + InitFopyGVar( "Display", &GF_Display ); /* information for the functions */ InitGlobalBag( &FileName, "ranges.g:FileName("FILE_CRC")" ); @@ -301,7 +377,7 @@ static Int InitLibrary ( StructInitInfo * module ) static StructInitInfo module = { .type = MODULE_DYNAMIC, .name = "ranges.g", - .crc = -49750691, + .crc = 77795076, .initKernel = InitKernel, .initLibrary = InitLibrary, .postRestore = PostRestore, diff --git a/tst/test-compile/ranges.g.out b/tst/test-compile/ranges.g.out index 9f93c104a83..15fe9e94dd3 100644 --- a/tst/test-compile/ranges.g.out +++ b/tst/test-compile/ranges.g.out @@ -3,3 +3,12 @@ Error, Range: must be a small integer (not a large negative integer) Error, Range: must be a small integer (not a large positive integer) Error, Range: must be a small integer (not a large negative integer) Error, Range: must be a small integer (not a large positive integer) +[ 1 .. 2 ] +Error, Range: must not be equal to (2) +[ 2, 4 .. 6 ] +Error, Range: - (5) must be divisible by (2) +[ 2 ] +[ ] +Error, Range: - (-3) must be divisible by (-2) +[ 4, 2 .. 0 ] +[ ] diff --git a/tst/test-compile/ranges.g.static.c b/tst/test-compile/ranges.g.static.c index df0ce711db1..2c7d4013435 100644 --- a/tst/test-compile/ranges.g.static.c +++ b/tst/test-compile/ranges.g.static.c @@ -1,6 +1,6 @@ /* C file produced by GAC */ #include "compiled.h" -#define FILE_CRC "-49750691" +#define FILE_CRC "77795076" /* global variables used in handlers */ static GVar G_CALL__WITH__CATCH; @@ -11,6 +11,8 @@ static GVar G_range3; static Obj GC_range3; static GVar G_runtest; static GVar G_BreakOnError; +static GVar G_Display; +static Obj GF_Display; /* record names used in handlers */ @@ -148,6 +150,69 @@ static Obj HdlrFunc4 ( CHANGED_BAG( t_3 ); CALL_2ARGS( t_1, t_2, t_3 ); + /* Display( [ 1, 2 .. 2 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(1), INTOBJ_INT(2), INTOBJ_INT(2) ); + CALL_1ARGS( t_1, t_2 ); + + /* CALL_WITH_CATCH( range3, [ 2, 2, 2 ] ); */ + t_1 = GF_CALL__WITH__CATCH; + t_2 = GC_range3; + CHECK_BOUND( t_2, "range3" ) + t_3 = NEW_PLIST( T_PLIST, 3 ); + SET_LEN_PLIST( t_3, 3 ); + SET_ELM_PLIST( t_3, 1, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 2, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 3, INTOBJ_INT(2) ); + CALL_2ARGS( t_1, t_2, t_3 ); + + /* Display( [ 2, 4 .. 6 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(2), INTOBJ_INT(4), INTOBJ_INT(6) ); + CALL_1ARGS( t_1, t_2 ); + + /* CALL_WITH_CATCH( range3, [ 2, 4, 7 ] ); */ + t_1 = GF_CALL__WITH__CATCH; + t_2 = GC_range3; + CHECK_BOUND( t_2, "range3" ) + t_3 = NEW_PLIST( T_PLIST, 3 ); + SET_LEN_PLIST( t_3, 3 ); + SET_ELM_PLIST( t_3, 1, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 2, INTOBJ_INT(4) ); + SET_ELM_PLIST( t_3, 3, INTOBJ_INT(7) ); + CALL_2ARGS( t_1, t_2, t_3 ); + + /* Display( [ 2, 4 .. 2 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(2), INTOBJ_INT(4), INTOBJ_INT(2) ); + CALL_1ARGS( t_1, t_2 ); + + /* Display( [ 2, 4 .. 0 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(2), INTOBJ_INT(4), INTOBJ_INT(0) ); + CALL_1ARGS( t_1, t_2 ); + + /* CALL_WITH_CATCH( range3, [ 4, 2, 1 ] ); */ + t_1 = GF_CALL__WITH__CATCH; + t_2 = GC_range3; + CHECK_BOUND( t_2, "range3" ) + t_3 = NEW_PLIST( T_PLIST, 3 ); + SET_LEN_PLIST( t_3, 3 ); + SET_ELM_PLIST( t_3, 1, INTOBJ_INT(4) ); + SET_ELM_PLIST( t_3, 2, INTOBJ_INT(2) ); + SET_ELM_PLIST( t_3, 3, INTOBJ_INT(1) ); + CALL_2ARGS( t_1, t_2, t_3 ); + + /* Display( [ 4, 2 .. 0 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(4), INTOBJ_INT(2), INTOBJ_INT(0) ); + CALL_1ARGS( t_1, t_2 ); + + /* Display( [ 4, 2 .. 8 ] ); */ + t_1 = GF_Display; + t_2 = Range3Check( INTOBJ_INT(4), INTOBJ_INT(2), INTOBJ_INT(8) ); + CALL_1ARGS( t_1, t_2 ); + /* return; */ SWITCH_TO_OLD_FRAME(oldFrame); return 0; @@ -201,13 +266,22 @@ static Obj HdlrFunc1 ( CALL_WITH_CATCH( range3, [ 1, 2, 2 ^ 80 ] ); CALL_WITH_CATCH( range3, [ - 2 ^ 80, 0, 1 ] ); CALL_WITH_CATCH( range3, [ 0, 2 ^ 80, 2 ^ 81 ] ); + Display( [ 1, 2 .. 2 ] ); + CALL_WITH_CATCH( range3, [ 2, 2, 2 ] ); + Display( [ 2, 4 .. 6 ] ); + CALL_WITH_CATCH( range3, [ 2, 4, 7 ] ); + Display( [ 2, 4 .. 2 ] ); + Display( [ 2, 4 .. 0 ] ); + CALL_WITH_CATCH( range3, [ 4, 2, 1 ] ); + Display( [ 4, 2 .. 0 ] ); + Display( [ 4, 2 .. 8 ] ); return; end; */ t_1 = NewFunction( NameFunc[4], 0, 0, HdlrFunc4 ); SET_ENVI_FUNC( t_1, STATE(CurrLVars) ); t_2 = NewFunctionBody(); SET_STARTLINE_BODY(t_2, 4); - SET_ENDLINE_BODY(t_2, 16); + SET_ENDLINE_BODY(t_2, 26); SET_FILENAME_BODY(t_2, FileName); SET_BODY_FUNC(t_1, t_2); CHANGED_BAG( STATE(CurrLVars) ); @@ -232,6 +306,7 @@ static Int PostRestore ( StructInitInfo * module ) G_range3 = GVarName( "range3" ); G_runtest = GVarName( "runtest" ); G_BreakOnError = GVarName( "BreakOnError" ); + G_Display = GVarName( "Display" ); /* record names used in handlers */ @@ -255,6 +330,7 @@ static Int InitKernel ( StructInitInfo * module ) InitFopyGVar( "CALL_WITH_CATCH", &GF_CALL__WITH__CATCH ); InitCopyGVar( "range2", &GC_range2 ); InitCopyGVar( "range3", &GC_range3 ); + InitFopyGVar( "Display", &GF_Display ); /* information for the functions */ InitGlobalBag( &FileName, "ranges.g:FileName("FILE_CRC")" ); @@ -301,7 +377,7 @@ static Int InitLibrary ( StructInitInfo * module ) static StructInitInfo module = { .type = MODULE_STATIC, .name = "ranges.g", - .crc = -49750691, + .crc = 77795076, .initKernel = InitKernel, .initLibrary = InitLibrary, .postRestore = PostRestore, diff --git a/tst/testinstall/float.tst b/tst/testinstall/float.tst index 5e344455047..d3d3c24d692 100644 --- a/tst/testinstall/float.tst +++ b/tst/testinstall/float.tst @@ -288,6 +288,8 @@ gap> 1.1; 1.1 gap> 1.1_; 1.1 +gap> 1.1_l; +1.1 gap> 1.x1; Syntax error: Badly formed number in stream:1 1.x1; @@ -297,10 +299,89 @@ Syntax error: Badly formed number in stream:1 1.1xx; ^^^^ +# longer than 1023 chars +gap> 2.1111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111; +2.11111 +gap> 2.1111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111_; +2.11111 +gap> 2.1111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111_l; +2.11111 + # The following is potentially correct, *if* there is a conversion handler for # 'x' installed, which normally isn't the case. +gap> 1.1_x; +Error, Unknown float literal conversion 'x' gap> 1.1x; Error, failed to convert float literal +gap> 2.1111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111_x; +Error, Unknown float literal conversion 'x' +gap> 2.1111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111x; +Error, failed to convert float literal # # float literal expressions in functions @@ -317,18 +398,254 @@ gap> Display(f); function ( ) return 42.0_; end +gap> f := {} -> 42.0_l;; f(); +42. +gap> Display(f); +function ( ) + return 42.0_l; +end +gap> f := {} -> 42.0_x;; +Error, Unknown float literal conversion 'x' +gap> f := {} -> 2.11111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 11111111111111111111111111111111111111111111111111111111111111111111_;; +gap> f(); +2.11111 +gap> Display(f); +function ( ) + return + 2.11111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +11111111111111111111_; +end +gap> f := {} -> 2.11111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 11111111111111111111111111111111111111111111111111111111111111111111_l;; +gap> f(); +2.11111 +gap> Display(f); +function ( ) + return + 2.11111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +11111111111111111111_l; +end +gap> f := {} -> 2.11111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 11111111111111111111111111111111111111111111111111111111111111111111_x;; +Error, Unknown float literal conversion 'x' # lazy literal -gap> g := {} -> 0.0;; g(); +gap> g := {} -> 0.0;; g(); # special case 0.0 0. -gap> g := {} -> 1.0;; g(); +gap> g := {} -> 1.0;; g(); # special case 1.1 1. -gap> g := {} -> 23.0;; g(); +gap> g := {} -> 23.0;; g(); # generic case +23. +gap> Display(g); +function ( ) + return 23.0; +end +gap> g := {} -> 23.0;; g(); # generic case 23. gap> Display(g); function ( ) return 23.0; end +gap> g := {} -> 2.11111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 11111111111111111111111111111111111111111111111111111111111111111111;; +gap> Display(g); +function ( ) + return + 2.11111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +11111111111111111111; +end +gap> g(); +2.11111 +gap> g := {} -> 2.11111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 11111111111111111111111111111111111111111111111111111111111111111111l;; +gap> Display(g); +function ( ) + return + 2.11111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +111111111111111111111111111111111111111111111111111111111111111111111111111111\ +\ +11111111111111111111l; +end +gap> g(); +fail +gap> g := {} -> 23.0x;; # this works, as we evaluate lazily +gap> g(); +fail +gap> g := {} -> 2.11111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 111111111111111111111111111111111111111111111111111111111111111111111111111\ +> 11111111111111111111111111111111111111111111111111111111111111111111x;; +gap> g(); +fail # # diff --git a/tst/testspecial/funccall-ReadEvalError.g b/tst/testspecial/funccall-ReadEvalError.g new file mode 100644 index 00000000000..d597d699560 --- /dev/null +++ b/tst/testspecial/funccall-ReadEvalError.g @@ -0,0 +1,3 @@ +Read(InputTextString("1/0")); +quit; +1+1; diff --git a/tst/testspecial/funccall-ReadEvalError.g.out b/tst/testspecial/funccall-ReadEvalError.g.out new file mode 100644 index 00000000000..32cb7c425df --- /dev/null +++ b/tst/testspecial/funccall-ReadEvalError.g.out @@ -0,0 +1,9 @@ +gap> Read(InputTextString("1/0")); +Error, Rational operations: must not be zero +not in any function at stream:1 +type 'quit;' to quit to outer loop +brk> quit; +Syntax error: ; expected in stream:1 +gap> 1+1; +2 +gap> QUIT;