Class: Metal::Generator::Expression

Inherits:
Object
  • Object
show all
Defined in:
lib/metal/generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(pred, iter, var) ⇒ Expression

Returns a new instance of Expression.



262
263
264
265
266
# File 'lib/metal/generator.rb', line 262

def initialize(pred, iter, var)
  @pred = pred
  @iter = iter
  @var = var
end

Instance Method Details

#generate(ctx, source) ⇒ Object



271
272
273
274
275
276
277
278
279
280
281
282
# File 'lib/metal/generator.rb', line 271

def generate(ctx, source)
  source << "env[PARAM_#{@var}] = ({\n" if @var
  if @iter
    obj = ctx.rule.with_lambda(source) {
      @pred.generate(ctx, source)
    }
    source << "ctx->act_#{@iter}(&#{obj});\n"
  else
    @pred.generate(ctx, source)
  end
  source << "});\n" if @var
end

#preprocess(ctx) ⇒ Object



267
268
269
270
# File 'lib/metal/generator.rb', line 267

def preprocess(ctx)
  ctx.register_var(@var) if @var
  @pred.preprocess(ctx)
end