Class: Pione::Lang::ParamDeclaration
- Inherits:
-
Declaration
- Object
- StructX
- Declaration
- Pione::Lang::ParamDeclaration
- Defined in:
- lib/pione/lang/declaration.rb
Overview
ParamDeclaration is a declaration thae the parameter is neeeded.
Instance Method Summary collapse
-
#eval(env) ⇒ Object
Add the parameter in current rule definition.
- #set_type(new_type) ⇒ Object
Methods inherited from Declaration
Methods included from Util::Positionable
#line_and_column, #pos, #set_source_position
Instance Method Details
#eval(env) ⇒ Object
Add the parameter in current rule definition.
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/pione/lang/declaration.rb', line 131 def eval(env) # get variable var = get_reference(env, expr1, Variable) # we don't permit to declare parameters of other packages if not(var.package_id.nil?) and var.package_id != env.current_package_id raise ParamDeclarationError.new(self) end # get the value(don't evaluate in this time) default_val = expr2 begin env.variable_get(var) rescue UnboundError # bind default value env.variable_set(var, default_val) end param = ParameterDefinition.new(type, var.name, default_val) # select target definition definition = nil if env.current_definition # in rule definition context definition = env.current_definition else # in package context definition = env.package_get(PackageExpr.new(package_id: var.package_id)) end if definition.param_definition[var.name] raise RebindError.new(var) else definition.param_definition[var.name] = param end end |
#set_type(new_type) ⇒ Object
126 127 128 |
# File 'lib/pione/lang/declaration.rb', line 126 def set_type(new_type) set(type: new_type) end |