class Bpl::AST::Body

Public Instance Methods

declarations() click to toggle source
# File lib/bpl/ast/statement.rb, line 138
def declarations; locals + blocks end
fresh_from(prefix,taken) click to toggle source
# File lib/bpl/ast/statement.rb, line 157
def fresh_from(prefix,taken)
  return prefix unless taken.include?(prefix) || prefix.empty?
  (0..Float::INFINITY).each do |i|
     break "#{prefix}_#{i}" unless taken.include?("#{prefix}_#{i}")
  end
end
fresh_label(prefix) click to toggle source
# File lib/bpl/ast/statement.rb, line 151
def fresh_label(prefix)
  name = fresh_from (prefix || "$bb"), @blocks.map{|b| b.names.map(&:name)}.flatten
  decl = Label.new(name: name)
  return LabelIdentifier.new(name: name, declaration: decl)
end
fresh_var(prefix,type,taken=[]) click to toggle source
# File lib/bpl/ast/statement.rb, line 144
def fresh_var(prefix,type,taken=[])
  taken += @locals.map{|d| d.names}.flatten
  name = fresh_from(prefix || "$var", taken)
  append_children(:locals, bpl("var #{name}: #{type};"))
  bpl(name)
end
show() { |b| ... } click to toggle source
# File lib/bpl/ast/statement.rb, line 140
def show
  Printing.braces((locals + blocks).map{|b| yield b} * "\n")
end