4 // Author: Cesar Octavio Lopez Nataren
6 // (C) 2003, Cesar Octavio Lopez Nataren, <cesar@ciencias.unam.mx>
10 // Permission is hereby granted, free of charge, to any person obtaining
11 // a copy of this software and associated documentation files (the
12 // "Software"), to deal in the Software without restriction, including
13 // without limitation the rights to use, copy, modify, merge, publish,
14 // distribute, sublicense, and/or sell copies of the Software, and to
15 // permit persons to whom the Software is furnished to do so, subject to
16 // the following conditions:
18 // The above copyright notice and this permission notice shall be
19 // included in all copies or substantial portions of the Software.
21 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
30 using System
.Collections
;
34 namespace Microsoft
.JScript
{
36 public class Block
: AST
{
38 internal ArrayList elems
;
42 elems
= new ArrayList ();
45 internal Block (int line_number
)
48 this.line_number
= line_number
;
51 internal Block (AST parent
)
57 internal void Add (AST e
)
63 public override string ToString ()
65 StringBuilder sb
= new StringBuilder ();
67 foreach (AST a
in elems
)
69 sb
.Append (a
.ToString () + " ");
71 return sb
.ToString ();
74 internal override void Emit (EmitContext ec
)
76 int i
, n
= elems
.Count
;
79 for (i
= 0; i
< n
; i
++) {
81 if (e
is FunctionDeclaration
)
82 ((FunctionDeclaration
) e
).Emit (ec
);
84 for (i
= 0; i
< n
; i
++) {
86 if (!(e
is FunctionDeclaration
))
91 internal override bool Resolve (IdentificationTable context
)
96 int i
, n
= elems
.Count
;
98 if (parent
== null || parent
is FunctionDeclaration
)
103 for (i
= 0; i
< n
; i
++) {
106 r
&= ((Exp
) e
).Resolve (context
, no_effect
);
108 r
&= e
.Resolve (context
);