static int class_count;
CompilerContext compiler;
+
+ //
+ // Instead of allocating carrier array everytime we
+ // share the bucket for very common constructs which can never
+ // be recursive
+ //
+ static ArrayList parameters_bucket = new ArrayList (6);
+ static ArrayList variables_bucket = new ArrayList (6);
%}
%token EOF
attribute_list
: attribute
{
- ArrayList attrs = new ArrayList (4);
- attrs.Add ($1);
-
- $$ = attrs;
-
+ $$ = new ArrayList (4) { $1 };
}
| attribute_list COMMA attribute
{
constant_declarators
: constant_declarator
{
- ArrayList constants = new ArrayList (4);
+ variables_bucket.Clear ();
if ($1 != null)
- constants.Add ($1);
- $$ = constants;
+ variables_bucket.Add ($1);
+ $$ = variables_bucket;
}
| constant_declarators COMMA constant_declarator
{
local_variable_declarators
: local_variable_declarator
{
- ArrayList decl = new ArrayList (4);
+ variables_bucket.Clear ();
if ($1 != null)
- decl.Add ($1);
- $$ = decl;
+ variables_bucket.Add ($1);
+ $$ = variables_bucket;
}
| local_variable_declarators COMMA local_variable_declarator
{
variable_declarators
: variable_declarator
{
- ArrayList decl = new ArrayList (4);
+ variables_bucket.Clear ();
if ($1 != null)
- decl.Add ($1);
- $$ = decl;
+ variables_bucket.Add ($1);
+ $$ = variables_bucket;
}
| variable_declarators COMMA variable_declarator
{
fixed_parameters
: fixed_parameter
{
- ArrayList pars = new ArrayList (4);
+ parameters_bucket.Clear ();
Parameter p = (Parameter) $1;
- pars.Add (p);
+ parameters_bucket.Add (p);
default_parameter_used = p.HasDefaultValue;
- $$ = pars;
+ $$ = parameters_bucket;
}
| fixed_parameters COMMA fixed_parameter
{
array_initializer
: OPEN_BRACE CLOSE_BRACE
{
- ArrayList list = new ArrayList (4);
- $$ = list;
+ $$ = new ArrayList (0);
}
| OPEN_BRACE variable_initializer_list opt_comma CLOSE_BRACE
{
{
if ($1 != null) {
VarExpr ve = $1 as VarExpr;
- if (ve != null)
- ve.VariableInitializer = (ArrayList)$2;
+ if (ve != null) {
+ if (((VariableDeclaration)((ArrayList)$2) [0]).expression_or_array_initializer == null)
+ ve.VariableInitializersCount = 0;
+ else
+ ve.VariableInitializersCount = ((ArrayList)$2).Count;
+ }
$$ = new DictionaryEntry ($1, $2);
} else
LocatedToken lt = (LocatedToken) cc.Value;
if (lt != null){
- ArrayList one = new ArrayList (4);
+ ArrayList one = new ArrayList (2);
one.Add (new VariableDeclaration (lt, null));
// <summary>
// A class used to pass around variable declarations and constants
// </summary>
-public class VariableDeclaration {
+class VariableDeclaration {
public string identifier;
public Expression expression_or_array_initializer;
public Location Location;
Block declare_local_variables (Expression type, ArrayList variable_declarators, Location loc)
{
Block implicit_block;
- ArrayList inits = null;
//
// If we are doing interactive editing, we want variable declarations
if (implicit_block.AddVariable (type, decl.identifier, decl.Location) != null) {
if (decl.expression_or_array_initializer != null){
- if (inits == null)
- inits = new ArrayList (4);
- inits.Add (decl);
- }
- }
- }
-
- if (inits == null)
- return implicit_block;
-
- foreach (VariableDeclaration decl in inits){
- Assign assign;
- Expression expr = decl.expression_or_array_initializer;
-
- LocalVariableReference var;
- var = new LocalVariableReference (implicit_block, decl.identifier, loc);
+ Assign assign;
+ Expression expr = decl.expression_or_array_initializer;
+
+ var lvr = new LocalVariableReference (implicit_block, decl.identifier, loc);
- assign = new SimpleAssign (var, expr, decl.Location);
+ assign = new SimpleAssign (lvr, expr, decl.Location);
- implicit_block.AddStatement (new StatementExpression (assign));
+ implicit_block.AddStatement (new StatementExpression (assign));
+ }
+ }
}
return implicit_block;