public MethodBuilder EmitConstants(TypeBuilder fnTB) { try { Var.pushThreadBindings(RT.map(RT.PrintDupVar, true)); MethodBuilder mb = fnTB.DefineMethod(StaticCtorHelperName + "_constants", MethodAttributes.Private | MethodAttributes.Static); CljILGen ilg = new CljILGen(mb.GetILGenerator()); for (int i = 0; i < Constants.count(); i++) { FieldBuilder fb; if (ConstantFields.TryGetValue(i, out fb)) { EmitValue(Constants.nth(i), ilg); if (Constants.nth(i).GetType() != ConstantType(i)) { ilg.Emit(OpCodes.Castclass, ConstantType(i)); } ilg.Emit(OpCodes.Stsfld, fb); } } ilg.Emit(OpCodes.Ret); return(mb); } finally { Var.popThreadBindings(); } }
public void EmitConstantFieldDefs(TypeBuilder baseTB) { // We have to do this different than the JVM version. // The JVM does all these at the end. // That works for the usual ObjExpr, but not for the top-level one that becomes __Init__.Initialize in the assembly. // That one need the constants defined incrementally. // This version accommodates the all-at-end approach for general ObjExprs and the incremental approach in Compiler.Compile1. if (ConstantFields == null) { ConstantFields = new Dictionary <int, FieldBuilder>(Constants.count()); } int nextKey = ConstantFields.Count == 0 ? 0 : ConstantFields.Keys.Max() + 1; for (int i = nextKey; i < Constants.count(); i++) { if (!ConstantFields.ContainsKey(i)) { string fieldName = ConstantName(i); Type fieldType = ConstantType(i); FieldBuilder fb = baseTB.DefineField(fieldName, fieldType, FieldAttributes.FamORAssem | FieldAttributes.Static); ConstantFields[i] = fb; } } }
internal void EmitConstant(CljILGen ilg, int id, object val) { FieldBuilder fb = null; if ( ConstantFields != null && ConstantFields.TryGetValue(id, out fb)) { ilg.MaybeEmitVolatileOp(fb); ilg.Emit(OpCodes.Ldsfld, fb); } else EmitValue(val, ilg); }
public Configuration(ConfigData configData) : this() { AuditMode = configData.AuditMode ?? false; MinimumPasswordValidatorProperties = configData.MinimumPasswordValidatorProperties ?? 0; PasswordValidatorRequiredLength = configData.PasswordValidatorRequiredLength ?? 0; if (configData.PasswordValidatorRequiredProperties != null) { foreach (var data in configData.PasswordValidatorRequiredProperties) { PasswordValidatorRequiredProperties.Add(data); } } foreach (var data in configData.Behavior) { Behavior[data.Key] = CreateBehavior(data.Value); } foreach (var data in configData.Sinks) { Sinks[data.Key] = CreateBehavior(data.Value); } foreach (var data in configData.CsrfProtectionAttributes) { AddAntiCsrfTAttributeToConfiguration(data); } foreach (var data in configData.PasswordFields) { PasswordFields.Add(data.ToUpperInvariant()); } foreach (var data in configData.ConstantFields) { ConstantFields.Add(data); } }
internal void EmitConstant(CljILGen ilg, int id, object val) { if (_fnMode == Ast.FnMode.Light) { if (val == null) { ilg.EmitNull(); } if (val.GetType().IsPrimitive) { EmitPrimitive(ilg, val); ilg.Emit(OpCodes.Box, val.GetType()); } else { ilg.Emit(OpCodes.Ldarg_0); // this ilg.Emit(OpCodes.Castclass, typeof(IFnClosure)); ilg.EmitCall(Compiler.Method_IFnClosure_GetClosure); ilg.EmitFieldGet(Compiler.Field_Closure_Constants); ilg.EmitInt(id); ilg.EmitLoadElement(typeof(Object)); ilg.Emit(OpCodes.Castclass, ConstantType(id)); } } else { FieldBuilder fb = null; if (_fnMode == FnMode.Full && ConstantFields != null && ConstantFields.TryGetValue(id, out fb)) { ilg.Emit(OpCodes.Ldsfld, fb); } else { EmitValue(val, ilg); } } }