AryaWu/sqlite
0
1#!/usr/bin/tclsh2#3# This TCL script scans the opcodes.h file (which is itself generated by4# another TCL script) and uses the information gleaned to create the5# opcodes.c source file.6#7# Opcodes.c contains strings which are the symbolic names for the various8# opcodes used by the VDBE. These strings are used when disassembling a9# 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 024 25set in [open [lindex $argv 0]]26fconfigure $in -translation binary27while {![eof $in]} {28 set line [gets $in]29 if {[regexp {^#define OP_} $line]} {30 set name [lindex $line 1]31 regsub {^OP_} $name {} name32 set i [lindex $line 2]33 set label($i) $name34 if {$mx<$i} {set mx $i}35 if {[regexp {synopsis: (.*) \*/} $line all x]} {36 set synopsis($i) [string trim $x]37 } else {38 set synopsis($i) {}39 }40 }41}42close $in43 44for {set i 0} {$i<=$mx} {incr i} {45 puts [format " /* %3d */ %-18s OpHelp(\"%s\")," \46 $i \"$label($i)\" $synopsis($i)]47}48puts " \175;"49puts " return azName\[i\];"50puts "\175"51puts "#endif"52 