Alexandre Mutel wrote:
> Woop, i was to fast. In fact, i need an eval on the whole file, because 
> my dsl language allow ruby code to be used (and so definition of 
> methods... etc.)

Then it sounds like you just need to separate the blocks of code 
appropriately. Do you want each line which begins with \w: (a labelled 
line) to be treated specially? Then the rest of the code between the 
labelled lines can be treated as a single string.

Proof-of-concept:

src = <<EOS
def foo
  puts "XXX"
end
label1: foo  # this is a test
def bar
  puts "YYY"
end
label2: bar
EOS

def label(name)
  puts "Executing label #{name} now..."
  yield
end

b = binding
line = 1
src.split(/^(\w+:.*)\n/).each do |chunk|
  if chunk =~ /(\w+):(.*)$/
    eval "label(#{$1.inspect}) { #{$2}\n }", b, "DSL", line
    line += 1
  else
    eval chunk, b, "DSL", line
    line += chunk.split("\n").size
  end
end
-- 
Posted via http://www.ruby-forum.com/.