Exemplo n.º 1
0
 public void DefineFunction(IToken idToken, int nargs, int nlocals)
 {
     FunctionSymbol searchSym;
     if (_functions.TryGetValue(idToken.Text, out searchSym))
     {
         if (searchSym.IsFwdRef)
         {
             searchSym.Define(_ip, nargs, nlocals);
             searchSym.ResolveFwdRefs(_code);
         }
         else
         {
             throw new GenerationException(String.Format("Function '{0}' already defined", idToken.Text));
         }
     }
     else
     {
         searchSym = new FunctionSymbol(idToken.Text, _ip, _constPool.Count, nargs, nlocals);
         _functions.Add(idToken.Text, searchSym);
         _constPool.Add(searchSym);
     }
 }
Exemplo n.º 2
0
        public int GetFunctionIndex(string funcId)
        {
            FunctionSymbol searchSym;
            if (_functions.TryGetValue(funcId, out searchSym))
            {
                if (searchSym.IsFwdRef)
                {
                    searchSym.AddFwdRef(_ip);
                }

                return searchSym.ConstIndex;
            }
            else
            {
                searchSym = new FunctionSymbol(funcId, _constPool.Count);
                _functions.Add(funcId, searchSym);
                _constPool.Add(searchSym);
                searchSym.AddFwdRef(_ip);
                return searchSym.ConstIndex;
            }
        }