mirror of
https://github.com/odin-lang/Odin.git
synced 2026-01-05 04:27:51 +00:00
Merge branch 'master' of github.com:odin-lang/Odin
This commit is contained in:
64
PROPOSAL-PROCESS.md
Normal file
64
PROPOSAL-PROCESS.md
Normal file
@@ -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).
|
||||
@@ -759,6 +759,8 @@ void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *named_type, Ast
|
||||
ExactValue iota = exact_value_i64(-1);
|
||||
ExactValue min_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);
|
||||
|
||||
@@ -810,11 +812,21 @@ void check_enum_type(CheckerContext *ctx, Type *enum_type, Type *named_type, Ast
|
||||
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_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_set = true;
|
||||
}
|
||||
|
||||
Entity *e = alloc_entity_constant(ctx->scope, ident->Ident.token, constant_type, iota);
|
||||
|
||||
@@ -203,16 +203,22 @@ u64 u64_from_string(String string) {
|
||||
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) {
|
||||
char buf[32] = {0};
|
||||
isize i = gb_size_of(buf);
|
||||
|
||||
u64 b = 10;
|
||||
while (v >= b) {
|
||||
buf[--i] = gb__num_to_char_table[v%b];
|
||||
buf[--i] = global_num_to_char_table[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);
|
||||
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 b = 10;
|
||||
while (v >= b) {
|
||||
buf[--i] = gb__num_to_char_table[v%b];
|
||||
buf[--i] = global_num_to_char_table[v%b];
|
||||
v /= b;
|
||||
}
|
||||
buf[--i] = gb__num_to_char_table[v%b];
|
||||
buf[--i] = global_num_to_char_table[v%b];
|
||||
|
||||
if (negative) {
|
||||
buf[--i] = '-';
|
||||
|
||||
@@ -1223,7 +1223,6 @@ void fix_advance_to_next_stmt(AstFile *f) {
|
||||
case Token_return:
|
||||
case Token_switch:
|
||||
case Token_defer:
|
||||
case Token_asm:
|
||||
case Token_using:
|
||||
|
||||
case Token_break:
|
||||
|
||||
@@ -122,9 +122,6 @@ TOKEN_KIND(Token__KeywordBegin, ""), \
|
||||
TOKEN_KIND(Token_type_of, "type_of"), \
|
||||
TOKEN_KIND(Token_macro, "macro"), \
|
||||
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_Count, "")
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#pragma warning(disable: 4245)
|
||||
|
||||
extern "C" {
|
||||
// #include "utf8proc/utf8proc.h"
|
||||
#include "utf8proc/utf8proc.h"
|
||||
#include "utf8proc/utf8proc.c"
|
||||
}
|
||||
#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) {
|
||||
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) {
|
||||
@@ -401,7 +401,7 @@ UTF8PROC_DLLEXPORT utf8proc_ssize_t utf8proc_decompose_char(utf8proc_int32_t uc,
|
||||
utf8proc_int32_t hangul_sindex;
|
||||
if (uc < 0 || uc >= 0x110000) return UTF8PROC_ERROR_NOTASSIGNED;
|
||||
property = unsafe_get_property(uc);
|
||||
category = cast(utf8proc_category_t)property->category;
|
||||
category = (utf8proc_category_t)property->category;
|
||||
hangul_sindex = uc - UTF8PROC_HANGUL_SBASE;
|
||||
if (options & (UTF8PROC_COMPOSE|UTF8PROC_DECOMPOSE)) {
|
||||
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_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;
|
||||
}
|
||||
|
||||
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFC(const utf8proc_uint8_t *str) {
|
||||
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;
|
||||
}
|
||||
|
||||
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKD(const utf8proc_uint8_t *str) {
|
||||
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;
|
||||
}
|
||||
|
||||
UTF8PROC_DLLEXPORT utf8proc_uint8_t *utf8proc_NFKC(const utf8proc_uint8_t *str) {
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user