...
This commit is contained in:
@@ -21,7 +21,7 @@ public static class Archive
|
|||||||
var errors = await process.StandardError.ReadToEndAsync();
|
var errors = await process.StandardError.ReadToEndAsync();
|
||||||
if (!string.IsNullOrWhiteSpace(errors))
|
if (!string.IsNullOrWhiteSpace(errors))
|
||||||
{
|
{
|
||||||
await Console.Error.WriteLineAsync("ar error when archiving:\n" + errors);
|
await Console.Error.WriteLineAsync(errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
return process.ExitCode == 0;
|
return process.ExitCode == 0;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public static class GCC
|
|||||||
var errors = await process.StandardError.ReadToEndAsync();
|
var errors = await process.StandardError.ReadToEndAsync();
|
||||||
if (!string.IsNullOrWhiteSpace(errors))
|
if (!string.IsNullOrWhiteSpace(errors))
|
||||||
{
|
{
|
||||||
await Console.Error.WriteLineAsync("gcc error when assembling:\n" + errors);
|
await Console.Error.WriteLineAsync(errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
return process.ExitCode == 0;
|
return process.ExitCode == 0;
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ public static class QBE
|
|||||||
var errors = await process.StandardError.ReadToEndAsync();
|
var errors = await process.StandardError.ReadToEndAsync();
|
||||||
if (!string.IsNullOrWhiteSpace(errors))
|
if (!string.IsNullOrWhiteSpace(errors))
|
||||||
{
|
{
|
||||||
await Console.Error.WriteLineAsync("qbe error:\n" + errors);
|
await Console.Error.WriteLineAsync(errors);
|
||||||
}
|
}
|
||||||
|
|
||||||
return process.ExitCode == 0;
|
return process.ExitCode == 0;
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ public class Diagnostic
|
|||||||
var contextEndLine = Math.Min(lines.Length, endLine + CONTEXT_LINES);
|
var contextEndLine = Math.Min(lines.Length, endLine + CONTEXT_LINES);
|
||||||
|
|
||||||
var numberPadding = contextEndLine.ToString().Length;
|
var numberPadding = contextEndLine.ToString().Length;
|
||||||
var codePadding = lines.Skip(contextStartLine - 1).Take(contextEndLine - contextStartLine).Max(x => x.Length);
|
var codePadding = lines.Skip(contextStartLine - 1).Take(contextEndLine - contextStartLine + 1).Max(x => x.Length);
|
||||||
|
|
||||||
sb.Append('╭');
|
sb.Append('╭');
|
||||||
sb.Append(new string('─', numberPadding + 2));
|
sb.Append(new string('─', numberPadding + 2));
|
||||||
@@ -144,16 +144,16 @@ public class Diagnostic
|
|||||||
if (i >= startLine && i <= endLine)
|
if (i >= startLine && i <= endLine)
|
||||||
{
|
{
|
||||||
var markerStartColumn = 1;
|
var markerStartColumn = 1;
|
||||||
var markerEndColumn = line.Length + 1;
|
var markerEndColumn = line.Length;
|
||||||
|
|
||||||
if (i == startLine)
|
if (i == startLine)
|
||||||
{
|
{
|
||||||
markerStartColumn = Span.Value.Start.Column;
|
markerStartColumn = Math.Min(Span.Value.Start.Column, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i == endLine)
|
if (i == endLine)
|
||||||
{
|
{
|
||||||
markerEndColumn = Span.Value.End.Column;
|
markerEndColumn = Math.Min(Span.Value.End.Column, line.Length);
|
||||||
}
|
}
|
||||||
|
|
||||||
var markerLength = markerEndColumn - markerStartColumn;
|
var markerLength = markerEndColumn - markerStartColumn;
|
||||||
|
|||||||
@@ -34,4 +34,12 @@ public class Module
|
|||||||
.Where(x => x.Exported || includePrivate)
|
.Where(x => x.Exported || includePrivate)
|
||||||
.ToList();
|
.ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<GlobalVariableSyntax> GlobalVariables(bool includePrivate)
|
||||||
|
{
|
||||||
|
return _definitions
|
||||||
|
.OfType<GlobalVariableSyntax>()
|
||||||
|
.Where(x => x.Exported || includePrivate)
|
||||||
|
.ToList();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -86,6 +86,7 @@ public sealed class Parser
|
|||||||
{
|
{
|
||||||
Symbol.Func => ParseFunc(startIndex, exported, null),
|
Symbol.Func => ParseFunc(startIndex, exported, null),
|
||||||
Symbol.Struct => ParseStruct(startIndex, exported),
|
Symbol.Struct => ParseStruct(startIndex, exported),
|
||||||
|
Symbol.Let => ParseGlobalVariable(startIndex, exported),
|
||||||
_ => throw new ParseException(Diagnostic
|
_ => throw new ParseException(Diagnostic
|
||||||
.Error($"Expected 'func' or 'struct' but found '{keyword.Symbol}'")
|
.Error($"Expected 'func' or 'struct' but found '{keyword.Symbol}'")
|
||||||
.WithHelp("Valid definition keywords are 'func' and 'struct'")
|
.WithHelp("Valid definition keywords are 'func' and 'struct'")
|
||||||
@@ -113,6 +114,22 @@ public sealed class Parser
|
|||||||
return definitions;
|
return definitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private GlobalVariableSyntax ParseGlobalVariable(int startIndex, bool exported)
|
||||||
|
{
|
||||||
|
var name = ExpectIdentifier();
|
||||||
|
|
||||||
|
TypeSyntax? type = null;
|
||||||
|
if (TryExpectSymbol(Symbol.Colon))
|
||||||
|
{
|
||||||
|
type = ParseType();
|
||||||
|
}
|
||||||
|
|
||||||
|
ExpectSymbol(Symbol.Assign);
|
||||||
|
var value = ParseExpression();
|
||||||
|
|
||||||
|
return new GlobalVariableSyntax(GetTokens(startIndex), name.Value, exported, type, value);
|
||||||
|
}
|
||||||
|
|
||||||
private FuncSignatureSyntax ParseFuncSignature()
|
private FuncSignatureSyntax ParseFuncSignature()
|
||||||
{
|
{
|
||||||
var startIndex = _tokenIndex;
|
var startIndex = _tokenIndex;
|
||||||
|
|||||||
@@ -17,3 +17,5 @@ public record StructFuncSyntax(List<Token> Tokens, string Name, string? Hook, Fu
|
|||||||
public record StructSyntax(List<Token> Tokens, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
public record StructSyntax(List<Token> Tokens, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
||||||
|
|
||||||
public record StructTemplateSyntax(List<Token> Tokens, List<string> TemplateArguments, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
public record StructTemplateSyntax(List<Token> Tokens, List<string> TemplateArguments, string Name, bool Exported, List<StructFieldSyntax> Fields, List<StructFuncSyntax> Functions) : DefinitionSyntax(Tokens, Name, Exported);
|
||||||
|
|
||||||
|
public record GlobalVariableSyntax(List<Token> Tokens, string Name, bool Exported, TypeSyntax? ExplicitType, ExpressionSyntax Value) : DefinitionSyntax(Tokens, Name, Exported);
|
||||||
@@ -5,6 +5,8 @@ namespace NubLang.Tokenization;
|
|||||||
public enum LiteralKind
|
public enum LiteralKind
|
||||||
{
|
{
|
||||||
Integer,
|
Integer,
|
||||||
|
Hex,
|
||||||
|
Binary,
|
||||||
Float,
|
Float,
|
||||||
String,
|
String,
|
||||||
Bool
|
Bool
|
||||||
|
|||||||
@@ -159,6 +159,51 @@ public sealed class Tokenizer
|
|||||||
var isFloat = false;
|
var isFloat = false;
|
||||||
var buffer = string.Empty;
|
var buffer = string.Empty;
|
||||||
|
|
||||||
|
if (current == '0' && Peek(1) is 'x')
|
||||||
|
{
|
||||||
|
buffer += "0x";
|
||||||
|
Next();
|
||||||
|
Next();
|
||||||
|
while (Peek() != null && Uri.IsHexDigit(Peek()!.Value))
|
||||||
|
{
|
||||||
|
buffer += Peek()!.Value;
|
||||||
|
Next();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer.Length <= 2)
|
||||||
|
{
|
||||||
|
throw new TokenizerException(Diagnostic
|
||||||
|
.Error("Invalid hex literal, no digits found")
|
||||||
|
.At(_fileName, _line, _column)
|
||||||
|
.Build());
|
||||||
|
}
|
||||||
|
|
||||||
|
return new LiteralToken(_fileName, CreateSpan(lineStart, columnStart), LiteralKind.Hex, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current == '0' && Peek(1) is 'b')
|
||||||
|
{
|
||||||
|
buffer += "0b";
|
||||||
|
Next();
|
||||||
|
Next();
|
||||||
|
while (Peek() != null && (Peek() == '0' || Peek() == '1'))
|
||||||
|
{
|
||||||
|
buffer += Peek()!.Value;
|
||||||
|
Next();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (buffer.Length <= 2)
|
||||||
|
{
|
||||||
|
throw new TokenizerException(Diagnostic
|
||||||
|
.Error("Invalid binary literal, no digits found")
|
||||||
|
.At(_fileName, _line, _column)
|
||||||
|
.Build());
|
||||||
|
}
|
||||||
|
|
||||||
|
return new LiteralToken(_fileName, CreateSpan(lineStart, columnStart), LiteralKind.Binary, buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer += current;
|
||||||
while (Peek() != null)
|
while (Peek() != null)
|
||||||
{
|
{
|
||||||
var next = Peek()!.Value;
|
var next = Peek()!.Value;
|
||||||
@@ -187,7 +232,12 @@ public sealed class Tokenizer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return new LiteralToken(_fileName, CreateSpan(lineStart, columnStart), isFloat ? LiteralKind.Float : LiteralKind.Integer, buffer);
|
return new LiteralToken(
|
||||||
|
_fileName,
|
||||||
|
CreateSpan(lineStart, columnStart),
|
||||||
|
isFloat ? LiteralKind.Float : LiteralKind.Integer,
|
||||||
|
buffer
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (current == '"')
|
if (current == '"')
|
||||||
|
|||||||
@@ -13,3 +13,5 @@ public record StructFieldNode(string Name, NubType Type, ExpressionNode? Value)
|
|||||||
public record StructFuncNode(string Name, string? Hook, FuncSignatureNode Signature, BlockNode Body) : Node;
|
public record StructFuncNode(string Name, string? Hook, FuncSignatureNode Signature, BlockNode Body) : Node;
|
||||||
|
|
||||||
public record StructNode(string Module, string Name, List<StructFieldNode> Fields, List<StructFuncNode> Functions) : DefinitionNode(Module, Name);
|
public record StructNode(string Module, string Name, List<StructFieldNode> Fields, List<StructFuncNode> Functions) : DefinitionNode(Module, Name);
|
||||||
|
|
||||||
|
public record GlobalVariableNode(string Module, string Name, ExpressionNode Value) : DefinitionNode(Module, Name);
|
||||||
@@ -46,27 +46,33 @@ public sealed class TypeChecker
|
|||||||
Definitions.Clear();
|
Definitions.Clear();
|
||||||
ReferencedStructTypes.Clear();
|
ReferencedStructTypes.Clear();
|
||||||
|
|
||||||
foreach (var definition in _syntaxTree.Definitions)
|
using (BeginRootScope(_syntaxTree.Metadata.ModuleName))
|
||||||
{
|
{
|
||||||
try
|
foreach (var definition in _syntaxTree.Definitions)
|
||||||
{
|
{
|
||||||
switch (definition)
|
try
|
||||||
{
|
{
|
||||||
case FuncSyntax funcSyntax:
|
switch (definition)
|
||||||
Definitions.Add(CheckFuncDefinition(funcSyntax));
|
{
|
||||||
break;
|
case FuncSyntax funcSyntax:
|
||||||
case StructSyntax structSyntax:
|
Definitions.Add(CheckFuncDefinition(funcSyntax));
|
||||||
Definitions.Add(CheckStructDefinition(structSyntax));
|
break;
|
||||||
break;
|
case StructSyntax structSyntax:
|
||||||
case StructTemplateSyntax:
|
Definitions.Add(CheckStructDefinition(structSyntax));
|
||||||
break;
|
break;
|
||||||
default:
|
case GlobalVariableSyntax globalVariableSyntax:
|
||||||
throw new ArgumentOutOfRangeException();
|
Definitions.Add(CheckGlobalVariable(globalVariableSyntax));
|
||||||
|
break;
|
||||||
|
case StructTemplateSyntax:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new ArgumentOutOfRangeException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (TypeCheckerException e)
|
||||||
|
{
|
||||||
|
Diagnostics.Add(e.Diagnostic);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (TypeCheckerException e)
|
|
||||||
{
|
|
||||||
Diagnostics.Add(e.Diagnostic);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,9 +91,41 @@ public sealed class TypeChecker
|
|||||||
return new ScopeDisposer(this);
|
return new ScopeDisposer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ScopeDisposer BeginRootScope(string module)
|
private ScopeDisposer BeginRootScope(string moduleName)
|
||||||
{
|
{
|
||||||
_scopes.Push(new Scope(module));
|
if (!_visibleModules.TryGetValue(moduleName, out var moduleScope))
|
||||||
|
{
|
||||||
|
throw new TypeCheckerException(Diagnostic.Error($"Module with name {moduleName} not found").Build());
|
||||||
|
}
|
||||||
|
|
||||||
|
var scope = new Scope(moduleName);
|
||||||
|
_scopes.Push(scope);
|
||||||
|
|
||||||
|
foreach (var globalVariable in moduleScope.GlobalVariables(true))
|
||||||
|
{
|
||||||
|
NubType? type;
|
||||||
|
|
||||||
|
if (globalVariable.ExplicitType != null)
|
||||||
|
{
|
||||||
|
type = ResolveType(globalVariable.ExplicitType);
|
||||||
|
var valueExpression = CheckExpression(globalVariable.Value, type);
|
||||||
|
|
||||||
|
if (valueExpression.Type != ResolveType(globalVariable.ExplicitType))
|
||||||
|
{
|
||||||
|
throw new TypeCheckerException(Diagnostic
|
||||||
|
.Error("Value does not match explicit type of global variable")
|
||||||
|
.At(globalVariable.Value)
|
||||||
|
.Build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
type = CheckExpression(globalVariable.Value).Type;
|
||||||
|
}
|
||||||
|
|
||||||
|
scope.DeclareVariable(new Variable(globalVariable.Name, type, VariableKind.LValue));
|
||||||
|
}
|
||||||
|
|
||||||
return new ScopeDisposer(this);
|
return new ScopeDisposer(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,30 +143,27 @@ public sealed class TypeChecker
|
|||||||
|
|
||||||
private StructNode CheckStructDefinition(StructSyntax node)
|
private StructNode CheckStructDefinition(StructSyntax node)
|
||||||
{
|
{
|
||||||
using (BeginRootScope(_syntaxTree.Metadata.ModuleName))
|
var fieldTypes = node.Fields
|
||||||
{
|
.Select(x => new NubStructFieldType(x.Name, ResolveType(x.Type), x.Value != null))
|
||||||
var fieldTypes = node.Fields
|
.ToList();
|
||||||
.Select(x => new NubStructFieldType(x.Name, ResolveType(x.Type), x.Value != null))
|
|
||||||
.ToList();
|
|
||||||
|
|
||||||
var fieldFunctions = node.Functions
|
var fieldFunctions = node.Functions
|
||||||
.Select(x =>
|
.Select(x =>
|
||||||
{
|
{
|
||||||
var parameters = x.Signature.Parameters.Select(y => ResolveType(y.Type)).ToList();
|
var parameters = x.Signature.Parameters.Select(y => ResolveType(y.Type)).ToList();
|
||||||
var returnType = ResolveType(x.Signature.ReturnType);
|
var returnType = ResolveType(x.Signature.ReturnType);
|
||||||
return new NubStructFuncType(x.Name, x.Hook, parameters, returnType);
|
return new NubStructFuncType(x.Name, x.Hook, parameters, returnType);
|
||||||
})
|
})
|
||||||
.ToList();
|
.ToList();
|
||||||
|
|
||||||
var structType = new NubStructType(CurrentScope.Module, node.Name, fieldTypes, fieldFunctions);
|
var structType = new NubStructType(CurrentScope.Module, node.Name, fieldTypes, fieldFunctions);
|
||||||
|
|
||||||
CurrentScope.DeclareVariable(new Variable("this", structType, VariableKind.RValue));
|
CurrentScope.DeclareVariable(new Variable("this", structType, VariableKind.RValue));
|
||||||
|
|
||||||
var fields = node.Fields.Select(CheckStructField).ToList();
|
var fields = node.Fields.Select(CheckStructField).ToList();
|
||||||
var functions = node.Functions.Select(CheckStructFunc).ToList();
|
var functions = node.Functions.Select(CheckStructFunc).ToList();
|
||||||
|
|
||||||
return new StructNode(CurrentScope.Module, node.Name, fields, functions);
|
return new StructNode(CurrentScope.Module, node.Name, fields, functions);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private StructFuncNode CheckStructFunc(StructFuncSyntax function)
|
private StructFuncNode CheckStructFunc(StructFuncSyntax function)
|
||||||
@@ -157,42 +192,44 @@ public sealed class TypeChecker
|
|||||||
|
|
||||||
private FuncNode CheckFuncDefinition(FuncSyntax node)
|
private FuncNode CheckFuncDefinition(FuncSyntax node)
|
||||||
{
|
{
|
||||||
using (BeginRootScope(_syntaxTree.Metadata.ModuleName))
|
foreach (var parameter in node.Signature.Parameters)
|
||||||
{
|
{
|
||||||
foreach (var parameter in node.Signature.Parameters)
|
CurrentScope.DeclareVariable(new Variable(parameter.Name, ResolveType(parameter.Type), VariableKind.RValue));
|
||||||
{
|
|
||||||
CurrentScope.DeclareVariable(new Variable(parameter.Name, ResolveType(parameter.Type), VariableKind.RValue));
|
|
||||||
}
|
|
||||||
|
|
||||||
var signature = CheckFuncSignature(node.Signature);
|
|
||||||
|
|
||||||
BlockNode? body = null;
|
|
||||||
if (node.Body != null)
|
|
||||||
{
|
|
||||||
_funcReturnTypes.Push(signature.ReturnType);
|
|
||||||
|
|
||||||
body = CheckBlock(node.Body);
|
|
||||||
|
|
||||||
if (!AlwaysReturns(body))
|
|
||||||
{
|
|
||||||
if (signature.ReturnType is NubVoidType)
|
|
||||||
{
|
|
||||||
body.Statements.Add(new ReturnNode(null));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Diagnostics.Add(Diagnostic
|
|
||||||
.Error("Not all code paths return a value")
|
|
||||||
.At(node.Body)
|
|
||||||
.Build());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
_funcReturnTypes.Pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
return new FuncNode(CurrentScope.Module, node.Name, node.ExternSymbol, signature, body);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var signature = CheckFuncSignature(node.Signature);
|
||||||
|
|
||||||
|
BlockNode? body = null;
|
||||||
|
if (node.Body != null)
|
||||||
|
{
|
||||||
|
_funcReturnTypes.Push(signature.ReturnType);
|
||||||
|
|
||||||
|
body = CheckBlock(node.Body);
|
||||||
|
|
||||||
|
if (!AlwaysReturns(body))
|
||||||
|
{
|
||||||
|
if (signature.ReturnType is NubVoidType)
|
||||||
|
{
|
||||||
|
body.Statements.Add(new ReturnNode(null));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Diagnostics.Add(Diagnostic
|
||||||
|
.Error("Not all code paths return a value")
|
||||||
|
.At(node.Body)
|
||||||
|
.Build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_funcReturnTypes.Pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
return new FuncNode(CurrentScope.Module, node.Name, node.ExternSymbol, signature, body);
|
||||||
|
}
|
||||||
|
|
||||||
|
private GlobalVariableNode CheckGlobalVariable(GlobalVariableSyntax node)
|
||||||
|
{
|
||||||
|
return new GlobalVariableNode(CurrentScope.Module, node.Name, CheckExpression(node.Value));
|
||||||
}
|
}
|
||||||
|
|
||||||
private AssignmentNode CheckAssignment(AssignmentSyntax statement)
|
private AssignmentNode CheckAssignment(AssignmentSyntax statement)
|
||||||
@@ -701,6 +738,19 @@ public sealed class TypeChecker
|
|||||||
|
|
||||||
var includePrivate = expression.Module == CurrentScope.Module;
|
var includePrivate = expression.Module == CurrentScope.Module;
|
||||||
|
|
||||||
|
var globalVariable = module.GlobalVariables(includePrivate).FirstOrDefault(x => x.Name == expression.Name);
|
||||||
|
if (globalVariable != null)
|
||||||
|
{
|
||||||
|
// todo(nub31): This should be done in the global scope
|
||||||
|
NubType? type = null;
|
||||||
|
if (globalVariable.ExplicitType != null)
|
||||||
|
{
|
||||||
|
type = ResolveType(globalVariable.ExplicitType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CheckExpression(globalVariable.Value, type);
|
||||||
|
}
|
||||||
|
|
||||||
// First, look for the exported function in the specified module
|
// First, look for the exported function in the specified module
|
||||||
var function = module.Functions(includePrivate).FirstOrDefault(x => x.Name == expression.Name);
|
var function = module.Functions(includePrivate).FirstOrDefault(x => x.Name == expression.Name);
|
||||||
if (function != null)
|
if (function != null)
|
||||||
@@ -733,8 +783,8 @@ public sealed class TypeChecker
|
|||||||
{
|
{
|
||||||
return floatType.Width switch
|
return floatType.Width switch
|
||||||
{
|
{
|
||||||
32 => new Float32LiteralNode(floatType, float.Parse(expression.Value)),
|
32 => new Float32LiteralNode(floatType, float.Parse(expression.Value, CultureInfo.InvariantCulture)),
|
||||||
64 => new Float64LiteralNode(floatType, double.Parse(expression.Value)),
|
64 => new Float64LiteralNode(floatType, double.Parse(expression.Value, CultureInfo.InvariantCulture)),
|
||||||
_ => throw new ArgumentOutOfRangeException()
|
_ => throw new ArgumentOutOfRangeException()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -749,6 +799,30 @@ public sealed class TypeChecker
|
|||||||
? new Float32LiteralNode(type, float.Parse(expression.Value, CultureInfo.InvariantCulture))
|
? new Float32LiteralNode(type, float.Parse(expression.Value, CultureInfo.InvariantCulture))
|
||||||
: new Float64LiteralNode(type, double.Parse(expression.Value, CultureInfo.InvariantCulture));
|
: new Float64LiteralNode(type, double.Parse(expression.Value, CultureInfo.InvariantCulture));
|
||||||
}
|
}
|
||||||
|
case LiteralKind.Hex:
|
||||||
|
{
|
||||||
|
if (expectedType is NubIntType intType)
|
||||||
|
{
|
||||||
|
return intType.Signed
|
||||||
|
? new IntLiteralNode(intType, Convert.ToInt64(expression.Value, 16))
|
||||||
|
: new UIntLiteralNode(intType, Convert.ToUInt64(expression.Value, 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
var type = new NubIntType(true, 64);
|
||||||
|
return new IntLiteralNode(type, Convert.ToInt64(expression.Value, 16));
|
||||||
|
}
|
||||||
|
case LiteralKind.Binary:
|
||||||
|
{
|
||||||
|
if (expectedType is NubIntType intType)
|
||||||
|
{
|
||||||
|
return intType.Signed
|
||||||
|
? new IntLiteralNode(intType, Convert.ToInt64(expression.Value[2..], 2))
|
||||||
|
: new UIntLiteralNode(intType, Convert.ToUInt64(expression.Value[2..], 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
var type = new NubIntType(true, 64);
|
||||||
|
return new IntLiteralNode(type, Convert.ToInt64(expression.Value.Substring(2), 2));
|
||||||
|
}
|
||||||
case LiteralKind.String:
|
case LiteralKind.String:
|
||||||
{
|
{
|
||||||
return expectedType switch
|
return expectedType switch
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ module "main"
|
|||||||
|
|
||||||
extern "main" func main(args: []cstring): i64
|
extern "main" func main(args: []cstring): i64
|
||||||
{
|
{
|
||||||
raylib::SetConfigFlags(raylib::ConfigFlags::VSYNC_HINT)
|
raylib::SetConfigFlags(raylib::FLAG_VSYNC_HINT)
|
||||||
raylib::InitWindow(1600, 900, "Hi from nub-lang")
|
raylib::InitWindow(1600, 900, "Hi from nub-lang")
|
||||||
raylib::SetTargetFPS(240)
|
raylib::SetTargetFPS(240)
|
||||||
|
|
||||||
@@ -45,7 +45,8 @@ extern "main" func main(args: []cstring): i64
|
|||||||
|
|
||||||
raylib::BeginDrawing()
|
raylib::BeginDrawing()
|
||||||
{
|
{
|
||||||
raylib::ClearBackground(bgColor);
|
raylib::ClearBackground(bgColor)
|
||||||
|
raylib::DrawFPS(10, 10)
|
||||||
raylib::DrawRectangle(x, y, width, height, color)
|
raylib::DrawRectangle(x, y, width, height, color)
|
||||||
}
|
}
|
||||||
raylib::EndDrawing()
|
raylib::EndDrawing()
|
||||||
|
|||||||
@@ -1,34 +1,34 @@
|
|||||||
module "raylib"
|
module "raylib"
|
||||||
|
|
||||||
// export let PI = 3.14159265358979323846
|
export let PI = 3.14159265358979323846
|
||||||
|
|
||||||
// export let LIGHTGRAY = struct Color { r = 200, g = 200, b = 200, a = 255 }
|
export let LIGHTGRAY = struct Color { r = 200 g = 200 b = 200 a = 255 }
|
||||||
// export let GRAY = struct Color { r = 130, g = 130, b = 130, a = 255 }
|
export let GRAY = struct Color { r = 130 g = 130 b = 130 a = 255 }
|
||||||
// export let DARKGRAY = struct Color { r = 80, g = 80, b = 80, a = 255 }
|
export let DARKGRAY = struct Color { r = 80 g = 80 b = 80 a = 255 }
|
||||||
// export let YELLOW = struct Color { r = 253, g = 249, b = 0, a = 255 }
|
export let YELLOW = struct Color { r = 253 g = 249 b = 0 a = 255 }
|
||||||
// export let GOLD = struct Color { r = 255, g = 203, b = 0, a = 255 }
|
export let GOLD = struct Color { r = 255 g = 203 b = 0 a = 255 }
|
||||||
// export let ORANGE = struct Color { r = 255, g = 161, b = 0, a = 255 }
|
export let ORANGE = struct Color { r = 255 g = 161 b = 0 a = 255 }
|
||||||
// export let PINK = struct Color { r = 255, g = 109, b = 194, a = 255 }
|
export let PINK = struct Color { r = 255 g = 109 b = 194 a = 255 }
|
||||||
// export let RED = struct Color { r = 230, g = 41, b = 55, a = 255 }
|
export let RED = struct Color { r = 230 g = 41 b = 55 a = 255 }
|
||||||
// export let MAROON = struct Color { r = 190, g = 33, b = 55, a = 255 }
|
export let MAROON = struct Color { r = 190 g = 33 b = 55 a = 255 }
|
||||||
// export let GREEN = struct Color { r = 0, g = 228, b = 48, a = 255 }
|
export let GREEN = struct Color { r = 0 g = 228 b = 48 a = 255 }
|
||||||
// export let LIME = struct Color { r = 0, g = 158, b = 47, a = 255 }
|
export let LIME = struct Color { r = 0 g = 158 b = 47 a = 255 }
|
||||||
// export let DARKGREEN = struct Color { r = 0, g = 117, b = 44, a = 255 }
|
export let DARKGREEN = struct Color { r = 0 g = 117 b = 44 a = 255 }
|
||||||
// export let SKYBLUE = struct Color { r = 102, g = 191, b = 255, a = 255 }
|
export let SKYBLUE = struct Color { r = 102 g = 191 b = 255 a = 255 }
|
||||||
// export let BLUE = struct Color { r = 0, g = 121, b = 241, a = 255 }
|
export let BLUE = struct Color { r = 0 g = 121 b = 241 a = 255 }
|
||||||
// export let DARKBLUE = struct Color { r = 0, g = 82, b = 172, a = 255 }
|
export let DARKBLUE = struct Color { r = 0 g = 82 b = 172 a = 255 }
|
||||||
// export let PURPLE = struct Color { r = 200, g = 122, b = 255, a = 255 }
|
export let PURPLE = struct Color { r = 200 g = 122 b = 255 a = 255 }
|
||||||
// export let VIOLET = struct Color { r = 135, g = 60, b = 190, a = 255 }
|
export let VIOLET = struct Color { r = 135 g = 60 b = 190 a = 255 }
|
||||||
// export let DARKPURPLE = struct Color { r = 112, g = 31, b = 126, a = 255 }
|
export let DARKPURPLE = struct Color { r = 112 g = 31 b = 126 a = 255 }
|
||||||
// export let BEIGE = struct Color { r = 211, g = 176, b = 131, a = 255 }
|
export let BEIGE = struct Color { r = 211 g = 176 b = 131 a = 255 }
|
||||||
// export let BROWN = struct Color { r = 127, g = 106, b = 79, a = 255 }
|
export let BROWN = struct Color { r = 127 g = 106 b = 79 a = 255 }
|
||||||
// export let DARKBROWN = struct Color { r = 76, g = 63, b = 47, a = 255 }
|
export let DARKBROWN = struct Color { r = 76 g = 63 b = 47 a = 255 }
|
||||||
|
|
||||||
// export let WHITE = struct Color { r = 255, g = 255, b = 255, a = 255 }
|
export let WHITE = struct Color { r = 255 g = 255 b = 255 a = 255 }
|
||||||
// export let BLACK = struct Color { r = 0, g = 0, b = 0, a = 255 }
|
export let BLACK = struct Color { r = 0 g = 0 b = 0 a = 255 }
|
||||||
// export let BLANK = struct Color { r = 0, g = 0, b = 0, a = 0 }
|
export let BLANK = struct Color { r = 0 g = 0 b = 0 a = 0 }
|
||||||
// export let MAGENTA = struct Color { r = 255, g = 0, b = 255, a = 255 }
|
export let MAGENTA = struct Color { r = 255 g = 0 b = 255 a = 255 }
|
||||||
// export let RAYWHITE = struct Color { r = 245, g = 245, b = 245, a = 255 }
|
export let RAYWHITE = struct Color { r = 245 g = 245 b = 245 a = 255 }
|
||||||
|
|
||||||
export struct Vector2
|
export struct Vector2
|
||||||
{
|
{
|
||||||
@@ -382,388 +382,326 @@ export struct AutomationEventList
|
|||||||
events: ^AutomationEvent
|
events: ^AutomationEvent
|
||||||
}
|
}
|
||||||
|
|
||||||
// export enum ConfigFlags
|
export let FLAG_VSYNC_HINT: u32 = 0x00000040
|
||||||
// {
|
export let FLAG_FULLSCREEN_MODE: u32 = 0x00000002
|
||||||
// VSYNC_HINT = 0x00000040
|
export let FLAG_WINDOW_RESIZABLE: u32 = 0x00000004
|
||||||
// FULLSCREEN_MODE = 0x00000002
|
export let FLAG_WINDOW_UNDECORATED: u32 = 0x00000008
|
||||||
// WINDOW_RESIZABLE = 0x00000004
|
export let FLAG_WINDOW_HIDDEN: u32 = 0x00000080
|
||||||
// WINDOW_UNDECORATED = 0x00000008
|
export let FLAG_WINDOW_MINIMIZED: u32 = 0x00000200
|
||||||
// WINDOW_HIDDEN = 0x00000080
|
export let FLAG_WINDOW_MAXIMIZED: u32 = 0x00000400
|
||||||
// WINDOW_MINIMIZED = 0x00000200
|
export let FLAG_WINDOW_UNFOCUSED: u32 = 0x00000800
|
||||||
// WINDOW_MAXIMIZED = 0x00000400
|
export let FLAG_WINDOW_TOPMOST: u32 = 0x00001000
|
||||||
// WINDOW_UNFOCUSED = 0x00000800
|
export let FLAG_WINDOW_ALWAYS_RUN: u32 = 0x00000100
|
||||||
// WINDOW_TOPMOST = 0x00001000
|
export let FLAG_WINDOW_TRANSPARENT: u32 = 0x00000010
|
||||||
// WINDOW_ALWAYS_RUN = 0x00000100
|
export let FLAG_WINDOW_HIGHDPI: u32 = 0x00002000
|
||||||
// WINDOW_TRANSPARENT = 0x00000010
|
export let FLAG_WINDOW_MOUSE_PASSTHROUGH: u32 = 0x00004000
|
||||||
// WINDOW_HIGHDPI = 0x00002000
|
export let FLAG_BORDERLESS_WINDOWED_MODE: u32 = 0x00008000
|
||||||
// WINDOW_MOUSE_PASSTHROUGH = 0x00004000
|
export let FLAG_MSAA_4X_HINT: u32 = 0x00000020
|
||||||
// BORDERLESS_WINDOWED_MODE = 0x00008000
|
export let FLAG_INTERLACED_HINT: u32 = 0x00010000
|
||||||
// MSAA_4X_HINT = 0x00000020
|
|
||||||
// INTERLACED_HINT = 0x00010000
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
export let LOG_ALL: i32 = 0
|
||||||
|
export let LOG_TRACE: i32 = 1
|
||||||
|
export let LOG_DEBUG: i32 = 2
|
||||||
|
export let LOG_INFO: i32 = 3
|
||||||
|
export let LOG_WARNING: i32 = 4
|
||||||
|
export let LOG_ERROR: i32 = 5
|
||||||
|
export let LOG_FATAL: i32 = 6
|
||||||
|
export let LOG_NONE: i32 = 7
|
||||||
|
|
||||||
// export enum TraceLogLevel
|
export let KEY_NULL: i32 = 0
|
||||||
// {
|
export let KEY_APOSTROPHE: i32 = 39
|
||||||
// LOG_ALL = 0
|
export let KEY_COMMA: i32 = 44
|
||||||
// LOG_TRACE
|
export let KEY_MINUS: i32 = 45
|
||||||
// LOG_DEBUG
|
export let KEY_PERIOD: i32 = 46
|
||||||
// LOG_INFO
|
export let KEY_SLASH: i32 = 47
|
||||||
// LOG_WARNING
|
export let KEY_ZERO: i32 = 48
|
||||||
// LOG_ERROR
|
export let KEY_ONE: i32 = 49
|
||||||
// LOG_FATAL
|
export let KEY_TWO: i32 = 50
|
||||||
// LOG_NONE
|
export let KEY_THREE: i32 = 51
|
||||||
// }
|
export let KEY_FOUR: i32 = 52
|
||||||
|
export let KEY_FIVE: i32 = 53
|
||||||
|
export let KEY_SIX: i32 = 54
|
||||||
|
export let KEY_SEVEN: i32 = 55
|
||||||
|
export let KEY_EIGHT: i32 = 56
|
||||||
|
export let KEY_NINE: i32 = 57
|
||||||
|
export let KEY_SEMICOLON: i32 = 59
|
||||||
|
export let KEY_EQUAL: i32 = 61
|
||||||
|
export let KEY_A: i32 = 65
|
||||||
|
export let KEY_B: i32 = 66
|
||||||
|
export let KEY_C: i32 = 67
|
||||||
|
export let KEY_D: i32 = 68
|
||||||
|
export let KEY_E: i32 = 69
|
||||||
|
export let KEY_F: i32 = 70
|
||||||
|
export let KEY_G: i32 = 71
|
||||||
|
export let KEY_H: i32 = 72
|
||||||
|
export let KEY_I: i32 = 73
|
||||||
|
export let KEY_J: i32 = 74
|
||||||
|
export let KEY_K: i32 = 75
|
||||||
|
export let KEY_L: i32 = 76
|
||||||
|
export let KEY_M: i32 = 77
|
||||||
|
export let KEY_N: i32 = 78
|
||||||
|
export let KEY_O: i32 = 79
|
||||||
|
export let KEY_P: i32 = 80
|
||||||
|
export let KEY_Q: i32 = 81
|
||||||
|
export let KEY_R: i32 = 82
|
||||||
|
export let KEY_S: i32 = 83
|
||||||
|
export let KEY_T: i32 = 84
|
||||||
|
export let KEY_U: i32 = 85
|
||||||
|
export let KEY_V: i32 = 86
|
||||||
|
export let KEY_W: i32 = 87
|
||||||
|
export let KEY_X: i32 = 88
|
||||||
|
export let KEY_Y: i32 = 89
|
||||||
|
export let KEY_Z: i32 = 90
|
||||||
|
export let KEY_LEFT_BRACKET: i32 = 91
|
||||||
|
export let KEY_BACKSLASH: i32 = 92
|
||||||
|
export let KEY_RIGHT_BRACKET: i32 = 93
|
||||||
|
export let KEY_GRAVE: i32 = 96
|
||||||
|
export let KEY_SPACE: i32 = 32
|
||||||
|
export let KEY_ESCAPE: i32 = 256
|
||||||
|
export let KEY_ENTER: i32 = 257
|
||||||
|
export let KEY_TAB: i32 = 258
|
||||||
|
export let KEY_BACKSPACE: i32 = 259
|
||||||
|
export let KEY_INSERT: i32 = 260
|
||||||
|
export let KEY_DELETE: i32 = 261
|
||||||
|
export let KEY_RIGHT: i32 = 262
|
||||||
|
export let KEY_LEFT: i32 = 263
|
||||||
|
export let KEY_DOWN: i32 = 264
|
||||||
|
export let KEY_UP: i32 = 265
|
||||||
|
export let KEY_PAGE_UP: i32 = 266
|
||||||
|
export let KEY_PAGE_DOWN: i32 = 267
|
||||||
|
export let KEY_HOME: i32 = 268
|
||||||
|
export let KEY_END: i32 = 269
|
||||||
|
export let KEY_CAPS_LOCK: i32 = 280
|
||||||
|
export let KEY_SCROLL_LOCK: i32 = 281
|
||||||
|
export let KEY_NUM_LOCK: i32 = 282
|
||||||
|
export let KEY_PRINT_SCREEN: i32 = 283
|
||||||
|
export let KEY_PAUSE: i32 = 284
|
||||||
|
export let KEY_F1: i32 = 290
|
||||||
|
export let KEY_F2: i32 = 291
|
||||||
|
export let KEY_F3: i32 = 292
|
||||||
|
export let KEY_F4: i32 = 293
|
||||||
|
export let KEY_F5: i32 = 294
|
||||||
|
export let KEY_F6: i32 = 295
|
||||||
|
export let KEY_F7: i32 = 296
|
||||||
|
export let KEY_F8: i32 = 297
|
||||||
|
export let KEY_F9: i32 = 298
|
||||||
|
export let KEY_F10: i32 = 299
|
||||||
|
export let KEY_F11: i32 = 300
|
||||||
|
export let KEY_F12: i32 = 301
|
||||||
|
export let KEY_LEFT_SHIFT: i32 = 340
|
||||||
|
export let KEY_LEFT_CONTROL: i32 = 341
|
||||||
|
export let KEY_LEFT_ALT: i32 = 342
|
||||||
|
export let KEY_LEFT_SUPER: i32 = 343
|
||||||
|
export let KEY_RIGHT_SHIFT: i32 = 344
|
||||||
|
export let KEY_RIGHT_CONTROL: i32 = 345
|
||||||
|
export let KEY_RIGHT_ALT: i32 = 346
|
||||||
|
export let KEY_RIGHT_SUPER: i32 = 347
|
||||||
|
export let KEY_KB_MENU: i32 = 348
|
||||||
|
export let KEY_KP_0: i32 = 320
|
||||||
|
export let KEY_KP_1: i32 = 321
|
||||||
|
export let KEY_KP_2: i32 = 322
|
||||||
|
export let KEY_KP_3: i32 = 323
|
||||||
|
export let KEY_KP_4: i32 = 324
|
||||||
|
export let KEY_KP_5: i32 = 325
|
||||||
|
export let KEY_KP_6: i32 = 326
|
||||||
|
export let KEY_KP_7: i32 = 327
|
||||||
|
export let KEY_KP_8: i32 = 328
|
||||||
|
export let KEY_KP_9: i32 = 329
|
||||||
|
export let KEY_KP_DECIMAL: i32 = 330
|
||||||
|
export let KEY_KP_DIVIDE: i32 = 331
|
||||||
|
export let KEY_KP_MULTIPLY: i32 = 332
|
||||||
|
export let KEY_KP_SUBTRACT: i32 = 333
|
||||||
|
export let KEY_KP_ADD: i32 = 334
|
||||||
|
export let KEY_KP_ENTER: i32 = 335
|
||||||
|
export let KEY_KP_EQUAL: i32 = 336
|
||||||
|
export let KEY_BACK: i32 = 4
|
||||||
|
export let KEY_MENU: i32 = 5
|
||||||
|
export let KEY_VOLUME_UP: i32 = 24
|
||||||
|
export let KEY_VOLUME_DOWN: i32 = 25
|
||||||
|
|
||||||
// export enum KeyboardKey
|
export let MOUSE_BUTTON_LEFT: i32 = 0
|
||||||
// {
|
export let MOUSE_BUTTON_RIGHT: i32 = 1
|
||||||
// NULL = 0
|
export let MOUSE_BUTTON_MIDDLE: i32 = 2
|
||||||
// APOSTROPHE = 39
|
export let MOUSE_BUTTON_SIDE: i32 = 3
|
||||||
// COMMA = 44
|
export let MOUSE_BUTTON_EXTRA: i32 = 4
|
||||||
// MINUS = 45
|
export let MOUSE_BUTTON_FORWARD: i32 = 5
|
||||||
// PERIOD = 46
|
export let MOUSE_BUTTON_BACK: i32 = 6
|
||||||
// SLASH = 47
|
|
||||||
// ZERO = 48
|
|
||||||
// ONE = 49
|
|
||||||
// TWO = 50
|
|
||||||
// THREE = 51
|
|
||||||
// FOUR = 52
|
|
||||||
// FIVE = 53
|
|
||||||
// SIX = 54
|
|
||||||
// SEVEN = 55
|
|
||||||
// EIGHT = 56
|
|
||||||
// NINE = 57
|
|
||||||
// SEMICOLON = 59
|
|
||||||
// EQUAL = 61
|
|
||||||
// A = 65
|
|
||||||
// B = 66
|
|
||||||
// C = 67
|
|
||||||
// D = 68
|
|
||||||
// E = 69
|
|
||||||
// F = 70
|
|
||||||
// G = 71
|
|
||||||
// H = 72
|
|
||||||
// I = 73
|
|
||||||
// J = 74
|
|
||||||
// K = 75
|
|
||||||
// L = 76
|
|
||||||
// M = 77
|
|
||||||
// N = 78
|
|
||||||
// O = 79
|
|
||||||
// P = 80
|
|
||||||
// Q = 81
|
|
||||||
// R = 82
|
|
||||||
// S = 83
|
|
||||||
// T = 84
|
|
||||||
// U = 85
|
|
||||||
// V = 86
|
|
||||||
// W = 87
|
|
||||||
// X = 88
|
|
||||||
// Y = 89
|
|
||||||
// Z = 90
|
|
||||||
// LEFT_BRACKET = 91
|
|
||||||
// BACKSLASH = 92
|
|
||||||
// RIGHT_BRACKET = 93
|
|
||||||
// GRAVE = 96
|
|
||||||
// SPACE = 32
|
|
||||||
// ESCAPE = 256
|
|
||||||
// ENTER = 257
|
|
||||||
// TAB = 258
|
|
||||||
// BACKSPACE = 259
|
|
||||||
// INSERT = 260
|
|
||||||
// DELETE = 261
|
|
||||||
// RIGHT = 262
|
|
||||||
// LEFT = 263
|
|
||||||
// DOWN = 264
|
|
||||||
// UP = 265
|
|
||||||
// PAGE_UP = 266
|
|
||||||
// PAGE_DOWN = 267
|
|
||||||
// HOME = 268
|
|
||||||
// END = 269
|
|
||||||
// CAPS_LOCK = 280
|
|
||||||
// SCROLL_LOCK = 281
|
|
||||||
// NUM_LOCK = 282
|
|
||||||
// PRINT_SCREEN = 283
|
|
||||||
// PAUSE = 284
|
|
||||||
// F1 = 290
|
|
||||||
// F2 = 291
|
|
||||||
// F3 = 292
|
|
||||||
// F4 = 293
|
|
||||||
// F5 = 294
|
|
||||||
// F6 = 295
|
|
||||||
// F7 = 296
|
|
||||||
// F8 = 297
|
|
||||||
// F9 = 298
|
|
||||||
// F10 = 299
|
|
||||||
// F11 = 300
|
|
||||||
// F12 = 301
|
|
||||||
// LEFT_SHIFT = 340
|
|
||||||
// LEFT_CONTROL = 341
|
|
||||||
// LEFT_ALT = 342
|
|
||||||
// LEFT_SUPER = 343
|
|
||||||
// RIGHT_SHIFT = 344
|
|
||||||
// RIGHT_CONTROL = 345
|
|
||||||
// RIGHT_ALT = 346
|
|
||||||
// RIGHT_SUPER = 347
|
|
||||||
// KB_MENU = 348
|
|
||||||
// KP_0 = 320
|
|
||||||
// KP_1 = 321
|
|
||||||
// KP_2 = 322
|
|
||||||
// KP_3 = 323
|
|
||||||
// KP_4 = 324
|
|
||||||
// KP_5 = 325
|
|
||||||
// KP_6 = 326
|
|
||||||
// KP_7 = 327
|
|
||||||
// KP_8 = 328
|
|
||||||
// KP_9 = 329
|
|
||||||
// KP_DECIMAL = 330
|
|
||||||
// KP_DIVIDE = 331
|
|
||||||
// KP_MULTIPLY = 332
|
|
||||||
// KP_SUBTRACT = 333
|
|
||||||
// KP_ADD = 334
|
|
||||||
// KP_ENTER = 335
|
|
||||||
// KP_EQUAL = 336
|
|
||||||
// BACK = 4
|
|
||||||
// MENU = 5
|
|
||||||
// VOLUME_UP = 24
|
|
||||||
// VOLUME_DOWN = 25
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum MouseButton
|
export let MOUSE_CURSOR_DEFAULT: i32 = 0
|
||||||
// {
|
export let MOUSE_CURSOR_ARROW: i32 = 1
|
||||||
// LEFT = 0
|
export let MOUSE_CURSOR_IBEAM: i32 = 2
|
||||||
// RIGHT = 1
|
export let MOUSE_CURSOR_CROSSHAIR: i32 = 3
|
||||||
// MIDDLE = 2
|
export let MOUSE_CURSOR_POINTING_HAND: i32 = 4
|
||||||
// SIDE = 3
|
export let MOUSE_CURSOR_RESIZE_EW: i32 = 5
|
||||||
// EXTRA = 4
|
export let MOUSE_CURSOR_RESIZE_NS: i32 = 6
|
||||||
// FORWARD = 5
|
export let MOUSE_CURSOR_RESIZE_NWSE: i32 = 7
|
||||||
// BACK = 6
|
export let MOUSE_CURSOR_RESIZE_NESW: i32 = 8
|
||||||
// }
|
export let MOUSE_CURSOR_RESIZE_ALL: i32 = 9
|
||||||
|
export let MOUSE_CURSOR_NOT_ALLOWED: i32 = 10
|
||||||
|
|
||||||
// export enum MouseCursor
|
export let GAMEPAD_BUTTON_UNKNOWN: i32 = 0
|
||||||
// {
|
export let GAMEPAD_BUTTON_LEFT_FACE_UP: i32 = 1
|
||||||
// DEFAULT = 0
|
export let GAMEPAD_BUTTON_LEFT_FACE_RIGHT: i32 = 2
|
||||||
// ARROW = 1
|
export let GAMEPAD_BUTTON_LEFT_FACE_DOWN: i32 = 3
|
||||||
// IBEAM = 2
|
export let GAMEPAD_BUTTON_LEFT_FACE_LEFT: i32 = 4
|
||||||
// CROSSHAIR = 3
|
export let GAMEPAD_BUTTON_RIGHT_FACE_UP: i32 = 5
|
||||||
// POINTING_HAND = 4
|
export let GAMEPAD_BUTTON_RIGHT_FACE_RIGHT: i32 = 6
|
||||||
// RESIZE_EW = 5
|
export let GAMEPAD_BUTTON_RIGHT_FACE_DOWN: i32 = 7
|
||||||
// RESIZE_NS = 6
|
export let GAMEPAD_BUTTON_RIGHT_FACE_LEFT: i32 = 8
|
||||||
// RESIZE_NWSE = 7
|
export let GAMEPAD_BUTTON_LEFT_TRIGGER_1: i32 = 9
|
||||||
// RESIZE_NESW = 8
|
export let GAMEPAD_BUTTON_LEFT_TRIGGER_2: i32 = 10
|
||||||
// RESIZE_ALL = 9
|
export let GAMEPAD_BUTTON_RIGHT_TRIGGER_1: i32 = 11
|
||||||
// NOT_ALLOWED = 10
|
export let GAMEPAD_BUTTON_RIGHT_TRIGGER_2: i32 = 12
|
||||||
// }
|
export let GAMEPAD_BUTTON_MIDDLE_LEFT: i32 = 13
|
||||||
|
export let GAMEPAD_BUTTON_MIDDLE: i32 = 14
|
||||||
|
export let GAMEPAD_BUTTON_MIDDLE_RIGHT: i32 = 15
|
||||||
|
export let GAMEPAD_BUTTON_LEFT_THUMB: i32 = 16
|
||||||
|
export let GAMEPAD_BUTTON_RIGHT_THUMB: i32 = 17
|
||||||
|
|
||||||
// export enum GamepadButton
|
export let GAMEPAD_AXIS_LEFT_X: i32 = 0
|
||||||
// {
|
export let GAMEPAD_AXIS_LEFT_Y: i32 = 1
|
||||||
// UNKNOWN = 0
|
export let GAMEPAD_AXIS_RIGHT_X: i32 = 2
|
||||||
// LEFT_FACE_UP
|
export let GAMEPAD_AXIS_RIGHT_Y: i32 = 3
|
||||||
// LEFT_FACE_RIGHT
|
export let GAMEPAD_AXIS_LEFT_TRIGGER: i32 = 4
|
||||||
// LEFT_FACE_DOWN
|
export let GAMEPAD_AXIS_RIGHT_TRIGGER: i32 = 5
|
||||||
// LEFT_FACE_LEFT
|
|
||||||
// RIGHT_FACE_UP
|
|
||||||
// RIGHT_FACE_RIGHT
|
|
||||||
// RIGHT_FACE_DOWN
|
|
||||||
// RIGHT_FACE_LEFT
|
|
||||||
// LEFT_TRIGGER_1
|
|
||||||
// LEFT_TRIGGER_2
|
|
||||||
// RIGHT_TRIGGER_1
|
|
||||||
// RIGHT_TRIGGER_2
|
|
||||||
// MIDDLE_LEFT
|
|
||||||
// MIDDLE
|
|
||||||
// MIDDLE_RIGHT
|
|
||||||
// LEFT_THUMB
|
|
||||||
// RIGHT_THUMB
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum GamepadAxis
|
export let MATERIAL_MAP_ALBEDO: i32 = 0
|
||||||
// {
|
export let MATERIAL_MAP_METALNESS: i32 = 1
|
||||||
// LEFT_X = 0
|
export let MATERIAL_MAP_NORMAL: i32 = 2
|
||||||
// LEFT_Y = 1
|
export let MATERIAL_MAP_ROUGHNESS: i32 = 3
|
||||||
// RIGHT_X = 2
|
export let MATERIAL_MAP_OCCLUSION: i32 = 4
|
||||||
// RIGHT_Y = 3
|
export let MATERIAL_MAP_EMISSION: i32 = 5
|
||||||
// LEFT_TRIGGER = 4
|
export let MATERIAL_MAP_HEIGHT: i32 = 6
|
||||||
// RIGHT_TRIGGER = 5
|
export let MATERIAL_MAP_CUBEMAP: i32 = 7
|
||||||
// }
|
export let MATERIAL_MAP_IRRADIANCE: i32 = 8
|
||||||
|
export let MATERIAL_MAP_PREFILTER: i32 = 9
|
||||||
|
export let MATERIAL_MAP_BRDF: i32 = 10
|
||||||
|
|
||||||
// export enum MaterialMapIndex
|
export let SHADER_LOC_VERTEX_POSITION: i32 = 0
|
||||||
// {
|
export let SHADER_LOC_VERTEX_TEXCOORD01: i32 = 1
|
||||||
// ALBEDO = 0
|
export let SHADER_LOC_VERTEX_TEXCOORD02: i32 = 2
|
||||||
// METALNESS
|
export let SHADER_LOC_VERTEX_NORMAL: i32 = 3
|
||||||
// NORMAL
|
export let SHADER_LOC_VERTEX_TANGENT: i32 = 4
|
||||||
// ROUGHNESS
|
export let SHADER_LOC_VERTEX_COLOR: i32 = 5
|
||||||
// OCCLUSION
|
export let SHADER_LOC_MATRIX_MVP: i32 = 6
|
||||||
// EMISSION
|
export let SHADER_LOC_MATRIX_VIEW: i32 = 7
|
||||||
// HEIGHT
|
export let SHADER_LOC_MATRIX_PROJECTION: i32 = 8
|
||||||
// CUBEMAP
|
export let SHADER_LOC_MATRIX_MODEL: i32 = 9
|
||||||
// IRRADIANCE
|
export let SHADER_LOC_MATRIX_NORMAL: i32 = 10
|
||||||
// PREFILTER
|
export let SHADER_LOC_VECTOR_VIEW: i32 = 11
|
||||||
// BRDF
|
export let SHADER_LOC_COLOR_DIFFUSE: i32 = 12
|
||||||
// }
|
export let SHADER_LOC_COLOR_SPECULAR: i32 = 13
|
||||||
|
export let SHADER_LOC_COLOR_AMBIENT: i32 = 14
|
||||||
|
export let SHADER_LOC_MAP_ALBEDO: i32 = 15
|
||||||
|
export let SHADER_LOC_MAP_METALNESS: i32 = 16
|
||||||
|
export let SHADER_LOC_MAP_NORMAL: i32 = 17
|
||||||
|
export let SHADER_LOC_MAP_ROUGHNESS: i32 = 18
|
||||||
|
export let SHADER_LOC_MAP_OCCLUSION: i32 = 19
|
||||||
|
export let SHADER_LOC_MAP_EMISSION: i32 = 20
|
||||||
|
export let SHADER_LOC_MAP_HEIGHT: i32 = 21
|
||||||
|
export let SHADER_LOC_MAP_CUBEMAP: i32 = 22
|
||||||
|
export let SHADER_LOC_MAP_IRRADIANCE: i32 = 23
|
||||||
|
export let SHADER_LOC_MAP_PREFILTER: i32 = 24
|
||||||
|
export let SHADER_LOC_MAP_BRDF: i32 = 25
|
||||||
|
export let SHADER_LOC_VERTEX_BONEIDS: i32 = 26
|
||||||
|
export let SHADER_LOC_VERTEX_BONEWEIGHTS: i32 = 27
|
||||||
|
export let SHADER_LOC_BONE_MATRICES: i32 = 28
|
||||||
|
|
||||||
// export enum ShaderLocationIndex
|
export let SHADER_UNIFORM_FLOAT: i32 = 0
|
||||||
// {
|
export let SHADER_UNIFORM_VEC2: i32 = 1
|
||||||
// VERTEX_POSITION = 0
|
export let SHADER_UNIFORM_VEC3: i32 = 2
|
||||||
// VERTEX_TEXCOORD01
|
export let SHADER_UNIFORM_VEC4: i32 = 3
|
||||||
// VERTEX_TEXCOORD02
|
export let SHADER_UNIFORM_INT: i32 = 4
|
||||||
// VERTEX_NORMAL
|
export let SHADER_UNIFORM_IVEC2: i32 = 5
|
||||||
// VERTEX_TANGENT
|
export let SHADER_UNIFORM_IVEC3: i32 = 6
|
||||||
// VERTEX_COLOR
|
export let SHADER_UNIFORM_IVEC4: i32 = 7
|
||||||
// MATRIX_MVP
|
export let SHADER_UNIFORM_SAMPLER2D: i32 = 8
|
||||||
// MATRIX_VIEW
|
|
||||||
// MATRIX_PROJECTION
|
|
||||||
// MATRIX_MODEL
|
|
||||||
// MATRIX_NORMAL
|
|
||||||
// VECTOR_VIEW
|
|
||||||
// COLOR_DIFFUSE
|
|
||||||
// COLOR_SPECULAR
|
|
||||||
// COLOR_AMBIENT
|
|
||||||
// MAP_ALBEDO
|
|
||||||
// MAP_METALNESS
|
|
||||||
// MAP_NORMAL
|
|
||||||
// MAP_ROUGHNESS
|
|
||||||
// MAP_OCCLUSION
|
|
||||||
// MAP_EMISSION
|
|
||||||
// MAP_HEIGHT
|
|
||||||
// MAP_CUBEMAP
|
|
||||||
// MAP_IRRADIANCE
|
|
||||||
// MAP_PREFILTER
|
|
||||||
// MAP_BRDF
|
|
||||||
// VERTEX_BONEIDS
|
|
||||||
// VERTEX_BONEWEIGHTS
|
|
||||||
// BONE_MATRICES
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum ShaderUniformDataType {
|
export let SHADER_ATTRIB_FLOAT: i32 = 0
|
||||||
// FLOAT = 0
|
export let SHADER_ATTRIB_VEC2: i32 = 1
|
||||||
// VEC2
|
export let SHADER_ATTRIB_VEC3: i32 = 2
|
||||||
// VEC3
|
export let SHADER_ATTRIB_VEC4: i32 = 3
|
||||||
// VEC4
|
|
||||||
// INT
|
|
||||||
// IVEC2
|
|
||||||
// IVEC3
|
|
||||||
// IVEC4
|
|
||||||
// SAMPLER2D
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum ShaderAttributeDataType {
|
export let PIXELFORMAT_UNCOMPRESSED_GRAYSCALE: i32 = 1
|
||||||
// FLOAT = 0
|
export let PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA: i32 = 2
|
||||||
// VEC2
|
export let PIXELFORMAT_UNCOMPRESSED_R5G6B5: i32 = 3
|
||||||
// VEC3
|
export let PIXELFORMAT_UNCOMPRESSED_R8G8B8: i32 = 4
|
||||||
// VEC4
|
export let PIXELFORMAT_UNCOMPRESSED_R5G5B5A1: i32 = 5
|
||||||
// }
|
export let PIXELFORMAT_UNCOMPRESSED_R4G4B4A4: i32 = 6
|
||||||
|
export let PIXELFORMAT_UNCOMPRESSED_R8G8B8A8: i32 = 7
|
||||||
|
export let PIXELFORMAT_UNCOMPRESSED_R32: i32 = 8
|
||||||
|
export let PIXELFORMAT_UNCOMPRESSED_R32G32B32: i32 = 9
|
||||||
|
export let PIXELFORMAT_UNCOMPRESSED_R32G32B32A32: i32 = 10
|
||||||
|
export let PIXELFORMAT_UNCOMPRESSED_R16: i32 = 11
|
||||||
|
export let PIXELFORMAT_UNCOMPRESSED_R16G16B16: i32 = 12
|
||||||
|
export let PIXELFORMAT_UNCOMPRESSED_R16G16B16A16: i32 = 13
|
||||||
|
export let PIXELFORMAT_COMPRESSED_DXT1_RGB: i32 = 14
|
||||||
|
export let PIXELFORMAT_COMPRESSED_DXT1_RGBA: i32 = 15
|
||||||
|
export let PIXELFORMAT_COMPRESSED_DXT3_RGBA: i32 = 16
|
||||||
|
export let PIXELFORMAT_COMPRESSED_DXT5_RGBA: i32 = 17
|
||||||
|
export let PIXELFORMAT_COMPRESSED_ETC1_RGB: i32 = 18
|
||||||
|
export let PIXELFORMAT_COMPRESSED_ETC2_RGB: i32 = 19
|
||||||
|
export let PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA: i32 = 20
|
||||||
|
export let PIXELFORMAT_COMPRESSED_PVRT_RGB: i32 = 21
|
||||||
|
export let PIXELFORMAT_COMPRESSED_PVRT_RGBA: i32 = 22
|
||||||
|
export let PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA: i32 = 23
|
||||||
|
export let PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA: i32 = 24
|
||||||
|
|
||||||
// export enum PixelFormat
|
export let TEXTURE_FILTER_POINT: i32 = 0
|
||||||
// {
|
export let TEXTURE_FILTER_BILINEAR: i32 = 1
|
||||||
// UNCOMPRESSED_GRAYSCALE = 1
|
export let TEXTURE_FILTER_TRILINEAR: i32 = 2
|
||||||
// UNCOMPRESSED_GRAY_ALPHA
|
export let TEXTURE_FILTER_ANISOTROPIC_4X: i32 = 3
|
||||||
// UNCOMPRESSED_R5G6B5
|
export let TEXTURE_FILTER_ANISOTROPIC_8X: i32 = 4
|
||||||
// UNCOMPRESSED_R8G8B8
|
export let TEXTURE_FILTER_ANISOTROPIC_16X: i32 = 5
|
||||||
// UNCOMPRESSED_R5G5B5A1
|
|
||||||
// UNCOMPRESSED_R4G4B4A4
|
|
||||||
// UNCOMPRESSED_R8G8B8A8
|
|
||||||
// UNCOMPRESSED_R32
|
|
||||||
// UNCOMPRESSED_R32G32B32
|
|
||||||
// UNCOMPRESSED_R32G32B32A32
|
|
||||||
// UNCOMPRESSED_R16
|
|
||||||
// UNCOMPRESSED_R16G16B16
|
|
||||||
// UNCOMPRESSED_R16G16B16A16
|
|
||||||
// COMPRESSED_DXT1_RGB
|
|
||||||
// COMPRESSED_DXT1_RGBA
|
|
||||||
// COMPRESSED_DXT3_RGBA
|
|
||||||
// COMPRESSED_DXT5_RGBA
|
|
||||||
// COMPRESSED_ETC1_RGB
|
|
||||||
// COMPRESSED_ETC2_RGB
|
|
||||||
// COMPRESSED_ETC2_EAC_RGBA
|
|
||||||
// COMPRESSED_PVRT_RGB
|
|
||||||
// COMPRESSED_PVRT_RGBA
|
|
||||||
// COMPRESSED_ASTC_4x4_RGBA
|
|
||||||
// COMPRESSED_ASTC_8x8_RGBA
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum TextureFilter
|
export let TEXTURE_WRAP_REPEAT: i32 = 0
|
||||||
// {
|
export let TEXTURE_WRAP_CLAMP: i32 = 1
|
||||||
// POINT = 0
|
export let TEXTURE_WRAP_MIRROR_REPEAT: i32 = 2
|
||||||
// BILINEAR
|
export let TEXTURE_WRAP_MIRROR_CLAMP: i32 = 3
|
||||||
// TRILINEAR
|
|
||||||
// ANISOTROPIC_4X
|
|
||||||
// ANISOTROPIC_8X
|
|
||||||
// ANISOTROPIC_16X
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum TextureWrap
|
export let CUBEMAP_LAYOUT_AUTO_DETECT: i32 = 0
|
||||||
// {
|
export let CUBEMAP_LAYOUT_LINE_VERTICAL: i32 = 1
|
||||||
// REPEAT = 0
|
export let CUBEMAP_LAYOUT_LINE_HORIZONTAL: i32 = 2
|
||||||
// CLAMP
|
export let CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR: i32 = 3
|
||||||
// MIRROR_REPEAT
|
export let CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE: i32 = 4
|
||||||
// MIRROR_CLAMP
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum CubemapLayout
|
export let FONT_DEFAULT: i32 = 0
|
||||||
// {
|
export let FONT_BITMAP: i32 = 1
|
||||||
// AUTO_DETECT = 0
|
export let FONT_SDF: i32 = 2
|
||||||
// LINE_VERTICAL
|
|
||||||
// LINE_HORIZONTAL
|
|
||||||
// CROSS_THREE_BY_FOUR
|
|
||||||
// CROSS_FOUR_BY_THREE
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum FontType
|
export let BLEND_ALPHA: i32 = 0
|
||||||
// {
|
export let BLEND_ADDITIVE: i32 = 1
|
||||||
// FONT_DEFAULT = 0
|
export let BLEND_MULTIPLIED: i32 = 2
|
||||||
// FONT_BITMAP
|
export let BLEND_ADD_COLORS: i32 = 3
|
||||||
// FONT_SDF
|
export let BLEND_SUBTRACT_COLORS: i32 = 4
|
||||||
// }
|
export let BLEND_ALPHA_PREMULTIPLY: i32 = 5
|
||||||
|
export let BLEND_CUSTOM: i32 = 6
|
||||||
|
export let BLEND_CUSTOM_SEPARATE: i32 = 7
|
||||||
|
|
||||||
// export enum BlendMode
|
export let GESTURE_NONE: i32 = 0
|
||||||
// {
|
export let GESTURE_TAP: i32 = 1
|
||||||
// BLEND_ALPHA = 0,
|
export let GESTURE_DOUBLETAP: i32 = 2
|
||||||
// BLEND_ADDITIVE,
|
export let GESTURE_HOLD: i32 = 4
|
||||||
// BLEND_MULTIPLIED,
|
export let GESTURE_DRAG: i32 = 8
|
||||||
// BLEND_ADD_COLORS,
|
export let GESTURE_SWIPE_RIGHT: i32 = 16
|
||||||
// BLEND_SUBTRACT_COLORS,
|
export let GESTURE_SWIPE_LEFT: i32 = 32
|
||||||
// BLEND_ALPHA_PREMULTIPLY,
|
export let GESTURE_SWIPE_UP: i32 = 64
|
||||||
// BLEND_CUSTOM,
|
export let GESTURE_SWIPE_DOWN: i32 = 128
|
||||||
// BLEND_CUSTOM_SEPARATE
|
export let GESTURE_PINCH_IN: i32 = 256
|
||||||
// }
|
export let GESTURE_PINCH_OUT: i32 = 512
|
||||||
|
|
||||||
// export enum Gesture
|
export let CAMERA_CUSTOM: i32 = 0
|
||||||
// {
|
export let CAMERA_FREE: i32 = 1
|
||||||
// GESTURE_NONE = 0
|
export let CAMERA_ORBITAL: i32 = 2
|
||||||
// GESTURE_TAP = 1
|
export let CAMERA_FIRST_PERSON: i32 = 3
|
||||||
// GESTURE_DOUBLETAP = 2
|
export let CAMERA_THIRD_PERSON: i32 = 4
|
||||||
// GESTURE_HOLD = 4
|
|
||||||
// GESTURE_DRAG = 8
|
|
||||||
// GESTURE_SWIPE_RIGHT = 16
|
|
||||||
// GESTURE_SWIPE_LEFT = 32
|
|
||||||
// GESTURE_SWIPE_UP = 64
|
|
||||||
// GESTURE_SWIPE_DOWN = 128
|
|
||||||
// GESTURE_PINCH_IN = 256
|
|
||||||
// GESTURE_PINCH_OUT = 512
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum CameraMode
|
export let CAMERA_PERSPECTIVE = 0
|
||||||
// {
|
export let CAMERA_ORTHOGRAPHIC = 1
|
||||||
// CAMERA_CUSTOM = 0
|
|
||||||
// CAMERA_FREE
|
|
||||||
// CAMERA_ORBITAL
|
|
||||||
// CAMERA_FIRST_PERSON
|
|
||||||
// CAMERA_THIRD_PERSON
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum CameraProjection
|
export let NPATCH_NINE_PATCH = 0
|
||||||
// {
|
export let NPATCH_THREE_PATCH_VERTICAL = 1
|
||||||
// CAMERA_PERSPECTIVE = 0
|
export let NPATCH_THREE_PATCH_HORIZONTAL = 2
|
||||||
// CAMERA_ORTHOGRAPHIC
|
|
||||||
// }
|
|
||||||
|
|
||||||
// export enum NPatchLayout
|
|
||||||
// {
|
|
||||||
// NPATCH_NINE_PATCH = 0
|
|
||||||
// NPATCH_THREE_PATCH_VERTICAL
|
|
||||||
// NPATCH_THREE_PATCH_HORIZONTAL
|
|
||||||
// }
|
|
||||||
|
|
||||||
export extern "InitWindow" func InitWindow(width: i32, height: i32, title: cstring)
|
export extern "InitWindow" func InitWindow(width: i32, height: i32, title: cstring)
|
||||||
export extern "CloseWindow" func CloseWindow()
|
export extern "CloseWindow" func CloseWindow()
|
||||||
|
|||||||
Reference in New Issue
Block a user