Merge sqlite-release(3.27.2) into prerelease-integration
[sqlcipher.git] / tool / addopcodes.tcl
blob070779029bd8650796925fc2ddcfe14cdfbef8de
1 #!/usr/bin/tclsh
3 # This script appends additional token codes to the end of the
4 # parse.h file that lemon generates. These extra token codes are
5 # not used by the parser. But they are used by the tokenizer and/or
6 # the code generator.
9 set in [open [lindex $argv 0] rb]
10 set max 0
11 while {![eof $in]} {
12 set line [gets $in]
13 if {[regexp {^#define TK_} $line]} {
14 puts $line
15 set x [lindex $line 2]
16 if {$x>$max} {set max $x}
19 close $in
21 # The following are the extra token codes to be added. SPACE and
22 # ILLEGAL *must* be the last two token codes and they must be in that order.
24 set extras {
25 TRUEFALSE
26 ISNOT
27 FUNCTION
28 COLUMN
29 AGG_FUNCTION
30 AGG_COLUMN
31 UMINUS
32 UPLUS
33 TRUTH
34 REGISTER
35 VECTOR
36 SELECT_COLUMN
37 IF_NULL_ROW
38 ASTERISK
39 SPAN
40 END_OF_FILE
41 UNCLOSED_STRING
42 SPACE
43 ILLEGAL
45 if {[lrange $extras end-1 end]!="SPACE ILLEGAL"} {
46 error "SPACE and ILLEGAL must be the last two token codes and they\
47 must be in that order"
49 foreach x $extras {
50 incr max
51 puts [format "#define TK_%-29s %4d" $x $max]
54 # Some additional #defines related to token codes.
56 puts "\n/* The token codes above must all fit in 8 bits */"
57 puts [format "#define %-20s %-6s" TKFLG_MASK 0xff]
58 puts "\n/* Flags that can be added to a token code when it is not"
59 puts "** being stored in a u8: */"
60 foreach {fg val comment} {
61 TKFLG_DONTFOLD 0x100 {/* Omit constant folding optimizations */}
62 } {
63 puts [format "#define %-20s %-6s %s" $fg $val $comment]