/ Hex Artifact Content
Login

Artifact a80e53c2f41cd89b1355c2e3d9389e3f6f8e017d:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 61 77 6b 20 2d  #!/usr/bin/awk -
0010: 66 0a 23 0a 23 20 54 68 69 73 20 41 57 4b 20 73  f.#.# This AWK s
0020: 63 72 69 70 74 20 73 63 61 6e 73 20 61 20 63 6f  cript scans a co
0030: 6e 63 61 74 65 6e 61 74 69 6f 6e 20 6f 66 20 74  ncatenation of t
0040: 68 65 20 70 61 72 73 65 2e 68 20 6f 75 74 70 75  he parse.h outpu
0050: 74 20 66 69 6c 65 20 66 72 6f 6d 20 74 68 65 0a  t file from the.
0060: 23 20 70 61 72 73 65 72 20 61 6e 64 20 74 68 65  # parser and the
0070: 20 76 64 62 65 2e 63 20 73 6f 75 72 63 65 20 66   vdbe.c source f
0080: 69 6c 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ile in order to 
0090: 67 65 6e 65 72 61 74 65 20 74 68 65 20 6f 70 63  generate the opc
00a0: 6f 64 65 73 20 6e 75 6d 62 65 72 73 0a 23 20 66  odes numbers.# f
00b0: 6f 72 20 61 6c 6c 20 6f 70 63 6f 64 65 73 2e 20  or all opcodes. 
00c0: 20 0a 23 0a 23 20 54 68 65 20 6c 69 6e 65 73 20   .#.# The lines 
00d0: 6f 66 20 74 68 65 20 76 64 62 65 2e 63 20 74 68  of the vdbe.c th
00e0: 61 74 20 77 65 20 61 72 65 20 69 6e 74 65 72 65  at we are intere
00f0: 73 74 65 64 20 69 6e 20 61 72 65 20 6f 66 20 74  sted in are of t
0100: 68 65 20 66 6f 72 6d 3a 0a 23 0a 23 20 20 20 20  he form:.#.#    
0110: 20 20 20 63 61 73 65 20 4f 50 5f 61 61 61 61 3a     case OP_aaaa:
0120: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
0130: 20 54 4b 5f 62 62 62 62 62 20 2a 2f 0a 23 0a 23   TK_bbbbb */.#.#
0140: 20 54 68 65 20 54 4b 5f 20 63 6f 6d 6d 65 6e 74   The TK_ comment
0150: 20 69 73 20 6f 70 74 69 6f 6e 61 6c 2e 20 20 49   is optional.  I
0160: 66 20 69 74 20 69 73 20 70 72 65 73 65 6e 74 2c  f it is present,
0170: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
0180: 61 73 73 69 67 6e 65 64 20 74 6f 0a 23 20 74 68  assigned to.# th
0190: 65 20 4f 50 5f 20 69 73 20 74 68 65 20 73 61 6d  e OP_ is the sam
01a0: 65 20 61 73 20 74 68 65 20 54 4b 5f 20 76 61 6c  e as the TK_ val
01b0: 75 65 2e 20 20 49 66 20 6d 69 73 73 69 6e 67 2c  ue.  If missing,
01c0: 20 74 68 65 20 4f 50 5f 20 76 61 6c 75 65 20 69   the OP_ value i
01d0: 73 20 61 73 73 69 67 6e 65 64 0a 23 20 61 20 73  s assigned.# a s
01e0: 6d 61 6c 6c 20 69 6e 74 65 67 65 72 20 74 68 61  mall integer tha
01f0: 74 20 69 73 20 64 69 66 66 65 72 65 6e 74 20 66  t is different f
0200: 72 6f 6d 20 65 76 65 72 79 20 6f 74 68 65 72 20  rom every other 
0210: 4f 50 5f 20 76 61 6c 75 65 2e 0a 23 0a 0a 23 20  OP_ value..#..# 
0220: 52 65 6d 65 6d 62 65 72 20 74 68 65 20 54 4b 5f  Remember the TK_
0230: 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 74 68 65   values from the
0240: 20 70 61 72 73 65 2e 68 20 66 69 6c 65 0a 2f 5e   parse.h file./^
0250: 23 64 65 66 69 6e 65 20 54 4b 5f 2f 20 7b 0a 20  #define TK_/ {. 
0260: 20 74 6b 5b 24 32 5d 20 3d 20 24 33 0a 7d 0a 0a   tk[$2] = $3.}..
0270: 23 20 53 63 61 6e 20 66 6f 72 20 22 63 61 73 65  # Scan for "case
0280: 20 4f 50 5f 61 61 61 61 3a 22 20 6c 69 6e 65 73   OP_aaaa:" lines
0290: 20 69 6e 20 74 68 65 20 76 64 62 65 2e 63 20 66   in the vdbe.c f
02a0: 69 6c 65 0a 2f 5e 63 61 73 65 20 4f 50 5f 2f 20  ile./^case OP_/ 
02b0: 7b 0a 20 20 6e 61 6d 65 20 3d 20 24 32 0a 20 20  {.  name = $2.  
02c0: 67 73 75 62 28 2f 3a 2f 2c 22 22 2c 6e 61 6d 65  gsub(/:/,"",name
02d0: 29 0a 20 20 6f 70 5b 6e 61 6d 65 5d 20 3d 20 2d  ).  op[name] = -
02e0: 31 0a 20 20 66 6f 72 28 69 3d 33 3b 20 69 3c 4e  1.  for(i=3; i<N
02f0: 46 2d 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  F-2; i++){.    i
0300: 66 28 24 69 3d 3d 22 73 61 6d 65 22 20 26 26 20  f($i=="same" && 
0310: 24 28 69 2b 31 29 3d 3d 22 61 73 22 29 7b 0a 20  $(i+1)=="as"){. 
0320: 20 20 20 20 20 6f 70 5b 6e 61 6d 65 5d 20 3d 20       op[name] = 
0330: 74 6b 5b 24 28 69 2b 32 29 5d 0a 20 20 20 20 20  tk[$(i+2)].     
0340: 20 75 73 65 64 5b 6f 70 5b 6e 61 6d 65 5d 5d 20   used[op[name]] 
0350: 3d 20 31 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a  = 1.    }.  }.}.
0360: 0a 23 20 41 73 73 69 67 6e 20 6e 75 6d 62 65 72  .# Assign number
0370: 73 20 74 6f 20 61 6c 6c 20 6f 70 63 6f 64 65 73  s to all opcodes
0380: 20 61 6e 64 20 6f 75 74 70 75 74 20 74 68 65 20   and output the 
0390: 72 65 73 75 6c 74 2e 0a 45 4e 44 20 7b 0a 20 20  result..END {.  
03a0: 63 6e 74 20 3d 20 30 0a 20 20 66 6f 72 28 6e 61  cnt = 0.  for(na
03b0: 6d 65 20 69 6e 20 6f 70 29 7b 0a 20 20 20 20 69  me in op){.    i
03c0: 66 28 20 6f 70 5b 6e 61 6d 65 5d 3c 30 20 29 7b  f( op[name]<0 ){
03d0: 0a 20 20 20 20 20 20 63 6e 74 2b 2b 0a 20 20 20  .      cnt++.   
03e0: 20 20 20 77 68 69 6c 65 28 20 75 73 65 64 5b 63     while( used[c
03f0: 6e 74 5d 20 29 20 63 6e 74 2b 2b 0a 20 20 20 20  nt] ) cnt++.    
0400: 20 20 6f 70 5b 6e 61 6d 65 5d 20 3d 20 63 6e 74    op[name] = cnt
0410: 0a 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74  .    }.    print
0420: 66 20 22 23 64 65 66 69 6e 65 20 25 2d 33 30 73  f "#define %-30s
0430: 20 25 64 5c 6e 22 2c 20 6e 61 6d 65 2c 20 6f 70   %d\n", name, op
0440: 5b 6e 61 6d 65 5d 0a 20 20 7d 0a 7d 0a           [name].  }.}.