mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Merge branch 'master' of github.com:odin-lang/Odin
This commit is contained in:
@@ -0,0 +1,64 @@
|
|||||||
|
# The Proposal Process
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
The Odin project's development process is driven by design and pragmatism. Significant changes to the language, libraries, or tools _must_ be first discussed, and maybe formally documented, before they can be implemented.
|
||||||
|
|
||||||
|
This document describes the process for proposing, documenting, and implementing changes to the Odin project.
|
||||||
|
|
||||||
|
## The Proposal Process
|
||||||
|
|
||||||
|
The proposal process is the process for reviewing a proposal and reaching a decision about whether to accept or decline the proposal.
|
||||||
|
|
||||||
|
1. [Ginger Bill](https://github.com/gingerBill) is [BDFL](https://wikipedia.org/wiki/Benevolent_dictator_for_life) and significant changes _must_ be passed by him.
|
||||||
|
|
||||||
|
2. The proposal author creates a brief issue describing the proposal.
|
||||||
|
|
||||||
|
Note: There is no need for a design document at this point.<br>
|
||||||
|
Note: A non-proposal issue can be turned into a proposal by simply adding the _proposal_ label.
|
||||||
|
|
||||||
|
3. A discussion on the issue tracker will classify the proposal into one of three outcomes:
|
||||||
|
* Accept proposal
|
||||||
|
* Decline proposal
|
||||||
|
* Ask for a design document.
|
||||||
|
|
||||||
|
If the proposal is accepted or declined, the process is done. Otherwise the discussion around the process is expected to identify issues that ought to be addressed in a more detailed design.
|
||||||
|
|
||||||
|
4. The proposal author writes a design document to work out details of the proposed design and address the concerns raised in the initial discussion.
|
||||||
|
|
||||||
|
5. Once comments and revisions on the design document calm, there is a final discussion on the issue, to reach one of two outcomes:
|
||||||
|
* Accept proposal
|
||||||
|
* Decline proposal
|
||||||
|
|
||||||
|
After the proposal is accepted or declined, implementation of the proprosal proceeds in the same way as any other contribution to the project.
|
||||||
|
|
||||||
|
## Design Documents
|
||||||
|
|
||||||
|
The design document should follow this template:
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
|
# Proposal: [Title]
|
||||||
|
|
||||||
|
Author(s): [Author Name, Co-Author Name]
|
||||||
|
Last updated: [Date ISO-8601]
|
||||||
|
Discussion at https://github.com/odin-lang/Odin/issues/######
|
||||||
|
|
||||||
|
## Abstract
|
||||||
|
|
||||||
|
## Background
|
||||||
|
|
||||||
|
## Proposal
|
||||||
|
|
||||||
|
## Rationale
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
|
||||||
|
## Implementation
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Help
|
||||||
|
|
||||||
|
If you need help with this process, please contact an Odin contributor by posting an issue to the [issue tracker](https://github.com/odin-lang/Odin/issues).
|
||||||
+14
-2
@@ -759,6 +759,8 @@ void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *named_type, Ast
|
|||||||
ExactValue iota = exact_value_i64(-1);
|
ExactValue iota = exact_value_i64(-1);
|
||||||
ExactValue min_value = exact_value_i64(0);
|
ExactValue min_value = exact_value_i64(0);
|
||||||
ExactValue max_value = exact_value_i64(0);
|
ExactValue max_value = exact_value_i64(0);
|
||||||
|
bool min_value_set = false;
|
||||||
|
bool max_value_set = false;
|
||||||
|
|
||||||
scope_reserve(ctx->scope, et->fields.count);
|
scope_reserve(ctx->scope, et->fields.count);
|
||||||
|
|
||||||
@@ -810,11 +812,21 @@ void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *named_type, Ast
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (compare_exact_values(Token_Gt, min_value, iota)) {
|
if (min_value_set) {
|
||||||
|
if (compare_exact_values(Token_Gt, min_value, iota)) {
|
||||||
|
min_value = iota;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
min_value = iota;
|
min_value = iota;
|
||||||
|
min_value_set = true;
|
||||||
}
|
}
|
||||||
if (compare_exact_values(Token_Lt, max_value, iota)) {
|
if (max_value_set) {
|
||||||
|
if (compare_exact_values(Token_Lt, max_value, iota)) {
|
||||||
|
max_value = iota;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
max_value = iota;
|
max_value = iota;
|
||||||
|
max_value_set = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Entity *e = alloc_entity_constant(ctx->scope, ident->Ident.token, constant_type, iota);
|
Entity *e = alloc_entity_constant(ctx->scope, ident->Ident.token, constant_type, iota);
|
||||||
|
|||||||
+10
-4
@@ -203,16 +203,22 @@ u64 u64_from_string(String string) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gb_global char const global_num_to_char_table[] =
|
||||||
|
"0123456789"
|
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
"abcdefghijklmnopqrstuvwxyz"
|
||||||
|
"@$";
|
||||||
|
|
||||||
String u64_to_string(u64 v, char *out_buf, isize out_buf_len) {
|
String u64_to_string(u64 v, char *out_buf, isize out_buf_len) {
|
||||||
char buf[32] = {0};
|
char buf[32] = {0};
|
||||||
isize i = gb_size_of(buf);
|
isize i = gb_size_of(buf);
|
||||||
|
|
||||||
u64 b = 10;
|
u64 b = 10;
|
||||||
while (v >= b) {
|
while (v >= b) {
|
||||||
buf[--i] = gb__num_to_char_table[v%b];
|
buf[--i] = global_num_to_char_table[v%b];
|
||||||
v /= b;
|
v /= b;
|
||||||
}
|
}
|
||||||
buf[--i] = gb__num_to_char_table[v%b];
|
buf[--i] = global_num_to_char_table[v%b];
|
||||||
|
|
||||||
isize len = gb_min(gb_size_of(buf)-i, out_buf_len);
|
isize len = gb_min(gb_size_of(buf)-i, out_buf_len);
|
||||||
gb_memmove(out_buf, &buf[i], len);
|
gb_memmove(out_buf, &buf[i], len);
|
||||||
@@ -230,10 +236,10 @@ String i64_to_string(i64 a, char *out_buf, isize out_buf_len) {
|
|||||||
u64 v = cast(u64)a;
|
u64 v = cast(u64)a;
|
||||||
u64 b = 10;
|
u64 b = 10;
|
||||||
while (v >= b) {
|
while (v >= b) {
|
||||||
buf[--i] = gb__num_to_char_table[v%b];
|
buf[--i] = global_num_to_char_table[v%b];
|
||||||
v /= b;
|
v /= b;
|
||||||
}
|
}
|
||||||
buf[--i] = gb__num_to_char_table[v%b];
|
buf[--i] = global_num_to_char_table[v%b];
|
||||||
|
|
||||||
if (negative) {
|
if (negative) {
|
||||||
buf[--i] = '-';
|
buf[--i] = '-';
|
||||||
|
|||||||
@@ -1223,7 +1223,6 @@ void fix_advance_to_next_stmt(AstFile *f) {
|
|||||||
case Token_return:
|
case Token_return:
|
||||||
case Token_switch:
|
case Token_switch:
|
||||||
case Token_defer:
|
case Token_defer:
|
||||||
case Token_asm:
|
|
||||||
case Token_using:
|
case Token_using:
|
||||||
|
|
||||||
case Token_break:
|
case Token_break:
|
||||||
|
|||||||
@@ -122,9 +122,6 @@ TOKEN_KIND(Token__KeywordBegin, ""), \
|
|||||||
TOKEN_KIND(Token_type_of, "type_of"), \
|
TOKEN_KIND(Token_type_of, "type_of"), \
|
||||||
TOKEN_KIND(Token_macro, "macro"), \
|
TOKEN_KIND(Token_macro, "macro"), \
|
||||||
TOKEN_KIND(Token_const, "const"), \
|
TOKEN_KIND(Token_const, "const"), \
|
||||||
TOKEN_KIND(Token_asm, "asm"), \
|
|
||||||
TOKEN_KIND(Token_yield, "yield"), \
|
|
||||||
TOKEN_KIND(Token_await, "await"), \
|
|
||||||
TOKEN_KIND(Token__KeywordEnd, ""), \
|
TOKEN_KIND(Token__KeywordEnd, ""), \
|
||||||
TOKEN_KIND(Token_Count, "")
|
TOKEN_KIND(Token_Count, "")
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
#pragma warning(disable: 4245)
|
#pragma warning(disable: 4245)
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
// #include "utf8proc/utf8proc.h"
|
#include "utf8proc/utf8proc.h"
|
||||||
#include "utf8proc/utf8proc.c"
|
#include "utf8proc/utf8proc.c"
|
||||||
}
|
}
|
||||||
#pragma warning(pop)
|
#pragma warning(pop)
|
||||||
|
|||||||
@@ -383,7 +383,7 @@ UTF8PROC_DLLEXPORT int utf8proc_charwidth(utf8proc_int32_t c) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
UTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t c) {
|
UTF8PROC_DLLEXPORT utf8proc_category_t utf8proc_category(utf8proc_int32_t c) {
|
||||||
return cast(utf8proc_category_t)utf8proc_get_property(c)->category;
|
return (utf8proc_category_t)utf8proc_get_property(c)->category;
|
||||||
}
|
}
|
||||||
|
|
||||||
UTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t c) {
|
UTF8PROC_DLLEXPORT const char *utf8proc_category_string(utf8proc_int32_t c) {
|
||||||
@@ -401,7 +401,7 @@ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char(utf8proc_int32_t uc,
|
|||||||
utf8proc_int32_t hangul_sindex;
|
utf8proc_int32_t hangul_sindex;
|
||||||
if (uc < 0 || uc >= 0x110000) return UTF8PROC_ERROR_NOTASSIGNED;
|
if (uc < 0 || uc >= 0x110000) return UTF8PROC_ERROR_NOTASSIGNED;
|
||||||
property = unsafe_get_property(uc);
|
property = unsafe_get_property(uc);
|
||||||
category = cast(utf8proc_category_t)property->category;
|
category = (utf8proc_category_t)property->category;
|
||||||
hangul_sindex = uc - UTF8PROC_HANGUL_SBASE;
|
hangul_sindex = uc - UTF8PROC_HANGUL_SBASE;
|
||||||
if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {
|
if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {
|
||||||
if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT) {
|
if (hangul_sindex >= 0 && hangul_sindex < UTF8PROC_HANGUL_SCOUNT) {
|
||||||
@@ -728,24 +728,24 @@ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_map_custom(
|
|||||||
|
|
||||||
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str) {
|
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFD(const utf8proc_uint8_t *str) {
|
||||||
utf8proc_uint8_t *retval;
|
utf8proc_uint8_t *retval;
|
||||||
utf8proc_map(str, 0, &retval, cast(utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_DECOMPOSE));
|
utf8proc_map(str, 0, &retval, (utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_DECOMPOSE));
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str) {
|
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str) {
|
||||||
utf8proc_uint8_t *retval;
|
utf8proc_uint8_t *retval;
|
||||||
utf8proc_map(str, 0, &retval, cast(utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_COMPOSE));
|
utf8proc_map(str, 0, &retval, (utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_COMPOSE));
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str) {
|
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str) {
|
||||||
utf8proc_uint8_t *retval;
|
utf8proc_uint8_t *retval;
|
||||||
utf8proc_map(str, 0, &retval, cast(utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_DECOMPOSE|UTF8PROC_COMPAT));
|
utf8proc_map(str, 0, &retval, (utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_DECOMPOSE|UTF8PROC_COMPAT));
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str) {
|
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str) {
|
||||||
utf8proc_uint8_t *retval;
|
utf8proc_uint8_t *retval;
|
||||||
utf8proc_map(str, 0, &retval, cast(utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_COMPOSE|UTF8PROC_COMPAT));
|
utf8proc_map(str, 0, &retval, (utf8proc_option_t)(UTF8PROC_NULLTERM|UTF8PROC_STABLE|UTF8PROC_COMPOSE|UTF8PROC_COMPAT));
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user