Sha256: 0f663295970537b5dfad6d26864a7b411a0b27caa6e049fd4d4c5ce6ce97856a
Contents?: true
Size: 1.65 KB
Versions: 3
Compression:
Stored size: 1.65 KB
Contents
class BlocklyInterpreter::CoreBlocks::ProceduresDefReturnBlock < BlocklyInterpreter::CoreBlocks::ProcedureBlock self.block_type = :procedures_defreturn def procedure_name fields['NAME'] end def value(execution_context) execution_context.execute(statements['STACK']) if execution_context.terminated execution_context.early_return_value else values['RETURN'].value(execution_context) end end def to_dsl block_contents = [ method_call_with_block_or_nothing("body", "", statements['STACK']), method_call_with_block_or_nothing("return_value", "", values['RETURN']) ] method_call_with_possible_block "#{self.class.block_type}", ([procedure_name] + arg_names).map(&:inspect).join(", "), block_contents end module DSLMethods class ProceduresDefReturnBlockBuilder < BlocklyInterpreter::DSL::BlockBuilder attr_reader :stack def initialize(block_type, procedure_name, arg_names) super(block_type) field :NAME, procedure_name arg_names.each do |arg_name| mutation_child :arg do |child| child['name'] = arg_name end end end def body(&proc) statement :STACK, &proc end def return_value(&proc) value :RETURN, &proc end end def procedures_defreturn(name, *arg_names, &proc) builder = BlocklyInterpreter::CoreBlocks::ProceduresDefReturnBlock::DSLMethods::ProceduresDefReturnBlockBuilder.new( "procedures_defreturn", name, arg_names ) @blocks << builder.tap do |builder| builder.instance_exec(&proc) if proc end end end end
Version data entries
3 entries across 3 versions & 1 rubygems