public void DoVarDef(DoVarDef e) { LocalBuilder lt = il.DeclareLocal(e.Init.ExpType); DoVars.Add(e.Pos, lt); e.Init.Visit(this); il.Emit(OpCodes.Stloc, lt); }
public void DoVarDef(DoVarDef e) { e.Init.Visit(this); if (e.Init.ExpType != typeof(void)) //If type of init is known put it in. { if (DoVars[e.Pos] == null) { DoVars.Add(e.Pos, e.Init.ExpType); //Else DoVarExp will add typeof(void) } } e.Iter.Visit(this); if (e.Init.ExpType == typeof(void) && e.Init is VarExp) //If e.Init is VarExp which currently has no type. { e.Init.ExpType = (Type)DoVars[e.Pos]; //Assign it since now we know the type required. CurrentFuncDef.Add(((VarExp)e.Init).Name, e.Init.ExpType); } if (e.Init.ExpType != e.Iter.ExpType) { Console.WriteLine("Do Expression: Init and Iterations have different type"); success = false; } }
public void DoVarIter(DoVarDef e) { e.Iter.Visit(this); il.Emit(OpCodes.Stloc, (LocalBuilder)DoVars[e.Pos]); }