51 lines
1.4 KiB
Awk
51 lines
1.4 KiB
Awk
#!/usr/bin/awk -f
|
|
#
|
|
# This AWK script scans the opcodes.h file (which is itself generated by
|
|
# another awk script) and uses the information gleaned to create the
|
|
# opcodes.c source file.
|
|
#
|
|
# Opcodes.c contains strings which are the symbolic names for the various
|
|
# opcodes used by the VDBE. These strings are used when disassembling a
|
|
# VDBE program during tracing or as a result of the EXPLAIN keyword.
|
|
#
|
|
BEGIN {
|
|
print "/* Automatically generated. Do not edit */"
|
|
print "/* See the mkopcodec.awk script for details. */"
|
|
printf "#if !defined(SQLITE_OMIT_EXPLAIN)"
|
|
printf " || defined(VDBE_PROFILE)"
|
|
print " || defined(SQLITE_DEBUG)"
|
|
print "#if defined(SQLITE_ENABLE_EXPLAIN_COMMENTS) || defined(SQLITE_DEBUG)"
|
|
print "# define OpHelp(X) \"\\0\" X"
|
|
print "#else"
|
|
print "# define OpHelp(X)"
|
|
print "#endif"
|
|
print "const char *sqlite3OpcodeName(int i){"
|
|
print " static const char *const azName[] = { \"?\","
|
|
mx = 0
|
|
}
|
|
/^.define OP_/ {
|
|
sub("OP_","",$2)
|
|
i = $3+0
|
|
label[i] = $2
|
|
if( mx<i ) mx = i
|
|
for(j=5; j<NF; j++) if( $j=="synopsis:" ) break
|
|
if( j<NF ){
|
|
j++
|
|
x = $j
|
|
for(j=j+1; j<NF; j++) x = x " " $j
|
|
synopsis[i] = x
|
|
}else{
|
|
synopsis[i] = ""
|
|
}
|
|
}
|
|
END {
|
|
for(i=1; i<=mx; i++){
|
|
printf " /* %3d */ %-18s OpHelp(\"%s\"),\n", i, \
|
|
"\"" label[i] "\"", synopsis[i]
|
|
}
|
|
print " };"
|
|
print " return azName[i];"
|
|
print "}"
|
|
print "#endif"
|
|
}
|