51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Tcl
		
	
	
	
	
	
#!/usr/bin/tclsh
 | 
						|
#
 | 
						|
# This TCL script scans the opcodes.h file (which is itself generated by
 | 
						|
# another TCL script) and uses the information gleaned to create the
 | 
						|
# opcodes.c source file.
 | 
						|
#
 | 
						|
# Opcodes.c contains strings which are the symbolic names for the various
 | 
						|
# opcodes used by the VDBE.  These strings are used when disassembling a
 | 
						|
# VDBE program during tracing or as a result of the EXPLAIN keyword.
 | 
						|
#
 | 
						|
puts "/* Automatically generated.  Do not edit */"
 | 
						|
puts "/* See the tool/mkopcodec.tcl script for details. */"
 | 
						|
puts "#if !defined(SQLITE_OMIT_EXPLAIN) \\"
 | 
						|
puts " || defined(VDBE_PROFILE) \\"
 | 
						|
puts " || defined(SQLITE_DEBUG)"
 | 
						|
puts "#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG)"
 | 
						|
puts "# define OpHelp(X) \"\\0\" X"
 | 
						|
puts "#else"
 | 
						|
puts "# define OpHelp(X)"
 | 
						|
puts "#endif"
 | 
						|
puts "const char *sqlite3OpcodeName(int i)\173"
 | 
						|
puts " static const char *const azName\[\] = \173"
 | 
						|
set mx 0
 | 
						|
 | 
						|
set in [open [lindex $argv 0] rb]
 | 
						|
while {![eof $in]} {
 | 
						|
  set line [gets $in]
 | 
						|
  if {[regexp {^#define OP_} $line]} {
 | 
						|
    set name [lindex $line 1]
 | 
						|
    regsub {^OP_} $name {} name
 | 
						|
    set i [lindex $line 2]
 | 
						|
    set label($i) $name
 | 
						|
    if {$mx<$i} {set mx $i}
 | 
						|
    if {[regexp {synopsis: (.*) \*/} $line all x]} {
 | 
						|
      set synopsis($i) [string trim $x]
 | 
						|
    } else {
 | 
						|
      set synopsis($i) {}
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
close $in
 | 
						|
 | 
						|
for {set i 0} {$i<=$mx} {incr i} {
 | 
						|
  puts [format "    /* %3d */ %-18s OpHelp(\"%s\")," \
 | 
						|
         $i \"$label($i)\" $synopsis($i)]
 | 
						|
}
 | 
						|
puts "  \175;"
 | 
						|
puts "  return azName\[i\];"
 | 
						|
puts "\175"
 | 
						|
puts "#endif"
 |