Esempio n. 1
0
 public CodeGenAnalyser(ISyntaxTreeNode astRoot, bool optimize)
 {
     _astRoot = astRoot;
     _currentLocalIdx = 0;
     _previousVarKind = VariableDeclaration.Kind.Class;
     _optimize = optimize;
 }
Esempio n. 2
0
            public override void Visit(VariableDeclaration node)
            {
                if (_pass != 1) return;

                if (_previousVarKind != node.VariableKind)
                {
                    _currentLocalIdx = 0;
                }
                if (node.VariableKind == VariableDeclaration.Kind.Formal)
                {
                    // Note: this does not take static methods into account
                    // since the only static method in MiniJava is the main
                    // method and it cannot have parameters.
                    node.LocalIndex = (short) (1 + _currentLocalIdx++);
                }
                else if (node.VariableKind == VariableDeclaration.Kind.Local &&
                    (!_optimize || node.Used))
                {
                    node.LocalIndex = _currentLocalIdx++;
                }
                _previousVarKind = node.VariableKind;
            }