mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 72e318f118
			
		
	
	
		72e318f118
		
	
	
	
	
		
			
			C99 allows string literals of at least 4095 characters (cf: ISO/IEC 9899:1999 section 5.2.4.1) so the previous complex struct layout is no longer necessary. Just dump the verbatim memory contents we want. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66957 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			38 lines
		
	
	
	
		
			944 B
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
	
		
			944 B
		
	
	
	
		
			Text
		
	
	
	
	
	
| %# -*- C -*-
 | |
| %# 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)));
 | |
| 
 | |
| #ifdef RUBY_VM_INSNS_INFO
 | |
| const int rb_vm_max_insn_name_size = <%= a.map(&:size).max %>;
 | |
| #endif
 | |
| 
 | |
| const char *
 | |
| insn_name(VALUE i)
 | |
| {
 | |
|     static const char x[] =
 | |
| % a.each do |i|
 | |
|         <%=cstr i%> "\0"
 | |
| % end
 | |
|         ;
 | |
| 
 | |
|     static const unsigned short y[] = {
 | |
| % c.each_slice 12 do |d|
 | |
|         <%= d.map {|i| sprintf("%4d", i) }.join(', ') %>,
 | |
| % end
 | |
|     };
 | |
| 
 | |
|     ASSERT_VM_INSTRUCTION_SIZE(y);
 | |
| 
 | |
|     return &x[y[i]];
 | |
| }
 |