internal Builder([DisallowNull] ES_InterfaceData *data, ES_AccessModifier accessMod, ES_FullyQualifiedName fullyQualifiedName, ArrayPointer <byte> sourceUnit ) { InterfaceData = data; data->TypeInfo = new ES_TypeInfo(ES_TypeTag.Interface, accessMod, ES_TypeFlag.NoNew, sourceUnit, fullyQualifiedName); }
public ES_ClassData.Builder GetOrCreateClass(ES_AccessModifier accessMod, ArrayPointer <byte> name, ArrayPointer <byte> sourceUnit ) { CheckDisposed(); if (CheckTypeExists(name, ES_TypeTag.Class) != null) { throw new CompilationException(ES_FrontendErrors.ClashingTypeExists); } if (ClassBuilders.TryGetValue(name, out var builder)) { return(builder); } var classDataPtr = envBuilder.MemoryManager.GetMemory <ES_ClassData> (); builder = new ES_ClassData.Builder(classDataPtr, accessMod, new ES_FullyQualifiedName(NamespaceName, name), sourceUnit); ClassBuilders.Add(name, builder); NamespaceData.types.Add(&classDataPtr->TypeInfo); var unknType = NamespaceData.environment.TypeUnknownValue; builder.BaseClass = (ES_ClassData *)unknType; builder.InterfacesList = ArrayPointer <Pointer <ES_InterfaceData> > .Null; return(builder); }
public ES_MemberData_Variable( ArrayPointer <byte> name, ArrayPointer <byte> srcUnit, ES_AccessModifier accessMod, ES_MemberFlags flags, int offset, ES_TypeInfo *type ) { Info = new ES_MemberData(accessMod, ES_MemberType.Field, flags, name, srcUnit); Offset = offset; Type = type; }
public ES_FunctionPrototypeData(ES_AccessModifier accessMod, ES_TypeInfo *retType, ArrayPointer <ES_FunctionPrototypeArgData> argsList, ES_FullyQualifiedName fullyQualifiedName, ArrayPointer <byte> sourceUnit ) { TypeInfo = new (ES_TypeTag.Function, accessMod, ES_TypeFlag.NoNew, sourceUnit, fullyQualifiedName); TypeInfo.RuntimeSize = IntPtr.Size; returnType = retType; argumentsList = argsList; }
public ES_MemberData_Function( ES_MemberFlags flags, ES_FullyQualifiedName fqn, ES_AccessModifier accessMod, ArrayPointer <byte> srcUnit, ES_FunctionPrototypeData *funcType, ArrayPointer <ES_FunctionArgData> args, int optArgCount ) { Info = new ES_MemberData(accessMod, ES_MemberType.Field, flags, fqn.TypeName, srcUnit); FunctionData = new ES_FunctionData( fqn, accessMod, srcUnit, funcType, args, optArgCount ); }
public ES_MemberData( ES_AccessModifier accessMod, ES_MemberType type, ES_MemberFlags flags, ArrayPointer <byte> name, ArrayPointer <byte> srcUnit ) { AccessModifier = accessMod; MemberType = type; Flags = flags; Name = name; SourceUnit = srcUnit; }
public ES_FloatTypeData( ES_AccessModifier accessMod, ArrayPointer <byte> sourceUnit, ES_FullyQualifiedName fullyQualifiedName, ES_FloatSize size ) { TypeInfo = new ES_TypeInfo(ES_TypeTag.Float, accessMod, ES_TypeFlag.NoRefs, sourceUnit, fullyQualifiedName); FloatSize = size; TypeInfo.RuntimeSize = size switch { ES_FloatSize.Single => 4, ES_FloatSize.Double => 8, _ => throw new NotImplementedException("Size not implemented."), }; }
public ES_FunctionData( ES_FullyQualifiedName fqn, ES_AccessModifier accessMod, ArrayPointer <byte> sourceUnit, ES_FunctionPrototypeData *functionType, ArrayPointer <ES_FunctionArgData> args, int optArgCount ) { Debug.Assert(functionType is not null); Debug.Assert(args.Length == functionType->ArgumentsList.Length); Name = fqn; AccessModifier = accessMod; SourceUnit = sourceUnit; FunctionType = functionType; Arguments = args; OptionalArgsCount = optArgCount; }
public ES_TypeInfo( ES_TypeTag typeTag, ES_AccessModifier accessMod, ES_TypeFlag flags, ArrayPointer <byte> sourceUnit, ES_FullyQualifiedName fullyQualifiedName ) { TypeTag = typeTag; RuntimeSize = -1; AccessModifier = accessMod; Flags = flags; Name = fullyQualifiedName; SourceUnit = sourceUnit; RefsList = ArrayPointer <nint> .Null; MembersList = new ES_TypeMembers(); }
public ES_IntTypeData( ES_AccessModifier accessMod, ArrayPointer <byte> sourceUnit, ES_FullyQualifiedName fullyQualifiedName, ES_IntSize size, bool unsigned ) { TypeInfo = new ES_TypeInfo(ES_TypeTag.Int, accessMod, ES_TypeFlag.NoRefs, sourceUnit, fullyQualifiedName); IntSize = size; Unsigned = unsigned; TypeInfo.RuntimeSize = size switch { ES_IntSize.Int8 => 1, ES_IntSize.Int16 => 2, ES_IntSize.Int32 => 4, ES_IntSize.Int64 => 8, _ => throw new NotImplementedException("Size not implemented."), }; }
public ES_EnumData.Builder GetOrCreateEnum(ES_AccessModifier accessMod, ArrayPointer <byte> name, ArrayPointer <byte> sourceUnit ) { CheckDisposed(); if (CheckTypeExists(name, ES_TypeTag.Enum) != null) { throw new CompilationException(ES_FrontendErrors.ClashingTypeExists); } if (EnumBuilders.TryGetValue(name, out var builder)) { return(builder); } var enumDataPtr = envBuilder.MemoryManager.GetMemory <ES_EnumData> (); builder = new ES_EnumData.Builder(enumDataPtr, accessMod, new ES_FullyQualifiedName(NamespaceName, name), sourceUnit); EnumBuilders.Add(name, builder); NamespaceData.types.Add(&enumDataPtr->TypeInfo); return(builder); }