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