/bin/sh/nodetypes

https://bitbucket.org/freebsd/freebsd-head/ · #! · 144 lines · 124 code · 20 blank · 0 comment · 0 complexity · d2e082483455b7d4fd16375089642901 MD5 · raw file

  1. #-
  2. # Copyright (c) 1991, 1993
  3. # The Regents of the University of California. All rights reserved.
  4. #
  5. # This code is derived from software contributed to Berkeley by
  6. # Kenneth Almquist.
  7. #
  8. # Redistribution and use in source and binary forms, with or without
  9. # modification, are permitted provided that the following conditions
  10. # are met:
  11. # 1. Redistributions of source code must retain the above copyright
  12. # notice, this list of conditions and the following disclaimer.
  13. # 2. Redistributions in binary form must reproduce the above copyright
  14. # notice, this list of conditions and the following disclaimer in the
  15. # documentation and/or other materials provided with the distribution.
  16. # 4. Neither the name of the University nor the names of its contributors
  17. # may be used to endorse or promote products derived from this software
  18. # without specific prior written permission.
  19. #
  20. # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  21. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  24. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. # SUCH DAMAGE.
  31. #
  32. # @(#)nodetypes 8.2 (Berkeley) 5/4/95
  33. # $FreeBSD$
  34. # This file describes the nodes used in parse trees. Unindented lines
  35. # contain a node type followed by a structure tag. Subsequent indented
  36. # lines specify the fields of the structure. Several node types can share
  37. # the same structure, in which case the fields of the structure should be
  38. # specified only once.
  39. #
  40. # A field of a structure is described by the name of the field followed
  41. # by a type. The currently implemented types are:
  42. # nodeptr - a pointer to a node
  43. # nodelist - a pointer to a list of nodes
  44. # string - a pointer to a nul terminated string
  45. # int - an integer
  46. # other - any type that can be copied by assignment
  47. # temp - a field that doesn't have to be copied when the node is copied
  48. # The last two types should be followed by the text of a C declaration for
  49. # the field.
  50. NSEMI nbinary # two commands separated by a semicolon
  51. type int
  52. ch1 nodeptr # the first child
  53. ch2 nodeptr # the second child
  54. NCMD ncmd # a simple command
  55. type int
  56. args nodeptr # the arguments
  57. redirect nodeptr # list of file redirections
  58. NPIPE npipe # a pipeline
  59. type int
  60. backgnd int # set to run pipeline in background
  61. cmdlist nodelist # the commands in the pipeline
  62. NREDIR nredir # redirection (of a compex command)
  63. type int
  64. n nodeptr # the command
  65. redirect nodeptr # list of file redirections
  66. NBACKGND nredir # run command in background
  67. NSUBSHELL nredir # run command in a subshell
  68. NAND nbinary # the && operator
  69. NOR nbinary # the || operator
  70. NIF nif # the if statement. Elif clauses are handled
  71. type int # using multiple if nodes.
  72. test nodeptr # if test
  73. ifpart nodeptr # then ifpart
  74. elsepart nodeptr # else elsepart
  75. NWHILE nbinary # the while statement. First child is the test
  76. NUNTIL nbinary # the until statement
  77. NFOR nfor # the for statement
  78. type int
  79. args nodeptr # for var in args
  80. body nodeptr # do body; done
  81. var string # the for variable
  82. NCASE ncase # a case statement
  83. type int
  84. expr nodeptr # the word to switch on
  85. cases nodeptr # the list of cases (NCLIST nodes)
  86. NCLIST nclist # a case ending with ;;
  87. type int
  88. next nodeptr # the next case in list
  89. pattern nodeptr # list of patterns for this case
  90. body nodeptr # code to execute for this case
  91. NCLISTFALLTHRU nclist # a case ending with ;&
  92. NDEFUN narg # define a function. The "next" field contains
  93. # the body of the function.
  94. NARG narg # represents a word
  95. type int
  96. next nodeptr # next word in list
  97. text string # the text of the word
  98. backquote nodelist # list of commands in back quotes
  99. NTO nfile # fd> fname
  100. NFROM nfile # fd< fname
  101. NFROMTO nfile # fd<> fname
  102. NAPPEND nfile # fd>> fname
  103. NCLOBBER nfile # fd>| fname
  104. type int
  105. next nodeptr # next redirection in list
  106. fd int # file descriptor being redirected
  107. fname nodeptr # file name, in a NARG node
  108. expfname temp char *expfname # actual file name
  109. NTOFD ndup # fd<&dupfd
  110. NFROMFD ndup # fd>&dupfd
  111. type int
  112. next nodeptr # next redirection in list
  113. fd int # file descriptor being redirected
  114. dupfd int # file descriptor to duplicate
  115. vname nodeptr # file name if fd>&$var
  116. NHERE nhere # fd<<\!
  117. NXHERE nhere # fd<<!
  118. type int
  119. next nodeptr # next redirection in list
  120. fd int # file descriptor being redirected
  121. doc nodeptr # input to command (NARG node)
  122. NNOT nnot # ! command (actually pipeline)
  123. type int
  124. com nodeptr