Possible repeat{} / break function bug in R 3.4.1

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Possible repeat{} / break function bug in R 3.4.1

Peter Bosa
Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).

When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.

For example, the following code runs fine:

x <- 1
y <- 5

repeat {
  if(x < y) {
    print("No Break Dance :-(")
    x = x + 1
  } else {
    print("Break Dance!")
    break
  }
}

[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "Break Dance!"
>

However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:

if(x < y) {
  print("No Break Dance :-(")
  x = x + 1
} else {
  print("Break Dance!")
  break
}

And then run the following code:

x <- 1
y <- 5

repeat{
  source("./breakTest.R")
}

I get the following error:

[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "No Break Dance :("
[1] "Break Dance!"
Error in eval(ei, envir) : no loop for break/next, jumping to top level
>

This was not an issue with previous versions of R that I have used, including 3.3.3.

Any suggestions? Is this a known bug with 3.4.1?

Cheers-
Peter



----------------------------------------------------------------
peter bosa
metro
modeling services
600 ne grand ave
portland, or  97232

[hidden email]<mailto:[hidden email]>
503.797.1771

metro | making a great place
www.oregonmetro.gov


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Martin Maechler
>>>>> Peter Bosa <[hidden email]>
>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:

    > Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
    > When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.

  > Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
  >
  > When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
  >
  > For example, the following code runs fine:
  >
  > x <- 1
  > y <- 5
  >
  > repeat {
  >   if(x < y) {
  >     print("No Break Dance :-(")
  >     x = x + 1
  >   } else {
  >     print("Break Dance!")
  >     break
  >   }
  > }
  >
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "Break Dance!"
  > >
  >
  > However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:
  >
  > if(x < y) {
  >   print("No Break Dance :-(")
  >   x = x + 1
  > } else {
  >   print("Break Dance!")
  >   break
  > }
  >
  > And then run the following code:
  >
  > x <- 1
  > y <- 5
  >
  > repeat{
  >   source("./breakTest.R")
  > }
  >
  > I get the following error:
  >
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "No Break Dance :("
  > [1] "Break Dance!"
  > Error in eval(ei, envir) : no loop for break/next, jumping to top level
  > >
  >
  > This was not an issue with previous versions of R that I have used, including 3.3.3.
  >
  > Any suggestions? Is this a known bug with 3.4.1?

Thank you, Peter!

I can confirm what you are seeing (on Linux) in R version 3.4.0,
3.4.1, and "R devel", and also that this had worked w/o a
problem in earlier versions of R, where I've looked at
R version 3.3.3 and 3.2.5.

I do think this is a bug, but it was not known till now.

For ease of use, I attach the two R files to easily reproduce.
Note I use  writeLines() instead of print() as its output is "nicer".

Best regards,
Martin Maechler, ETH Zurich


______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Martin Maechler
>>>>> Martin Maechler <[hidden email]>
>>>>>     on Wed, 23 Aug 2017 09:10:20 +0200 writes:

>>>>> Peter Bosa <[hidden email]>
>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:

    >> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
    >> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.

    >> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
    >>
    >> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
    >>
    >> For example, the following code runs fine:
    >>
    >> x <- 1
    >> y <- 5
    >>
    >> repeat {
    >> if(x < y) {
    >> print("No Break Dance :-(")
    >> x = x + 1
    >> } else {
    >> print("Break Dance!")
    >> break
    >> }
    >> }
    >>
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "Break Dance!"
    >> >
    >>
    >> However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:
    >>
    >> if(x < y) {
    >> print("No Break Dance :-(")
    >> x = x + 1
    >> } else {
    >> print("Break Dance!")
    >> break
    >> }
    >>
    >> And then run the following code:
    >>
    >> x <- 1
    >> y <- 5
    >>
    >> repeat{
    >> source("./breakTest.R")
    >> }
    >>
    >> I get the following error:
    >>
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "No Break Dance :("
    >> [1] "Break Dance!"
    >> Error in eval(ei, envir) : no loop for break/next, jumping to top level
    >> >
    >>
    >> This was not an issue with previous versions of R that I have used, including 3.3.3.
    >>
    >> Any suggestions? Is this a known bug with 3.4.1?

    > Thank you, Peter!

    > I can confirm what you are seeing (on Linux) in R version 3.4.0,
    > 3.4.1, and "R devel", and also that this had worked w/o a
    > problem in earlier versions of R, where I've looked at
    > R version 3.3.3 and 3.2.5.

    > I do think this is a bug, but it was not known till now.

    > For ease of use, I attach the two R files to easily reproduce.
    > Note I use  writeLines() instead of print() as its output is "nicer".

    > Best regards,
    > Martin Maechler, ETH Zurich

Trying again with the two attachment.  Yes, I of all people (!!)
should know that they must have an allowed MIME type; in this
case  text/plain !

Martin


## see ./break-source_R341.R
if(x < y) {
  writeLines("No Break Dance :-(")
  x <- x + 1
} else {
  writeLines("Break Dance!")
  break
}

## From: Peter Bosa <[hidden email]>
## To: "[hidden email]" <[hidden email]>
## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
## Date: Tue, 22 Aug 2017 14:39:50 +0000

## Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).

## When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.

## For example, the following code runs fine:

x <- 1
y <- 5
repeat {
  if(x < y) {
    writeLines("No Break Dance :-(")
    x <- x + 1
  } else {
    writeLines("Break Dance!")
    break
  }
}
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## Break Dance!
## >

## However, if I take the loop contents of the repeat{} function, and save
## them to a file (breakTest.R) that contains the following:
##                 ^^^^^^^^^^^
##                __SEE THAT FILE__
## if(x < y) {
##   writeLines("No Break Dance :-(")
##   x = x + 1
## } else {
##   writeLines("Break Dance!")
##   break
## }

## And then run the following code:

x <- 1
y <- 5
repeat{
  source("./breakTest.R")
}
cat("successfully finished\n")

## I get the following error:

## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## No Break Dance :(
## Break Dance!
## Error in eval(ei, envir) : no loop for break/next, jumping to top level
## ^^^^^^^^^^^^^^^^^^^^


## This was not an issue with previous versions of R that I have used, including 3.3.3.

## MM: It does work in R 3.3.3, indeed
## --  it fails in R 3.4.0 and later


## Any suggestions? Is this a known bug with 3.4.1?

## Cheers-
## Peter


## ----------------------------------------------------------------
## peter bosa
## metro
## modeling services
## 600 ne grand ave
## portland, or  97232

## [hidden email]<mailto:[hidden email]>
## 503.797.1771

## metro | making a great place
## www.oregonmetro.gov

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Lionel Henry
I don't think that's a bug. source() uses eval(), and eval() creates a
new function-like context frame. In a way expecting `break` to work
inside source() is like expecting `break` to cross stack frames:

    my_break <- function() break
    repeat(my_break())

Lionel


> On 23 août 2017, at 09:17, Martin Maechler <[hidden email]> wrote:
>
>>>>>> Martin Maechler <[hidden email]>
>>>>>>    on Wed, 23 Aug 2017 09:10:20 +0200 writes:
>
>>>>>> Peter Bosa <[hidden email]>
>>>>>>    on Tue, 22 Aug 2017 14:39:50 +0000 writes:
>
>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>
>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>
>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>
>>> For example, the following code runs fine:
>>>
>>> x <- 1
>>> y <- 5
>>>
>>> repeat {
>>> if(x < y) {
>>> print("No Break Dance :-(")
>>> x = x + 1
>>> } else {
>>> print("Break Dance!")
>>> break
>>> }
>>> }
>>>
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "Break Dance!"
>>>>
>>>
>>> However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:
>>>
>>> if(x < y) {
>>> print("No Break Dance :-(")
>>> x = x + 1
>>> } else {
>>> print("Break Dance!")
>>> break
>>> }
>>>
>>> And then run the following code:
>>>
>>> x <- 1
>>> y <- 5
>>>
>>> repeat{
>>> source("./breakTest.R")
>>> }
>>>
>>> I get the following error:
>>>
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "No Break Dance :("
>>> [1] "Break Dance!"
>>> Error in eval(ei, envir) : no loop for break/next, jumping to top level
>>>>
>>>
>>> This was not an issue with previous versions of R that I have used, including 3.3.3.
>>>
>>> Any suggestions? Is this a known bug with 3.4.1?
>
>> Thank you, Peter!
>
>> I can confirm what you are seeing (on Linux) in R version 3.4.0,
>> 3.4.1, and "R devel", and also that this had worked w/o a
>> problem in earlier versions of R, where I've looked at
>> R version 3.3.3 and 3.2.5.
>
>> I do think this is a bug, but it was not known till now.
>
>> For ease of use, I attach the two R files to easily reproduce.
>> Note I use  writeLines() instead of print() as its output is "nicer".
>
>> Best regards,
>> Martin Maechler, ETH Zurich
>
> Trying again with the two attachment.  Yes, I of all people (!!)
> should know that they must have an allowed MIME type; in this
> case  text/plain !
>
> Martin
>
> ## see ./break-source_R341.R
> if(x < y) {
>  writeLines("No Break Dance :-(")
>  x <- x + 1
> } else {
>  writeLines("Break Dance!")
>  break
> }
> ## From: Peter Bosa <[hidden email]>
> ## To: "[hidden email]" <[hidden email]>
> ## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
> ## Date: Tue, 22 Aug 2017 14:39:50 +0000
>
> ## Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>
> ## When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>
> ## For example, the following code runs fine:
>
> x <- 1
> y <- 5
> repeat {
>  if(x < y) {
>    writeLines("No Break Dance :-(")
>    x <- x + 1
>  } else {
>    writeLines("Break Dance!")
>    break
>  }
> }
> ## No Break Dance :(
> ## No Break Dance :(
> ## No Break Dance :(
> ## No Break Dance :(
> ## No Break Dance :(
> ## Break Dance!
> ## >
>
> ## However, if I take the loop contents of the repeat{} function, and save
> ## them to a file (breakTest.R) that contains the following:
> ##                 ^^^^^^^^^^^
> ##                __SEE THAT FILE__
> ## if(x < y) {
> ##   writeLines("No Break Dance :-(")
> ##   x = x + 1
> ## } else {
> ##   writeLines("Break Dance!")
> ##   break
> ## }
>
> ## And then run the following code:
>
> x <- 1
> y <- 5
> repeat{
>  source("./breakTest.R")
> }
> cat("successfully finished\n")
>
> ## I get the following error:
>
> ## No Break Dance :(
> ## No Break Dance :(
> ## No Break Dance :(
> ## No Break Dance :(
> ## No Break Dance :(
> ## Break Dance!
> ## Error in eval(ei, envir) : no loop for break/next, jumping to top level
> ## ^^^^^^^^^^^^^^^^^^^^
>
>
> ## This was not an issue with previous versions of R that I have used, including 3.3.3.
>
> ## MM: It does work in R 3.3.3, indeed
> ## --  it fails in R 3.4.0 and later
>
>
> ## Any suggestions? Is this a known bug with 3.4.1?
>
> ## Cheers-
> ## Peter
>
>
> ## ----------------------------------------------------------------
> ## peter bosa
> ## metro
> ## modeling services
> ## 600 ne grand ave
> ## portland, or  97232
>
> ## [hidden email]<mailto:[hidden email]>
> ## 503.797.1771
>
> ## metro | making a great place
> ## www.oregonmetro.gov
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Tomas Kalibera
It is a bug in the byte-code compiler. I will fix
Tomas

On 08/23/2017 09:22 AM, Lionel Henry wrote:

> I don't think that's a bug. source() uses eval(), and eval() creates a
> new function-like context frame. In a way expecting `break` to work
> inside source() is like expecting `break` to cross stack frames:
>
>      my_break <- function() break
>      repeat(my_break())
>
> Lionel
>
>
>> On 23 août 2017, at 09:17, Martin Maechler <[hidden email]> wrote:
>>
>>>>>>> Martin Maechler <[hidden email]>
>>>>>>>     on Wed, 23 Aug 2017 09:10:20 +0200 writes:
>>>>>>> Peter Bosa <[hidden email]>
>>>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:
>>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>>
>>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>>
>>>> For example, the following code runs fine:
>>>>
>>>> x <- 1
>>>> y <- 5
>>>>
>>>> repeat {
>>>> if(x < y) {
>>>> print("No Break Dance :-(")
>>>> x = x + 1
>>>> } else {
>>>> print("Break Dance!")
>>>> break
>>>> }
>>>> }
>>>>
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "Break Dance!"
>>>> However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:
>>>>
>>>> if(x < y) {
>>>> print("No Break Dance :-(")
>>>> x = x + 1
>>>> } else {
>>>> print("Break Dance!")
>>>> break
>>>> }
>>>>
>>>> And then run the following code:
>>>>
>>>> x <- 1
>>>> y <- 5
>>>>
>>>> repeat{
>>>> source("./breakTest.R")
>>>> }
>>>>
>>>> I get the following error:
>>>>
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "No Break Dance :("
>>>> [1] "Break Dance!"
>>>> Error in eval(ei, envir) : no loop for break/next, jumping to top level
>>>> This was not an issue with previous versions of R that I have used, including 3.3.3.
>>>>
>>>> Any suggestions? Is this a known bug with 3.4.1?
>>> Thank you, Peter!
>>> I can confirm what you are seeing (on Linux) in R version 3.4.0,
>>> 3.4.1, and "R devel", and also that this had worked w/o a
>>> problem in earlier versions of R, where I've looked at
>>> R version 3.3.3 and 3.2.5.
>>> I do think this is a bug, but it was not known till now.
>>> For ease of use, I attach the two R files to easily reproduce.
>>> Note I use  writeLines() instead of print() as its output is "nicer".
>>> Best regards,
>>> Martin Maechler, ETH Zurich
>> Trying again with the two attachment.  Yes, I of all people (!!)
>> should know that they must have an allowed MIME type; in this
>> case  text/plain !
>>
>> Martin
>>
>> ## see ./break-source_R341.R
>> if(x < y) {
>>   writeLines("No Break Dance :-(")
>>   x <- x + 1
>> } else {
>>   writeLines("Break Dance!")
>>   break
>> }
>> ## From: Peter Bosa <[hidden email]>
>> ## To: "[hidden email]" <[hidden email]>
>> ## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
>> ## Date: Tue, 22 Aug 2017 14:39:50 +0000
>>
>> ## Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>
>> ## When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>
>> ## For example, the following code runs fine:
>>
>> x <- 1
>> y <- 5
>> repeat {
>>   if(x < y) {
>>     writeLines("No Break Dance :-(")
>>     x <- x + 1
>>   } else {
>>     writeLines("Break Dance!")
>>     break
>>   }
>> }
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## Break Dance!
>> ## >
>>
>> ## However, if I take the loop contents of the repeat{} function, and save
>> ## them to a file (breakTest.R) that contains the following:
>> ##                 ^^^^^^^^^^^
>> ##                __SEE THAT FILE__
>> ## if(x < y) {
>> ##   writeLines("No Break Dance :-(")
>> ##   x = x + 1
>> ## } else {
>> ##   writeLines("Break Dance!")
>> ##   break
>> ## }
>>
>> ## And then run the following code:
>>
>> x <- 1
>> y <- 5
>> repeat{
>>   source("./breakTest.R")
>> }
>> cat("successfully finished\n")
>>
>> ## I get the following error:
>>
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## No Break Dance :(
>> ## Break Dance!
>> ## Error in eval(ei, envir) : no loop for break/next, jumping to top level
>> ## ^^^^^^^^^^^^^^^^^^^^
>>
>>
>> ## This was not an issue with previous versions of R that I have used, including 3.3.3.
>>
>> ## MM: It does work in R 3.3.3, indeed
>> ## --  it fails in R 3.4.0 and later
>>
>>
>> ## Any suggestions? Is this a known bug with 3.4.1?
>>
>> ## Cheers-
>> ## Peter
>>
>>
>> ## ----------------------------------------------------------------
>> ## peter bosa
>> ## metro
>> ## modeling services
>> ## 600 ne grand ave
>> ## portland, or  97232
>>
>> ## [hidden email]<mailto:[hidden email]>
>> ## 503.797.1771
>>
>> ## metro | making a great place
>> ## www.oregonmetro.gov
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Lionel Henry
oops, I should have tried it:

    expr <- quote(break)
    repeat(eval(expr))


So eval() has hybrid semantics where `break` has more reach than
return(), weird.

    expr <- quote(return())
    repeat(eval(expr))  # infloop

Lionel


> On 23 août 2017, at 09:24, Tomas Kalibera <[hidden email]> wrote:
>
> It is a bug in the byte-code compiler. I will fix
> Tomas
>
> On 08/23/2017 09:22 AM, Lionel Henry wrote:
>> I don't think that's a bug. source() uses eval(), and eval() creates a
>> new function-like context frame. In a way expecting `break` to work
>> inside source() is like expecting `break` to cross stack frames:
>>
>>     my_break <- function() break
>>     repeat(my_break())
>>
>> Lionel
>>
>>
>>> On 23 août 2017, at 09:17, Martin Maechler <[hidden email]> wrote:
>>>
>>>>>>>> Martin Maechler <[hidden email]>
>>>>>>>>    on Wed, 23 Aug 2017 09:10:20 +0200 writes:
>>>>>>>> Peter Bosa <[hidden email]>
>>>>>>>>    on Tue, 22 Aug 2017 14:39:50 +0000 writes:
>>>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>>>
>>>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>>>
>>>>> For example, the following code runs fine:
>>>>>
>>>>> x <- 1
>>>>> y <- 5
>>>>>
>>>>> repeat {
>>>>> if(x < y) {
>>>>> print("No Break Dance :-(")
>>>>> x = x + 1
>>>>> } else {
>>>>> print("Break Dance!")
>>>>> break
>>>>> }
>>>>> }
>>>>>
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "Break Dance!"
>>>>> However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:
>>>>>
>>>>> if(x < y) {
>>>>> print("No Break Dance :-(")
>>>>> x = x + 1
>>>>> } else {
>>>>> print("Break Dance!")
>>>>> break
>>>>> }
>>>>>
>>>>> And then run the following code:
>>>>>
>>>>> x <- 1
>>>>> y <- 5
>>>>>
>>>>> repeat{
>>>>> source("./breakTest.R")
>>>>> }
>>>>>
>>>>> I get the following error:
>>>>>
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "Break Dance!"
>>>>> Error in eval(ei, envir) : no loop for break/next, jumping to top level
>>>>> This was not an issue with previous versions of R that I have used, including 3.3.3.
>>>>>
>>>>> Any suggestions? Is this a known bug with 3.4.1?
>>>> Thank you, Peter!
>>>> I can confirm what you are seeing (on Linux) in R version 3.4.0,
>>>> 3.4.1, and "R devel", and also that this had worked w/o a
>>>> problem in earlier versions of R, where I've looked at
>>>> R version 3.3.3 and 3.2.5.
>>>> I do think this is a bug, but it was not known till now.
>>>> For ease of use, I attach the two R files to easily reproduce.
>>>> Note I use  writeLines() instead of print() as its output is "nicer".
>>>> Best regards,
>>>> Martin Maechler, ETH Zurich
>>> Trying again with the two attachment.  Yes, I of all people (!!)
>>> should know that they must have an allowed MIME type; in this
>>> case  text/plain !
>>>
>>> Martin
>>>
>>> ## see ./break-source_R341.R
>>> if(x < y) {
>>>  writeLines("No Break Dance :-(")
>>>  x <- x + 1
>>> } else {
>>>  writeLines("Break Dance!")
>>>  break
>>> }
>>> ## From: Peter Bosa <[hidden email]>
>>> ## To: "[hidden email]" <[hidden email]>
>>> ## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
>>> ## Date: Tue, 22 Aug 2017 14:39:50 +0000
>>>
>>> ## Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>
>>> ## When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>
>>> ## For example, the following code runs fine:
>>>
>>> x <- 1
>>> y <- 5
>>> repeat {
>>>  if(x < y) {
>>>    writeLines("No Break Dance :-(")
>>>    x <- x + 1
>>>  } else {
>>>    writeLines("Break Dance!")
>>>    break
>>>  }
>>> }
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## Break Dance!
>>> ## >
>>>
>>> ## However, if I take the loop contents of the repeat{} function, and save
>>> ## them to a file (breakTest.R) that contains the following:
>>> ##                 ^^^^^^^^^^^
>>> ##                __SEE THAT FILE__
>>> ## if(x < y) {
>>> ##   writeLines("No Break Dance :-(")
>>> ##   x = x + 1
>>> ## } else {
>>> ##   writeLines("Break Dance!")
>>> ##   break
>>> ## }
>>>
>>> ## And then run the following code:
>>>
>>> x <- 1
>>> y <- 5
>>> repeat{
>>>  source("./breakTest.R")
>>> }
>>> cat("successfully finished\n")
>>>
>>> ## I get the following error:
>>>
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## Break Dance!
>>> ## Error in eval(ei, envir) : no loop for break/next, jumping to top level
>>> ## ^^^^^^^^^^^^^^^^^^^^
>>>
>>>
>>> ## This was not an issue with previous versions of R that I have used, including 3.3.3.
>>>
>>> ## MM: It does work in R 3.3.3, indeed
>>> ## --  it fails in R 3.4.0 and later
>>>
>>>
>>> ## Any suggestions? Is this a known bug with 3.4.1?
>>>
>>> ## Cheers-
>>> ## Peter
>>>
>>>
>>> ## ----------------------------------------------------------------
>>> ## peter bosa
>>> ## metro
>>> ## modeling services
>>> ## 600 ne grand ave
>>> ## portland, or  97232
>>>
>>> ## [hidden email]<mailto:[hidden email]>
>>> ## 503.797.1771
>>>
>>> ## metro | making a great place
>>> ## www.oregonmetro.gov
>>> ______________________________________________
>>> [hidden email] mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Tomas Kalibera
In reply to this post by Tomas Kalibera
Fixed in 73112.

If you needed to run this code in unpatched versions of R, you can
disable the problematic compiler optimization in the loop for instance
by adding "eval(NULL)" to the body of the loop. However, please do not
forget to remove this for future versions of R and specifically do not
assume this would turn off a particular compiler optimization in future
versions.

Best
Tomas




On 08/23/2017 09:24 AM, Tomas Kalibera wrote:

> It is a bug in the byte-code compiler. I will fix
> Tomas
>
> On 08/23/2017 09:22 AM, Lionel Henry wrote:
>> I don't think that's a bug. source() uses eval(), and eval() creates a
>> new function-like context frame. In a way expecting `break` to work
>> inside source() is like expecting `break` to cross stack frames:
>>
>>      my_break <- function() break
>>      repeat(my_break())
>>
>> Lionel
>>
>>
>>> On 23 août 2017, at 09:17, Martin Maechler
>>> <[hidden email]> wrote:
>>>
>>>>>>>> Martin Maechler <[hidden email]>
>>>>>>>>     on Wed, 23 Aug 2017 09:10:20 +0200 writes:
>>>>>>>> Peter Bosa <[hidden email]>
>>>>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:
>>>>> Hello, I've noticed the following error using repeat{} / break in
>>>>> R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit
>>>>> environments).
>>>>> When running a repeat function, the break command causes an error
>>>>> message if the repeat command refers to code within a file, but
>>>>> does not produce an error if the code is contained within the
>>>>> repeat{} command.
>>>>> Hello, I've noticed the following error using repeat{} / break in
>>>>> R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit
>>>>> environments).
>>>>>
>>>>> When running a repeat function, the break command causes an error
>>>>> message if the repeat command refers to code within a file, but
>>>>> does not produce an error if the code is contained within the
>>>>> repeat{} command.
>>>>>
>>>>> For example, the following code runs fine:
>>>>>
>>>>> x <- 1
>>>>> y <- 5
>>>>>
>>>>> repeat {
>>>>> if(x < y) {
>>>>> print("No Break Dance :-(")
>>>>> x = x + 1
>>>>> } else {
>>>>> print("Break Dance!")
>>>>> break
>>>>> }
>>>>> }
>>>>>
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "Break Dance!"
>>>>> However, if I take the loop contents of the repeat{} function, and
>>>>> save them to a file (breakTest.R) that contains the following:
>>>>>
>>>>> if(x < y) {
>>>>> print("No Break Dance :-(")
>>>>> x = x + 1
>>>>> } else {
>>>>> print("Break Dance!")
>>>>> break
>>>>> }
>>>>>
>>>>> And then run the following code:
>>>>>
>>>>> x <- 1
>>>>> y <- 5
>>>>>
>>>>> repeat{
>>>>> source("./breakTest.R")
>>>>> }
>>>>>
>>>>> I get the following error:
>>>>>
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "Break Dance!"
>>>>> Error in eval(ei, envir) : no loop for break/next, jumping to top
>>>>> level
>>>>> This was not an issue with previous versions of R that I have
>>>>> used, including 3.3.3.
>>>>>
>>>>> Any suggestions? Is this a known bug with 3.4.1?
>>>> Thank you, Peter!
>>>> I can confirm what you are seeing (on Linux) in R version 3.4.0,
>>>> 3.4.1, and "R devel", and also that this had worked w/o a
>>>> problem in earlier versions of R, where I've looked at
>>>> R version 3.3.3 and 3.2.5.
>>>> I do think this is a bug, but it was not known till now.
>>>> For ease of use, I attach the two R files to easily reproduce.
>>>> Note I use  writeLines() instead of print() as its output is "nicer".
>>>> Best regards,
>>>> Martin Maechler, ETH Zurich
>>> Trying again with the two attachment.  Yes, I of all people (!!)
>>> should know that they must have an allowed MIME type; in this
>>> case  text/plain !
>>>
>>> Martin
>>>
>>> ## see ./break-source_R341.R
>>> if(x < y) {
>>>   writeLines("No Break Dance :-(")
>>>   x <- x + 1
>>> } else {
>>>   writeLines("Break Dance!")
>>>   break
>>> }
>>> ## From: Peter Bosa <[hidden email]>
>>> ## To: "[hidden email]" <[hidden email]>
>>> ## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
>>> ## Date: Tue, 22 Aug 2017 14:39:50 +0000
>>>
>>> ## Hello, I've noticed the following error using repeat{} / break in
>>> R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit
>>> environments).
>>>
>>> ## When running a repeat function, the break command causes an error
>>> message if the repeat command refers to code within a file, but does
>>> not produce an error if the code is contained within the repeat{}
>>> command.
>>>
>>> ## For example, the following code runs fine:
>>>
>>> x <- 1
>>> y <- 5
>>> repeat {
>>>   if(x < y) {
>>>     writeLines("No Break Dance :-(")
>>>     x <- x + 1
>>>   } else {
>>>     writeLines("Break Dance!")
>>>     break
>>>   }
>>> }
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## Break Dance!
>>> ## >
>>>
>>> ## However, if I take the loop contents of the repeat{} function,
>>> and save
>>> ## them to a file (breakTest.R) that contains the following:
>>> ##                 ^^^^^^^^^^^
>>> ##                __SEE THAT FILE__
>>> ## if(x < y) {
>>> ##   writeLines("No Break Dance :-(")
>>> ##   x = x + 1
>>> ## } else {
>>> ##   writeLines("Break Dance!")
>>> ##   break
>>> ## }
>>>
>>> ## And then run the following code:
>>>
>>> x <- 1
>>> y <- 5
>>> repeat{
>>>   source("./breakTest.R")
>>> }
>>> cat("successfully finished\n")
>>>
>>> ## I get the following error:
>>>
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## Break Dance!
>>> ## Error in eval(ei, envir) : no loop for break/next, jumping to top
>>> level
>>> ## ^^^^^^^^^^^^^^^^^^^^
>>>
>>>
>>> ## This was not an issue with previous versions of R that I have
>>> used, including 3.3.3.
>>>
>>> ## MM: It does work in R 3.3.3, indeed
>>> ## --  it fails in R 3.4.0 and later
>>>
>>>
>>> ## Any suggestions? Is this a known bug with 3.4.1?
>>>
>>> ## Cheers-
>>> ## Peter
>>>
>>>
>>> ## ----------------------------------------------------------------
>>> ## peter bosa
>>> ## metro
>>> ## modeling services
>>> ## 600 ne grand ave
>>> ## portland, or  97232
>>>
>>> ## [hidden email]<mailto:[hidden email]>
>>> ## 503.797.1771
>>>
>>> ## metro | making a great place
>>> ## www.oregonmetro.gov
>>> ______________________________________________
>>> [hidden email] mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Tomas Kalibera
In reply to this post by Lionel Henry

return can be used to set the return value of an expression evaluated by
"eval"

expr <- quote(if (x) return(1) else return(2))
x <- FALSE
eval(expr) #2

Tomas

On 08/23/2017 09:46 AM, Lionel Henry wrote:

> oops, I should have tried it:
>
>      expr <- quote(break)
>      repeat(eval(expr))
>
>
> So eval() has hybrid semantics where `break` has more reach than
> return(), weird.
>
>      expr <- quote(return())
>      repeat(eval(expr))  # infloop
>
> Lionel
>
>
>> On 23 août 2017, at 09:24, Tomas Kalibera <[hidden email]> wrote:
>>
>> It is a bug in the byte-code compiler. I will fix
>> Tomas
>>
>> On 08/23/2017 09:22 AM, Lionel Henry wrote:
>>> I don't think that's a bug. source() uses eval(), and eval() creates a
>>> new function-like context frame. In a way expecting `break` to work
>>> inside source() is like expecting `break` to cross stack frames:
>>>
>>>      my_break <- function() break
>>>      repeat(my_break())
>>>
>>> Lionel
>>>
>>>
>>>> On 23 août 2017, at 09:17, Martin Maechler <[hidden email]> wrote:
>>>>
>>>>>>>>> Martin Maechler <[hidden email]>
>>>>>>>>>     on Wed, 23 Aug 2017 09:10:20 +0200 writes:
>>>>>>>>> Peter Bosa <[hidden email]>
>>>>>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:
>>>>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>>>> Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>>>>
>>>>>> When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>>>>
>>>>>> For example, the following code runs fine:
>>>>>>
>>>>>> x <- 1
>>>>>> y <- 5
>>>>>>
>>>>>> repeat {
>>>>>> if(x < y) {
>>>>>> print("No Break Dance :-(")
>>>>>> x = x + 1
>>>>>> } else {
>>>>>> print("Break Dance!")
>>>>>> break
>>>>>> }
>>>>>> }
>>>>>>
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "Break Dance!"
>>>>>> However, if I take the loop contents of the repeat{} function, and save them to a file (breakTest.R) that contains the following:
>>>>>>
>>>>>> if(x < y) {
>>>>>> print("No Break Dance :-(")
>>>>>> x = x + 1
>>>>>> } else {
>>>>>> print("Break Dance!")
>>>>>> break
>>>>>> }
>>>>>>
>>>>>> And then run the following code:
>>>>>>
>>>>>> x <- 1
>>>>>> y <- 5
>>>>>>
>>>>>> repeat{
>>>>>> source("./breakTest.R")
>>>>>> }
>>>>>>
>>>>>> I get the following error:
>>>>>>
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "No Break Dance :("
>>>>>> [1] "Break Dance!"
>>>>>> Error in eval(ei, envir) : no loop for break/next, jumping to top level
>>>>>> This was not an issue with previous versions of R that I have used, including 3.3.3.
>>>>>>
>>>>>> Any suggestions? Is this a known bug with 3.4.1?
>>>>> Thank you, Peter!
>>>>> I can confirm what you are seeing (on Linux) in R version 3.4.0,
>>>>> 3.4.1, and "R devel", and also that this had worked w/o a
>>>>> problem in earlier versions of R, where I've looked at
>>>>> R version 3.3.3 and 3.2.5.
>>>>> I do think this is a bug, but it was not known till now.
>>>>> For ease of use, I attach the two R files to easily reproduce.
>>>>> Note I use  writeLines() instead of print() as its output is "nicer".
>>>>> Best regards,
>>>>> Martin Maechler, ETH Zurich
>>>> Trying again with the two attachment.  Yes, I of all people (!!)
>>>> should know that they must have an allowed MIME type; in this
>>>> case  text/plain !
>>>>
>>>> Martin
>>>>
>>>> ## see ./break-source_R341.R
>>>> if(x < y) {
>>>>   writeLines("No Break Dance :-(")
>>>>   x <- x + 1
>>>> } else {
>>>>   writeLines("Break Dance!")
>>>>   break
>>>> }
>>>> ## From: Peter Bosa <[hidden email]>
>>>> ## To: "[hidden email]" <[hidden email]>
>>>> ## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
>>>> ## Date: Tue, 22 Aug 2017 14:39:50 +0000
>>>>
>>>> ## Hello, I've noticed the following error using repeat{} / break in R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit environments).
>>>>
>>>> ## When running a repeat function, the break command causes an error message if the repeat command refers to code within a file, but does not produce an error if the code is contained within the repeat{} command.
>>>>
>>>> ## For example, the following code runs fine:
>>>>
>>>> x <- 1
>>>> y <- 5
>>>> repeat {
>>>>   if(x < y) {
>>>>     writeLines("No Break Dance :-(")
>>>>     x <- x + 1
>>>>   } else {
>>>>     writeLines("Break Dance!")
>>>>     break
>>>>   }
>>>> }
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## Break Dance!
>>>> ## >
>>>>
>>>> ## However, if I take the loop contents of the repeat{} function, and save
>>>> ## them to a file (breakTest.R) that contains the following:
>>>> ##                 ^^^^^^^^^^^
>>>> ##                __SEE THAT FILE__
>>>> ## if(x < y) {
>>>> ##   writeLines("No Break Dance :-(")
>>>> ##   x = x + 1
>>>> ## } else {
>>>> ##   writeLines("Break Dance!")
>>>> ##   break
>>>> ## }
>>>>
>>>> ## And then run the following code:
>>>>
>>>> x <- 1
>>>> y <- 5
>>>> repeat{
>>>>   source("./breakTest.R")
>>>> }
>>>> cat("successfully finished\n")
>>>>
>>>> ## I get the following error:
>>>>
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## No Break Dance :(
>>>> ## Break Dance!
>>>> ## Error in eval(ei, envir) : no loop for break/next, jumping to top level
>>>> ## ^^^^^^^^^^^^^^^^^^^^
>>>>
>>>>
>>>> ## This was not an issue with previous versions of R that I have used, including 3.3.3.
>>>>
>>>> ## MM: It does work in R 3.3.3, indeed
>>>> ## --  it fails in R 3.4.0 and later
>>>>
>>>>
>>>> ## Any suggestions? Is this a known bug with 3.4.1?
>>>>
>>>> ## Cheers-
>>>> ## Peter
>>>>
>>>>
>>>> ## ----------------------------------------------------------------
>>>> ## peter bosa
>>>> ## metro
>>>> ## modeling services
>>>> ## 600 ne grand ave
>>>> ## portland, or  97232
>>>>
>>>> ## [hidden email]<mailto:[hidden email]>
>>>> ## 503.797.1771
>>>>
>>>> ## metro | making a great place
>>>> ## www.oregonmetro.gov
>>>> ______________________________________________
>>>> [hidden email] mailing list
>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>> ______________________________________________
>>> [hidden email] mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Possible repeat{} / break function bug in R 3.4.1

Peter Bosa
In reply to this post by Tomas Kalibera
Thank you, Gentlemen...much appreciated!

----------------------------------------------------------------
peter bosa
metro
transportation research and modeling services
600 ne grand ave
portland, or  97232
 
[hidden email]
503.797.1771
 
metro | making a great place
www.oregonmetro.gov
________________________________________
From: Tomas Kalibera <[hidden email]>
Sent: Wednesday, August 23, 2017 12:54 AM
To: Peter Bosa
Cc: Lionel Henry; Martin Maechler; [hidden email]
Subject: Re: [Rd] Possible repeat{} / break function bug in R 3.4.1

Fixed in 73112.

If you needed to run this code in unpatched versions of R, you can
disable the problematic compiler optimization in the loop for instance
by adding "eval(NULL)" to the body of the loop. However, please do not
forget to remove this for future versions of R and specifically do not
assume this would turn off a particular compiler optimization in future
versions.

Best
Tomas




On 08/23/2017 09:24 AM, Tomas Kalibera wrote:

> It is a bug in the byte-code compiler. I will fix
> Tomas
>
> On 08/23/2017 09:22 AM, Lionel Henry wrote:
>> I don't think that's a bug. source() uses eval(), and eval() creates a
>> new function-like context frame. In a way expecting `break` to work
>> inside source() is like expecting `break` to cross stack frames:
>>
>>      my_break <- function() break
>>      repeat(my_break())
>>
>> Lionel
>>
>>
>>> On 23 août 2017, at 09:17, Martin Maechler
>>> <[hidden email]> wrote:
>>>
>>>>>>>> Martin Maechler <[hidden email]>
>>>>>>>>     on Wed, 23 Aug 2017 09:10:20 +0200 writes:
>>>>>>>> Peter Bosa <[hidden email]>
>>>>>>>>     on Tue, 22 Aug 2017 14:39:50 +0000 writes:
>>>>> Hello, I've noticed the following error using repeat{} / break in
>>>>> R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit
>>>>> environments).
>>>>> When running a repeat function, the break command causes an error
>>>>> message if the repeat command refers to code within a file, but
>>>>> does not produce an error if the code is contained within the
>>>>> repeat{} command.
>>>>> Hello, I've noticed the following error using repeat{} / break in
>>>>> R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit
>>>>> environments).
>>>>>
>>>>> When running a repeat function, the break command causes an error
>>>>> message if the repeat command refers to code within a file, but
>>>>> does not produce an error if the code is contained within the
>>>>> repeat{} command.
>>>>>
>>>>> For example, the following code runs fine:
>>>>>
>>>>> x <- 1
>>>>> y <- 5
>>>>>
>>>>> repeat {
>>>>> if(x < y) {
>>>>> print("No Break Dance :-(")
>>>>> x = x + 1
>>>>> } else {
>>>>> print("Break Dance!")
>>>>> break
>>>>> }
>>>>> }
>>>>>
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "Break Dance!"
>>>>> However, if I take the loop contents of the repeat{} function, and
>>>>> save them to a file (breakTest.R) that contains the following:
>>>>>
>>>>> if(x < y) {
>>>>> print("No Break Dance :-(")
>>>>> x = x + 1
>>>>> } else {
>>>>> print("Break Dance!")
>>>>> break
>>>>> }
>>>>>
>>>>> And then run the following code:
>>>>>
>>>>> x <- 1
>>>>> y <- 5
>>>>>
>>>>> repeat{
>>>>> source("./breakTest.R")
>>>>> }
>>>>>
>>>>> I get the following error:
>>>>>
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "No Break Dance :("
>>>>> [1] "Break Dance!"
>>>>> Error in eval(ei, envir) : no loop for break/next, jumping to top
>>>>> level
>>>>> This was not an issue with previous versions of R that I have
>>>>> used, including 3.3.3.
>>>>>
>>>>> Any suggestions? Is this a known bug with 3.4.1?
>>>> Thank you, Peter!
>>>> I can confirm what you are seeing (on Linux) in R version 3.4.0,
>>>> 3.4.1, and "R devel", and also that this had worked w/o a
>>>> problem in earlier versions of R, where I've looked at
>>>> R version 3.3.3 and 3.2.5.
>>>> I do think this is a bug, but it was not known till now.
>>>> For ease of use, I attach the two R files to easily reproduce.
>>>> Note I use  writeLines() instead of print() as its output is "nicer".
>>>> Best regards,
>>>> Martin Maechler, ETH Zurich
>>> Trying again with the two attachment.  Yes, I of all people (!!)
>>> should know that they must have an allowed MIME type; in this
>>> case  text/plain !
>>>
>>> Martin
>>>
>>> ## see ./break-source_R341.R
>>> if(x < y) {
>>>   writeLines("No Break Dance :-(")
>>>   x <- x + 1
>>> } else {
>>>   writeLines("Break Dance!")
>>>   break
>>> }
>>> ## From: Peter Bosa <[hidden email]>
>>> ## To: "[hidden email]" <[hidden email]>
>>> ## Subject: [Rd] Possible repeat{} / break function bug in R 3.4.1
>>> ## Date: Tue, 22 Aug 2017 14:39:50 +0000
>>>
>>> ## Hello, I've noticed the following error using repeat{} / break in
>>> R 3.4.1 running on Windows 10 and Windows Server 2008 (both 64-bit
>>> environments).
>>>
>>> ## When running a repeat function, the break command causes an error
>>> message if the repeat command refers to code within a file, but does
>>> not produce an error if the code is contained within the repeat{}
>>> command.
>>>
>>> ## For example, the following code runs fine:
>>>
>>> x <- 1
>>> y <- 5
>>> repeat {
>>>   if(x < y) {
>>>     writeLines("No Break Dance :-(")
>>>     x <- x + 1
>>>   } else {
>>>     writeLines("Break Dance!")
>>>     break
>>>   }
>>> }
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## Break Dance!
>>> ## >
>>>
>>> ## However, if I take the loop contents of the repeat{} function,
>>> and save
>>> ## them to a file (breakTest.R) that contains the following:
>>> ##                 ^^^^^^^^^^^
>>> ##                __SEE THAT FILE__
>>> ## if(x < y) {
>>> ##   writeLines("No Break Dance :-(")
>>> ##   x = x + 1
>>> ## } else {
>>> ##   writeLines("Break Dance!")
>>> ##   break
>>> ## }
>>>
>>> ## And then run the following code:
>>>
>>> x <- 1
>>> y <- 5
>>> repeat{
>>>   source("./breakTest.R")
>>> }
>>> cat("successfully finished\n")
>>>
>>> ## I get the following error:
>>>
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## No Break Dance :(
>>> ## Break Dance!
>>> ## Error in eval(ei, envir) : no loop for break/next, jumping to top
>>> level
>>> ## ^^^^^^^^^^^^^^^^^^^^
>>>
>>>
>>> ## This was not an issue with previous versions of R that I have
>>> used, including 3.3.3.
>>>
>>> ## MM: It does work in R 3.3.3, indeed
>>> ## --  it fails in R 3.4.0 and later
>>>
>>>
>>> ## Any suggestions? Is this a known bug with 3.4.1?
>>>
>>> ## Cheers-
>>> ## Peter
>>>
>>>
>>> ## ----------------------------------------------------------------
>>> ## peter bosa
>>> ## metro
>>> ## modeling services
>>> ## 600 ne grand ave
>>> ## portland, or  97232
>>>
>>> ## [hidden email]<mailto:[hidden email]>
>>> ## 503.797.1771
>>>
>>> ## metro | making a great place
>>> ## www.oregonmetro.gov
>>> ______________________________________________
>>> [hidden email] mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> ______________________________________________
>> [hidden email] mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>


______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel