OLD | NEW |
1 #!/usr/bin/awk -f | 1 #!/usr/bin/awk -f |
2 # | 2 # |
3 # This AWK script scans the opcodes.h file (which is itself generated by | 3 # This AWK script scans the opcodes.h file (which is itself generated by |
4 # another awk script) and uses the information gleaned to create the | 4 # another awk script) and uses the information gleaned to create the |
5 # opcodes.c source file. | 5 # opcodes.c source file. |
6 # | 6 # |
7 # Opcodes.c contains strings which are the symbolic names for the various | 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 | 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. | 9 # VDBE program during tracing or as a result of the EXPLAIN keyword. |
10 # | 10 # |
11 BEGIN { | 11 BEGIN { |
12 print "/* Automatically generated. Do not edit */" | 12 print "/* Automatically generated. Do not edit */" |
13 print "/* See the mkopcodec.awk script for details. */" | 13 print "/* See the mkopcodec.awk script for details. */" |
14 printf "#if !defined(SQLITE_OMIT_EXPLAIN)" | 14 printf "#if !defined(SQLITE_OMIT_EXPLAIN)" |
15 printf " || !defined(NDEBUG)" | |
16 printf " || defined(VDBE_PROFILE)" | 15 printf " || defined(VDBE_PROFILE)" |
17 print " || defined(SQLITE_DEBUG)" | 16 print " || defined(SQLITE_DEBUG)" |
| 17 print "#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG)" |
| 18 print "# define OpHelp(X) \"\\0\" X" |
| 19 print "#else" |
| 20 print "# define OpHelp(X)" |
| 21 print "#endif" |
18 print "const char *sqlite3OpcodeName(int i){" | 22 print "const char *sqlite3OpcodeName(int i){" |
19 print " static const char *const azName[] = { \"?\"," | 23 print " static const char *const azName[] = { \"?\"," |
| 24 mx = 0 |
20 } | 25 } |
21 /define OP_/ { | 26 /^.define OP_/ { |
22 sub("OP_","",$2) | 27 sub("OP_","",$2) |
23 i++ | 28 i = $3+0 |
24 printf " /* %3d */ \"%s\",\n", $3, $2 | 29 label[i] = $2 |
| 30 if( mx<i ) mx = i |
| 31 for(j=5; j<NF; j++) if( $j=="synopsis:" ) break |
| 32 if( j<NF ){ |
| 33 j++ |
| 34 x = $j |
| 35 for(j=j+1; j<NF; j++) x = x " " $j |
| 36 synopsis[i] = x |
| 37 }else{ |
| 38 synopsis[i] = "" |
| 39 } |
25 } | 40 } |
26 END { | 41 END { |
| 42 for(i=1; i<=mx; i++){ |
| 43 printf " /* %3d */ %-18s OpHelp(\"%s\"),\n", i, \ |
| 44 "\"" label[i] "\"", synopsis[i] |
| 45 } |
27 print " };" | 46 print " };" |
28 print " return azName[i];" | 47 print " return azName[i];" |
29 print "}" | 48 print "}" |
30 print "#endif" | 49 print "#endif" |
31 } | 50 } |
OLD | NEW |