class Pione::Lang::Declaration
Declaration
is a base class for all declarations.
Public Class Methods
inherited(cls)
click to toggle source
# File lib/pione/lang/declaration.rb, line 9 def inherited(cls) members.each {|member_name| subclass.member(member_name, default: default_values[member_name])} immutable true end
Public Instance Methods
eval!(env)
click to toggle source
# File lib/pione/lang/declaration.rb, line 15 def eval!(env) eval(env) end
Private Instance Methods
get_package_id(env, name)
click to toggle source
Get the package id.
# File lib/pione/lang/declaration.rb, line 44 def get_package_id(env, name) if package_id = name.package_id # get package id from the name return package_id else # or current package id in the environment return env.current_package_id end end
get_reference(env, name, expected)
click to toggle source
Get reference object. If it has no package id, set current package id in the environment.
# File lib/pione/lang/declaration.rb, line 23 def get_reference(env, name, expected) # evaluate the name expression if it has unexpected type # e.g. "$p.var($x) := 1" unless name.is_a?(expected) name = name.eval(env) # raise error if it has unexpected type unless name.is_a?(expected) raise StructuralError.new(expected, name.pos) end end # set current package id if it has no package id if name.is_a?(Sequence) name.map {|piece| piece.package_id ? piece : piece.set(package_id: env.current_package_id)} else name.package_id ? name : name.set(package_id: env.current_package_id) end end