blob: de19068c2000790e3591837597f3129c0812bcf1 [file] [log] [blame]
drhb327f772004-10-06 15:03:57 +00001#!/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#
11BEGIN {
12 print "/* Automatically generated. Do not edit */"
drh279d4772005-01-20 23:23:29 +000013 print "/* See the mkopcodec.awk script for details. */"
drhb7f91642004-10-31 02:22:47 +000014 printf "#if !defined(SQLITE_OMIT_EXPLAIN)"
drhb7f91642004-10-31 02:22:47 +000015 printf " || defined(VDBE_PROFILE)"
16 print " || defined(SQLITE_DEBUG)"
drhc7379ce2013-10-30 02:28:23 +000017 print "#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG)"
drh81316f82013-10-29 20:40:47 +000018 print "# define OpHelp(X) \"\\0\" X"
19 print "#else"
20 print "# define OpHelp(X)"
21 print "#endif"
drh46c99e02007-08-27 23:26:59 +000022 print "const char *sqlite3OpcodeName(int i){"
23 print " static const char *const azName[] = { \"?\","
drh307ff302011-08-30 01:29:04 +000024 mx = 0
drhb327f772004-10-06 15:03:57 +000025}
drh81316f82013-10-29 20:40:47 +000026/^.define OP_/ {
drhb327f772004-10-06 15:03:57 +000027 sub("OP_","",$2)
drh307ff302011-08-30 01:29:04 +000028 i = $3+0
29 label[i] = $2
30 if( mx<i ) mx = i
drh81316f82013-10-29 20:40:47 +000031 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 }
drhb327f772004-10-06 15:03:57 +000040}
41END {
drh307ff302011-08-30 01:29:04 +000042 for(i=1; i<=mx; i++){
drh81316f82013-10-29 20:40:47 +000043 printf " /* %3d */ %-18s OpHelp(\"%s\"),\n", i, \
44 "\"" label[i] "\"", synopsis[i]
drh307ff302011-08-30 01:29:04 +000045 }
drh46c99e02007-08-27 23:26:59 +000046 print " };"
47 print " return azName[i];"
48 print "}"
drhb7f91642004-10-31 02:22:47 +000049 print "#endif"
drhb327f772004-10-06 15:03:57 +000050}