Пример #1
0
        public override void VisitFieldDeclaration(FieldDeclaration fieldDeclaration)
        {
            foreach (var v in fieldDeclaration.Variables)
            {
                var resolveResult = _resolver.Resolve(v);
                if (!(resolveResult is MemberResolveResult))
                {
                    _errorReporter.Region = fieldDeclaration.GetRegion();
                    _errorReporter.InternalError("Field declaration " + v.Name + " does not resolve to a member.");
                    return;
                }

                var field = ((MemberResolveResult)resolveResult).Member as IField;
                if (field == null)
                {
                    _errorReporter.Region = fieldDeclaration.GetRegion();
                    _errorReporter.InternalError("Field declaration " + v.Name + " does not resolve to a field (resolves to " + resolveResult.ToString() + ")");
                    return;
                }

                var jsClass = GetJsClass(field.DeclaringTypeDefinition);
                if (jsClass == null)
                {
                    return;
                }

                var impl = _metadataImporter.GetFieldSemantics(field);
                if (impl.GenerateCode)
                {
                    if (v.Initializer.IsNull)
                    {
                        AddDefaultFieldInitializerToType(jsClass, impl.Name, field, field.IsStatic);
                    }
                    else
                    {
                        CompileAndAddFieldInitializerToType(jsClass, impl.Name, field, v.Initializer, field.IsStatic);
                    }
                }
            }
        }
Пример #2
0
        public override void VisitFieldDeclaration(FieldDeclaration fieldDeclaration)
        {
            foreach (var v in fieldDeclaration.Variables) {
                var resolveResult = _resolver.Resolve(v);
                if (!(resolveResult is MemberResolveResult)) {
                    _errorReporter.Region = fieldDeclaration.GetRegion();
                    _errorReporter.InternalError("Field declaration " + v.Name + " does not resolve to a member.");
                    return;
                }

                var field = ((MemberResolveResult)resolveResult).Member as IField;
                if (field == null) {
                    _errorReporter.Region = fieldDeclaration.GetRegion();
                    _errorReporter.InternalError("Field declaration " + v.Name + " does not resolve to a field (resolves to " + resolveResult.ToString() + ")");
                    return;
                }

                var jsClass = GetJsClass(field.DeclaringTypeDefinition);
                if (jsClass == null)
                    return;

                var impl = _metadataImporter.GetFieldSemantics(field);
                if (impl.GenerateCode) {
                    if (v.Initializer.IsNull) {
                        AddDefaultFieldInitializerToType(jsClass, impl.Name, field, field.ReturnType, field.DeclaringTypeDefinition, field.IsStatic);
                    }
                    else {
                        CompileAndAddFieldInitializerToType(jsClass, impl.Name, field.DeclaringTypeDefinition, v.Initializer, field.IsStatic);
                    }
                }
            }
        }