18a84f65c93e562b7e5f3e55f55a73bb54e75b60
[mono.git] / mcs / class / Microsoft.JScript / Microsoft.JScript / VariableStatement.cs
1 //
2 // VariableStatement.cs: The AST representation of a VariableStatement.
3 //
4 // Author:
5 //      Cesar Octavio Lopez Nataren
6 //
7 // (C) 2003, Cesar Octavio Lopez Nataren, <cesar@ciencias.unam.mx>
8 //
9
10 using System.Collections;
11 using System.Text;
12 using System;
13
14 namespace Microsoft.JScript {
15
16         public class VariableStatement : AST {
17
18                 internal ArrayList var_decls;
19
20                 internal VariableStatement ()
21                 {
22                         var_decls = new ArrayList ();
23                 }
24
25
26                 internal void Add (VariableDeclaration varDecl)
27                 {
28                         var_decls.Add (varDecl);
29                 }
30
31
32                 public override string ToString ()
33                 {
34                         StringBuilder sb = new StringBuilder ();
35
36                         foreach (VariableDeclaration var_decl in var_decls)
37                                 sb.Append (var_decl.ToString () + " ");
38
39                         return sb.ToString ();
40                 }
41
42                 internal override void Emit (EmitContext ec)
43                 {
44                         int i, size = var_decls.Count;
45
46                         for (i = 0; i < size; i++)
47                                 ((VariableDeclaration) var_decls [i]).Emit (ec);
48                 }
49
50                 internal override bool Resolve (IdentificationTable context)
51                 {
52                         VariableDeclaration tmp_decl;
53                         int i, size = var_decls.Count;
54                         bool res = true;
55                         AST init_val;
56
57                         for (i = 0; i < size; i++) {
58                                 tmp_decl = (VariableDeclaration) var_decls [i];
59                                 init_val = tmp_decl.InitValue;
60
61                                 if (init_val != null)
62                                         res = init_val.Resolve (context);
63
64                                 if (res)
65                                         context.Enter (tmp_decl.Id, tmp_decl);
66                         }
67
68                         return true;
69                 }
70         }
71 }