Pliant talk forum

Pliant talk forum

Bug report: Strange bug ...

Bug that disappear at debuging level 2 or by puting some
"console". Seems related to optimizer...
Message posted by pom on 2002/06/12 13:00:56
Here is the code:

module "/pliant/math/functions.pli"
function log_base base value -> l
  arg Float base value l
  return log:value/log:base
gvar Float answer := log_base 10 10000

###################

The value is well computed at level 2. At level 1 or 0, one gets an
exception 11. Message at level 1 is:


exception 11
----------------------------------------------------------------
processor stack content is:
log_base  file:test.pli (internals) 2 1 file:test.pli (internals) 4 10
_noname_  file:test.pli (internals) 5 1 file:test.pli (internals) 5 22
pliant internal execute function (Function) +8
. execute (Expression) +325
  file:test.pli (internals) 5 1
. execute (ParserContext) +38
parser_filter_execute +241
pliant internal parse_one_token function (ParserContext) +430
compile_text (List Module) +240
pliant_load_module (Str Module Int Module) +979
??? at 134603528
??? at 134513144
Message posted by pom on 2002/06/12 13:28:42
Even more strange:
####################
module "/pliant/math/functions.pli"
function mylog a -> b
  arg Float a b
  b := log a
function test value -> l
  arg Float value l
  return mylog:value
gvar Float answer := test 10
###################
also generates an excpetion 11. But, if log is called directly in 'test'
all is right. If 'log a' is replaced by 'a^0.3' or 'sin a' in mylog, all
is also ok.
Strange...
Message posted by pom on 2002/06/12 13:32:16
In the last example, all works also if, instead of
  return mylog:value
on writes
  l := mylog:value

But this does not fix the first example.
Message posted by maybe pom on 2002/06/14 11:42:48
Strange again:

This works:

module "/pliant/math/functions.pli"
function log_base base value -> l
   arg Float base value l
   var Float f g h
   f := sin:value
   g := log:base
   h := f/g
   l := h
gvar Float answer := log_base 10.0 10000.0

This does not:

module "/pliant/math/functions.pli"
function log_base base value -> l
   arg Float base value l
   var Float f g h
   g := log:base
   f := sin:value
   h := f/g
   l := h
gvar Float answer := log_base 10.0 10000.0

Remark: only the order of evaluation of f and g changed.