private static void ValidateField(RppField field) { if (field.InitExpr == null || field.InitExpr is RppEmptyExpr) { throw SemanticExceptionFactory.MissingInitializer(field.Token); } }
private static RFieldAttributes GetAttributes(RppField node) { RFieldAttributes attrs = RFieldAttributes.Public; if (node.Name == "_instance") { attrs |= RFieldAttributes.Static; } return attrs; }
public override void Visit(RppField node) { node.ResolveType(_currentClass.Scope, _diagnostic); node.FieldInfo = _currentType.DefineField(node.Name, node.Type.Value, GetAttributes(node)); }
public override void Visit(RppField node) { node.ResolveType(_currentClass.Scope, _diagnostic); }
public override void Visit(RppField node) { if (!node.IsClassParam) ValidateField(node); }
private void CreateStaticConstructor(TypeBuilder typeBuilder, RppField instanceField, RppClass obj) { FieldInfo instanceFieldInfo = instanceField.FieldInfo.Native; ConstructorBuilder staticConstructor = typeBuilder.DefineTypeInitializer(); _body = staticConstructor.GetILGenerator(); instanceField.InitExpr.Accept(this); _body.Emit(OpCodes.Stsfld, instanceFieldInfo); _body.Emit(OpCodes.Ret); }