mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 18c40b16d0
			
		
	
	
		18c40b16d0
		
	
	
	
	
		
			
			git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| %# -*- mode:c; style:ruby; coding: utf-8; indent-tabs-mode: nil -*-
 | |
| %# Copyright (c) 2017 Urabe, Shyouhei.  All rights reserved.
 | |
| %#
 | |
| %# This file is a part of  the programming language Ruby.  Permission is hereby
 | |
| %# granted, to either  redistribute and/or modify this file,  provided that the
 | |
| %# conditions mentioned  in the  file COPYING  are met.   Consult the  file for
 | |
| %# details.
 | |
| %
 | |
| % a = RubyVM::Instructions.map {|i| i.name }
 | |
| % b = (0...a.size)
 | |
| % c = a.inject([0]) {|r, i| r << (r[-1] + i.length + 1) }
 | |
| % c.pop
 | |
| %
 | |
| CONSTFUNC(MAYBE_UNUSED(static const char *insn_name(VALUE insn)));
 | |
| extern const char *rb_vm_insn_name_info;
 | |
| MJIT_SYMBOL_EXPORT_BEGIN
 | |
| extern const unsigned short rb_vm_insn_name_offset[];
 | |
| MJIT_SYMBOL_EXPORT_END
 | |
| 
 | |
| #ifdef RUBY_VM_INSNS_INFO
 | |
| const unsigned short rb_vm_insn_name_offset[] = {
 | |
| % c.each_slice 12 do |d|
 | |
|     <%= d.map {|i| sprintf("%4d", i) }.join(', ') %>,
 | |
| % end
 | |
| };
 | |
| const int rb_vm_max_insn_name_size = <%= RubyVM::Instructions.map {|i| i.name.size }.max %>;
 | |
| ASSERT_VM_INSTRUCTION_SIZE(rb_vm_insn_name_offset);
 | |
| 
 | |
| PACKED_STRUCT(struct rb_vm_insn_name_info_tag {
 | |
| % b.each_slice 3 do |d|
 | |
|     <%= d.map {|i|
 | |
|         sprintf("const char L%03d[%2d]", i, a[i].length + 1)
 | |
|     }.join('; ') %>;
 | |
| % end
 | |
| });
 | |
| 
 | |
| static const struct rb_vm_insn_name_info_tag rb_vm_insn_name_base = {
 | |
| % a.each_slice 2 do |d|
 | |
|     <%= d.map {|i| sprintf("%-30s", cstr(i)) }.join(', ') %>,
 | |
| % end
 | |
| };
 | |
| 
 | |
| const char *rb_vm_insn_name_info = (const char *)&rb_vm_insn_name_base;
 | |
| #endif
 | |
| 
 | |
| const char *
 | |
| insn_name(VALUE i)
 | |
| {
 | |
|     return &rb_vm_insn_name_info[rb_vm_insn_name_offset[i]];
 | |
| }
 |