drh | 7651e0a | 2015-10-07 12:11:36 +0000 | [diff] [blame] | 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 | # |
| 11 | puts "/* Automatically generated. Do not edit */" |
| 12 | puts "/* See the tool/mkopcodec.tcl script for details. */" |
| 13 | puts "#if !defined(SQLITE_OMIT_EXPLAIN) \\" |
| 14 | puts " || defined(VDBE_PROFILE) \\" |
| 15 | puts " || defined(SQLITE_DEBUG)" |
| 16 | puts "#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG)" |
| 17 | puts "# define OpHelp(X) \"\\0\" X" |
| 18 | puts "#else" |
| 19 | puts "# define OpHelp(X)" |
| 20 | puts "#endif" |
| 21 | puts "const char *sqlite3OpcodeName(int i)\173" |
drh | ed94af5 | 2016-02-01 17:20:08 +0000 | [diff] [blame] | 22 | puts " static const char *const azName\[\] = \173" |
drh | 7651e0a | 2015-10-07 12:11:36 +0000 | [diff] [blame] | 23 | set mx 0 |
| 24 | |
| 25 | set in [open [lindex $argv 0] rb] |
| 26 | while {![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 | } |
| 41 | close $in |
| 42 | |
drh | ed94af5 | 2016-02-01 17:20:08 +0000 | [diff] [blame] | 43 | for {set i 0} {$i<=$mx} {incr i} { |
drh | 7651e0a | 2015-10-07 12:11:36 +0000 | [diff] [blame] | 44 | puts [format " /* %3d */ %-18s OpHelp(\"%s\")," \ |
| 45 | $i \"$label($i)\" $synopsis($i)] |
| 46 | } |
| 47 | puts " \175;" |
| 48 | puts " return azName\[i\];" |
| 49 | puts "\175" |
| 50 | puts "#endif" |