laser is failing for me when my files require standard libraries, such as ostruct and pathname. It appears to assume that these libraries are part of my application. The error originates in Laser::Analysis::ControlFlow::Simulation#simulate_require:
`simulate_require': No such file: ostruct (LoadError)
Example:
$ rvm info
ruby-1.9.2-p290@dev:
system:
uname: "Linux rsouza 2.6.38-8-generic #42-Ubuntu SMP Mon Apr 11 03:31:24 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux"
bash: "/usr/local/bin/bash => GNU bash, version 4.2.8(1)-release (x86_64-pc-linux-gnu)"
zsh: " => not installed"
rvm:
version: "rvm 1.6.32 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]"
ruby:
interpreter: "ruby"
version: "1.9.2p290"
date: "2011-07-09"
platform: "x86_64-linux"
patchlevel: "2011-07-09 revision 32553"
full_version: "ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux]"
homes:
gem: "/local/rvm/gems/ruby-1.9.2-p290@dev"
ruby: "/local/rvm/rubies/ruby-1.9.2-p290"
binaries:
ruby: "/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby"
irb: "/local/rvm/rubies/ruby-1.9.2-p290/bin/irb"
gem: "/local/rvm/rubies/ruby-1.9.2-p290/bin/gem"
rake: "/local/rvm/gems/ruby-1.9.2-p290@dev/bin/rake"
environment:
PATH: "/local/rvm/gems/ruby-1.9.2-p290@dev/bin:/local/rvm/gems/ruby-1.9.2-p290@global/bin:/local/rvm/rubies/ruby-1.9.2-p290/bin:/local/rvm/bin:/home/rsouza/bin:/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
GEM_HOME: "/local/rvm/gems/ruby-1.9.2-p290@dev"
GEM_PATH: "/local/rvm/gems/ruby-1.9.2-p290@dev:/local/rvm/gems/ruby-1.9.2-p290@global"
MY_RUBY_HOME: "/local/rvm/rubies/ruby-1.9.2-p290"
IRBRC: "/local/rvm/rubies/ruby-1.9.2-p290/.irbrc"
RUBYOPT: ""
gemset: "dev"
$ gem list laser
*** LOCAL GEMS ***
laser (0.7.0.pre1)
$ cat configuration.rb
require 'ostruct'
class Configuration < OpenStruct
end
$ laser configuration.rb
/local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:364:in `simulate_require': No such file: ostruct (LoadError)
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:279:in `simulate_special_method'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:229:in `simulate_call_dispatch'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:199:in `simulate_call'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:190:in `simulate_call_instruction'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:160:in `simulate_instruction'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:112:in `simulate_exit_instruction'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:96:in `simulate_block'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:41:in `block in simulate'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:39:in `loop'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/simulation.rb:39:in `simulate'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow/control_flow_graph.rb:222:in `analyze'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/control_flow.rb:23:in `perform_cfg_analysis'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/annotations.rb:43:in `block in perform_load_time_analysis'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/annotations.rb:38:in `each'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/annotations.rb:38:in `perform_load_time_analysis'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/annotations.rb:15:in `annotate_inputs'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/sexp_analysis.rb:10:in `analyze_inputs'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/sexp_analysis.rb:21:in `parse'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/analysis/sexp_analysis.rb:32:in `find_sexps'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/warnings/useless_double_quotes.rb:16:in `match?'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/warning.rb:91:in `generated_warnings'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/scanner.rb:166:in `block in scan_for_warnings'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/scanner.rb:166:in `map'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/scanner.rb:166:in `scan_for_warnings'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/scanner.rb:138:in `scan_for_file_warnings'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/scanner.rb:46:in `scan'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/runner.rb:161:in `block in collect_warnings'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/runner.rb:156:in `map'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/runner.rb:156:in `collect_warnings'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/lib/laser/runner.rb:18:in `run'
from /local/rvm/gems/ruby-1.9.2-p290@dev/gems/laser-0.7.0.pre1/bin/laser:7:in `<top (required)>'
from /local/rvm/gems/ruby-1.9.2-p290@dev/bin/laser:19:in `load'
from /local/rvm/gems/ruby-1.9.2-p290@dev/bin/laser:19:in `<main>'
laser is failing for me when my files require standard libraries, such as ostruct and pathname. It appears to assume that these libraries are part of my application. The error originates in Laser::Analysis::ControlFlow::Simulation#simulate_require:
`simulate_require': No such file: ostruct (LoadError)
Example: