File: mkopcodec.sh

package info (click to toggle)
tarantool 2.6.0-1.2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 85,396 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,176; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (71 lines) | stat: -rwxr-xr-x 2,066 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/sh
#
# This shell script scans the opcodes.h file (which is itself generated by
# another shell 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.

printf '%s\n' "/* Automatically generated.  Do not edit */"
printf '%s\n' "/* See the tool/mkopcodec.sh script for details. */"
printf '%s\n' "#include \"sqlInt.h\""
printf '%s\n' "#if defined(SQL_ENABLE_EXPLAIN_COMMENTS) || defined(SQL_DEBUG)"
printf '%s\n' "# define OpHelp(X) \"\\0\" X"
printf '%s\n' "#else"
printf '%s\n' "# define OpHelp(X)"
printf '%s\n' "#endif"
printf '%s\n' "const char *sqlOpcodeName(int i){"
printf '%s\n' " static const char *const azName[] = {"
mx=0

set -eu  # Strict shell (w/o -x and -o pipefail)
set -f   # disable pathname expansion

newline="$(printf '\n')"
IFS="$newline"
while read line; do
    case "$line" in
    '#define OP_'*)
        IFS=" "
        set -- $line
        IFS="$newline"
        name="${2#OP_}"
        i="$3"
        eval "ARRAY_label_$i=\"$name\""
        if [ "$mx" -lt "$i" ]; then
            mx="$i"
        fi
        case "$line" in
        *'synopsis: '*' */'*)
            x=${line#*'synopsis: '}
            x=${x%' */'*}
            # trim
            while true; do
                case "$x" in
                ' '*) x=${x# } ;;
                *' ') x=${x% } ;;
                *) break ;;
                esac
            done
            eval "ARRAY_synopsis_$i=\"$x\""
            ;;
        *)
            eval "ARRAY_synopsis_$i=\"\""
            ;;
        esac
        ;;
    esac
done < "$1"

i=0
while [ "$i" -le "$mx" ]; do
    eval "label=\"\$ARRAY_label_$i\""
    eval "synopsis=\"\$ARRAY_synopsis_$i\""
    printf '    /* %3d */ %-18s OpHelp("%s"),\n' "$i" "\"$label\"" "$synopsis"
    i=$((i + 1))
done
printf '%s\n' "  };"
printf '%s\n' "  return azName[i];"
printf '%s\n' "}"