private static void ValidateField(RppField field)
 {
     if (field.InitExpr == null || field.InitExpr is RppEmptyExpr)
     {
         throw SemanticExceptionFactory.MissingInitializer(field.Token);
     }
 }
Beispiel #2
0
        private static RFieldAttributes GetAttributes(RppField node)
        {
            RFieldAttributes attrs = RFieldAttributes.Public;
            if (node.Name == "_instance")
            {
                attrs |= RFieldAttributes.Static;
            }

            return attrs;
        }
Beispiel #3
0
 public override void Visit(RppField node)
 {
     node.ResolveType(_currentClass.Scope, _diagnostic);
     node.FieldInfo = _currentType.DefineField(node.Name, node.Type.Value, GetAttributes(node));
 }
Beispiel #4
0
 public override void Visit(RppField node)
 {
     node.ResolveType(_currentClass.Scope, _diagnostic);
 }
 public override void Visit(RppField node)
 {
     if (!node.IsClassParam)
         ValidateField(node);
 }
Beispiel #6
0
 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);
 }