Esempio n. 1
0
        public override LLVMRegister VisitFieldOrClassAssignment([NotNull] ClepsParser.FieldOrClassAssignmentContext context)
        {
            string memberName = context.classOrMemberName().Name.Text;
            string className  = String.Join(".", CurrentNamespaceAndClass);

            if (ClassManager.DoesClassContainMember(className, memberName))
            {
                LLVMRegister thisPtr = VariableManager.GetVariable("this");
                LLVMValueRef thisVar = LLVM.BuildLoad(Builder, thisPtr.LLVMPtrValueRef, "this");
                LLVMRegister ret     = GetClassMember(className, memberName, thisVar);
                return(ret);
            }
            else if (ClassManager.IsClassLoaded(className))
            {
                //get the class type
                throw new NotImplementedException("Class types are not yet supported");
            }
            else
            {
                string errorMessage = String.Format("No Class or Field named {0} exists", memberName);
                Status.AddError(new CompilerError(FileName, context.Start.Line, context.Start.Column, errorMessage));
                //just assume this is operation returns a constant int to avoid stalling the compilation
                LLVMRegister ret = GetConstantIntRegisterOfClepsType(context, LLVM.Int32TypeInContext(Context), 11, "int32" /* friendly type name */);
                return(ret);
            }
        }