OLD | NEW |
(Empty) | |
| 1 #!/usr/bin/awk -f |
| 2 # |
| 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 |
| 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 BEGIN { |
| 12 print "/* Automatically generated. Do not edit */" |
| 13 print "/* See the mkopcodec.awk script for details. */" |
| 14 printf "#if !defined(SQLITE_OMIT_EXPLAIN)" |
| 15 printf " || defined(VDBE_PROFILE)" |
| 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" |
| 22 print "const char *sqlite3OpcodeName(int i){" |
| 23 print " static const char *const azName[] = { \"?\"," |
| 24 mx = 0 |
| 25 } |
| 26 /^.define OP_/ { |
| 27 sub("OP_","",$2) |
| 28 i = $3+0 |
| 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 } |
| 40 } |
| 41 END { |
| 42 for(i=1; i<=mx; i++){ |
| 43 printf " /* %3d */ %-18s OpHelp(\"%s\"),\n", i, \ |
| 44 "\"" label[i] "\"", synopsis[i] |
| 45 } |
| 46 print " };" |
| 47 print " return azName[i];" |
| 48 print "}" |
| 49 print "#endif" |
| 50 } |
OLD | NEW |