Home | History | Annotate | Line # | Download | only in sh
      1 #	$NetBSD: nodetypes,v 1.20 2021/11/22 05:17:43 kre Exp $
      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 # 3. 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 
     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 
     51 NSEMI nbinary			# two commands separated by a semicolon
     52 	type	  int
     53 	ch1	  nodeptr		# the first child
     54 	ch2	  nodeptr		# the second child
     55 
     56 NCMD ncmd			# a simple command
     57 	type	  int
     58 	backgnd	  int			# set to run command in background
     59 	args	  nodeptr		# the arguments
     60 	redirect  nodeptr		# list of file redirections
     61 	lineno	  int
     62 
     63 NPIPE npipe			# a pipeline
     64 	type	  int
     65 	backgnd	  int			# set to run pipeline in background
     66 	cmdlist	  nodelist		# the commands in the pipeline
     67 
     68 NREDIR nredir			# redirection (of a complex command)
     69 	type	  int
     70 	n	  nodeptr		# the command
     71 	redirect  nodeptr		# list of file redirections
     72 
     73 NBACKGND nredir			# run command in background
     74 NSUBSHELL nredir		# run command in a subshell
     75 
     76 NAND nbinary			# the && operator
     77 NOR nbinary			# the || operator
     78 
     79 NIF nif				# the if statement.  Elif clauses are handled
     80 	type	  int		    # using multiple if nodes.
     81 	test	  nodeptr		# if test
     82 	ifpart	  nodeptr		# then ifpart
     83 	elsepart  nodeptr		# else elsepart
     84 
     85 NWHILE nbinary			# the while statement.  First child is the test
     86 NUNTIL nbinary			# the until statement
     87 
     88 NFOR nfor			# the for statement
     89 	type	  int
     90 	args	  nodeptr		# for var in args
     91 	body	  nodeptr		# do body; done
     92 	var	  string		# the for variable
     93 	lineno	  int
     94 
     95 NCASE ncase			# a case statement
     96 	type	  int
     97 	expr	  nodeptr		# the word to switch on
     98 	cases	  nodeptr		# the list of cases (NCLIST nodes)
     99 	lineno	  int
    100 
    101 NCLISTCONT nclist		# a case terminated by ';&' (fall through)
    102 NCLIST nclist			# a case
    103 	type	  int
    104 	next	  nodeptr		# the next case in list
    105 	pattern	  nodeptr		# list of patterns for this case
    106 	body	  nodeptr		# code to execute for this case
    107 	lineno	  int
    108 
    109 
    110 NDEFUN narg			# define a function.  The "next" field contains
    111 				# the body of the function.
    112 
    113 NARG narg			# represents a word
    114 	type	  int
    115 	next	  nodeptr		# next word in list
    116 	text	  string		# the text of the word
    117 	backquote nodelist		# list of commands in back quotes
    118 	lineno	  int
    119 
    120 NTO nfile			# fd> fname
    121 NCLOBBER nfile			# fd>| fname
    122 NFROM nfile			# fd< fname
    123 NFROMTO nfile			# fd<> fname
    124 NAPPEND nfile			# fd>> fname
    125 	type	  int
    126 	next	  nodeptr		# next redirection in list
    127 	fd	  int			# file descriptor being redirected
    128 	fname	  nodeptr		# file name, in a NARG node
    129 	expfname  temp	char *expfname	# actual file name
    130 
    131 NTOFD ndup			# fd<&dupfd
    132 NFROMFD ndup			# fd>&dupfd
    133 	type	  int
    134 	next	  nodeptr		# next redirection in list
    135 	fd	  int			# file descriptor being redirected
    136 	dupfd	  int			# file descriptor to duplicate
    137 	vname	  nodeptr		# file name if fd>&$var
    138 
    139 
    140 NHERE nhere			# fd<<\!
    141 NXHERE nhere			# fd<<!
    142 	type	  int
    143 	next	  nodeptr		# next redirection in list
    144 	fd	  int			# file descriptor being redirected
    145 	doc	  nodeptr		# input to command (NARG node)
    146 	text	  temp  char *text	# expanded heredoc content
    147 
    148 NNOT nnot			# ! command  (actually pipeline)
    149 NDNOT nnot			# ! ! pipeline (optimisation)
    150 	type	  int
    151 	com	  nodeptr
    152