Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / command.h
index e8a8aa3..6e9d1e4 100644 (file)
--- a/command.h
+++ b/command.h
@@ -1,7 +1,7 @@
 /* command.h -- The structures used internally to represent commands, and
    the extern declarations of the functions used to create them. */
 
-/* Copyright (C) 1993-2009 Free Software Foundation, Inc.
+/* Copyright (C) 1993-2010 Free Software Foundation, Inc.
 
    This file is part of GNU Bash, the Bourne Again SHell.
 
@@ -35,11 +35,15 @@ enum r_instruction {
   r_append_err_and_out
 };
 
+/* Redirection flags; values for rflags */
+#define REDIR_VARASSIGN                0x01
+
 /* Redirection errors. */
 #define AMBIGUOUS_REDIRECT  -1
 #define NOCLOBBER_REDIRECT  -2
 #define RESTRICTED_REDIRECT -3 /* can only happen in restricted shells. */
 #define HEREDOC_REDIRECT    -4  /* here-doc temp file can't be created */
+#define BADVAR_REDIRECT            -5  /* something wrong with {varname}redir */
 
 #define CLOBBERING_REDIRECT(ri) \
   (ri == r_output_direction || ri == r_err_and_out)
@@ -72,10 +76,10 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
 #define W_HASDOLLAR    0x000001        /* Dollar sign present. */
 #define W_QUOTED       0x000002        /* Some form of quote character is present. */
 #define W_ASSIGNMENT   0x000004        /* This word is a variable assignment. */
-#define W_GLOBEXP      0x000008        /* This word is the result of a glob expansion. */
-#define W_NOSPLIT      0x000010        /* Do not perform word splitting on this word. */
+#define W_SPLITSPACE   0x000008        /* Split this word on " " regardless of IFS */
+#define W_NOSPLIT      0x000010        /* Do not perform word splitting on this word because ifs is empty string. */
 #define W_NOGLOB       0x000020        /* Do not perform globbing on this word. */
-#define W_NOSPLIT2     0x000040        /* Don't split word except for $@ expansion. */
+#define W_NOSPLIT2     0x000040        /* Don't split word except for $@ expansion (using spaces) because context does not allow it. */
 #define W_TILDEEXP     0x000080        /* Tilde expand this assignment word */
 #define W_DOLLARAT     0x000100        /* $@ and its special handling */
 #define W_DOLLARSTAR   0x000200        /* $* and its special handling */
@@ -92,6 +96,11 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
 #define W_NOPROCSUB    0x100000        /* don't perform process substitution */
 #define W_HASCTLESC    0x200000        /* word contains literal CTLESC characters */
 #define W_ASSIGNASSOC  0x400000        /* word looks like associative array assignment */
+#define W_ASSIGNARRAY  0x800000        /* word looks like a compound indexed array assignment */
+#define W_ARRAYIND     0x1000000       /* word is an array index being expanded */
+#define W_ASSNGLOBAL   0x2000000       /* word is a global assignment to declare (declare/typeset -g) */
+#define W_NOBRACE      0x4000000       /* Don't perform brace expansion */
+#define W_ASSIGNINT    0x8000000       /* word is an integer assignment to declare */
 
 /* Possible values for subshell_environment */
 #define SUBSHELL_ASYNC 0x01    /* subshell caused by `command &' */
@@ -101,6 +110,7 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select,
 #define SUBSHELL_PIPE  0x10    /* subshell from a pipeline element */
 #define SUBSHELL_PROCSUB 0x20  /* subshell caused by <(command) or >(command) */
 #define SUBSHELL_COPROC        0x40    /* subshell from a coproc pipeline */
+#define SUBSHELL_RESETTRAP 0x80        /* subshell needs to reset trap strings on first call to trap */
 
 /* A structure which represents a word. */
 typedef struct word_desc {
@@ -135,7 +145,8 @@ typedef union {
    (or translator in redir.c) encountered an out-of-range file descriptor. */
 typedef struct redirect {
   struct redirect *next;       /* Next element, or NULL. */
-  int redirector;              /* Descriptor to be redirected. */
+  REDIRECTEE redirector;       /* Descriptor or varname to be redirected. */
+  int rflags;                  /* Private flags for this redirection */
   int flags;                   /* Flag value for `open'. */
   enum r_instruction  instruction; /* What to do with the information. */
   REDIRECTEE redirectee;       /* File descriptor or filename */
@@ -163,6 +174,7 @@ typedef struct element {
 #define CMD_STDIN_REDIR           0x400 /* async command needs implicit </dev/null */
 #define CMD_COMMAND_BUILTIN 0x0800 /* command executed by `command' builtin */
 #define CMD_COPROC_SUBSHELL 0x1000
+#define CMD_LASTPIPE       0x2000
 
 /* What a command looks like. */
 typedef struct command {
@@ -287,7 +299,7 @@ typedef struct arith_com {
 } ARITH_COM;
 #endif /* DPAREN_ARITHMETIC */
 
-/* The conditional command, [[...]].  This is a binary tree -- we slippped
+/* The conditional command, [[...]].  This is a binary tree -- we slipped
    a recursive-descent parser into the YACC grammar to parse it. */
 #define COND_AND       1
 #define COND_OR                2
@@ -346,6 +358,7 @@ typedef struct coproc {
   int c_wsave;
   int c_flags;
   int c_status;
+  int c_lock;
 } Coproc;
 
 typedef struct coproc_com {