public static void AnalyzeBlock(CodeBlock block) { #if FULL ForestRewriter.Rewrite(block); #endif ClosureBinder.Bind(block); FlowChecker.Check(block); }
//------------------------------------------------------------ // FUNCBREC.CreateNewLocVarSym // /// <summary>Increments the following values: /// FUNCBREC.localCount, /// FUNCBREC.unreferencedVarCount and /// FUNCBREC.uninitedVarCount. /// And sets LOCVARSYM.LocSlotInfo. /// </summary> /// <param name="name"></param> /// <param name="typeSym"></param> /// <param name="parentSym"></param> /// <returns></returns> //------------------------------------------------------------ internal LOCVARSYM CreateNewLocVarSym( string name, TYPESYM typeSym, PARENTSYM parentSym) { SYM sym = Compiler.LocalSymbolManager.LookupLocalSym( name, parentSym, SYMBMASK.LOCVARSYM); if (sym != null) { return(sym as LOCVARSYM); } LOCVARSYM locSym = Compiler.LocalSymbolManager.CreateLocalSym( SYMKIND.LOCVARSYM, name, parentSym) as LOCVARSYM; locSym.TypeSym = typeSym; StoreInCache(null, name, locSym, null, true); ++this.localCount; if (this.localCount > 0xffff) { Compiler.Error(treeNode, CSCERRID.ERR_TooManyLocals); } ++this.unreferencedVarCount; locSym.LocSlotInfo.SetJbitDefAssg(this.uninitedVarCount + 1); int cbit = FlowChecker.GetCbit(Compiler, locSym.TypeSym); this.uninitedVarCount += cbit; return(locSym); }
public static void AnalyzeBlock(CodeBlock block) { ClosureBinder.Bind(block); FlowChecker.Check(block); }