1#!/usr/bin/tclsh 2# 3# This TCL script scans the opcodes.h file (which is itself generated by 4# another TCL script) and uses the information gleaned to create the 5# opcodes.c source file. 6# 7# Opcodes.c contains strings which are the symbolic names for the various 8# opcodes used by the VDBE. These strings are used when disassembling a 9# VDBE program during tracing or as a result of the EXPLAIN keyword. 10# 11puts "/* Automatically generated. Do not edit */" 12puts "/* See the tool/mkopcodec.tcl script for details. */" 13puts "#if !defined(SQLITE_OMIT_EXPLAIN) \\" 14puts " || defined(VDBE_PROFILE) \\" 15puts " || defined(SQLITE_DEBUG)" 16puts "#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG)" 17puts "# define OpHelp(X) \"\\0\" X" 18puts "#else" 19puts "# define OpHelp(X)" 20puts "#endif" 21puts "const char *sqlite3OpcodeName(int i)\173" 22puts " static const char *const azName\[\] = \173" 23set mx 0 24 25set in [open [lindex $argv 0] rb] 26while {![eof $in]} { 27 set line [gets $in] 28 if {[regexp {^#define OP_} $line]} { 29 set name [lindex $line 1] 30 regsub {^OP_} $name {} name 31 set i [lindex $line 2] 32 set label($i) $name 33 if {$mx<$i} {set mx $i} 34 if {[regexp {synopsis: (.*) \*/} $line all x]} { 35 set synopsis($i) [string trim $x] 36 } else { 37 set synopsis($i) {} 38 } 39 } 40} 41close $in 42 43for {set i 0} {$i<=$mx} {incr i} { 44 puts [format " /* %3d */ %-18s OpHelp(\"%s\")," \ 45 $i \"$label($i)\" $synopsis($i)] 46} 47puts " \175;" 48puts " return azName\[i\];" 49puts "\175" 50puts "#endif" 51