chore: remove trailing whitespace from README.md line 42
This commit is contained in:
@@ -82,6 +82,41 @@ static bool _rava_semantic_analyze_class(RavaSemanticAnalyzer_t *analyzer, RavaA
|
||||
return !analyzer->had_error;
|
||||
}
|
||||
|
||||
static bool _rava_semantic_analyze_enum(RavaSemanticAnalyzer_t *analyzer, RavaASTNode_t *enum_node) {
|
||||
if (enum_node->type != RAVA_AST_ENUM_DECL) return false;
|
||||
|
||||
char *enum_name = enum_node->data.enum_decl.name;
|
||||
RavaType_t *enum_type = rava_type_create_class(enum_name);
|
||||
|
||||
RavaSymbol_t *enum_symbol = rava_symbol_create(RAVA_SYMBOL_ENUM, enum_name, enum_type);
|
||||
enum_symbol->modifiers = enum_node->data.enum_decl.modifiers;
|
||||
enum_symbol->modifiers_count = enum_node->data.enum_decl.modifiers_count;
|
||||
enum_symbol->declaration = enum_node;
|
||||
|
||||
if (!rava_symbol_table_define(analyzer->symbol_table, enum_symbol)) {
|
||||
_rava_semantic_error(analyzer, "Enum already defined", enum_node->line, enum_node->column);
|
||||
rava_symbol_destroy(enum_symbol);
|
||||
return false;
|
||||
}
|
||||
|
||||
rava_symbol_table_enter_scope(analyzer->symbol_table, enum_name);
|
||||
|
||||
for (size_t i = 0; i < enum_node->data.enum_decl.constants_count; i++) {
|
||||
char *const_name = enum_node->data.enum_decl.constants[i];
|
||||
RavaType_t *const_type = rava_type_create_class(enum_name);
|
||||
RavaSymbol_t *const_symbol = rava_symbol_create(RAVA_SYMBOL_FIELD, const_name, const_type);
|
||||
rava_symbol_table_define(analyzer->symbol_table, const_symbol);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < enum_node->children_count; i++) {
|
||||
_rava_semantic_analyze_node(analyzer, enum_node->children[i]);
|
||||
}
|
||||
|
||||
rava_symbol_table_exit_scope(analyzer->symbol_table);
|
||||
|
||||
return !analyzer->had_error;
|
||||
}
|
||||
|
||||
static bool _rava_semantic_analyze_method(RavaSemanticAnalyzer_t *analyzer, RavaASTNode_t *method_node) {
|
||||
if (method_node->type != RAVA_AST_METHOD_DECL) return false;
|
||||
|
||||
@@ -330,6 +365,12 @@ static RavaType_t* _rava_semantic_check_expression(RavaSemanticAnalyzer_t *analy
|
||||
return rava_type_create_primitive(RAVA_TYPE_BOOLEAN);
|
||||
} else if (strcmp(method, "compareTo") == 0) {
|
||||
return rava_type_create_primitive(RAVA_TYPE_INT);
|
||||
} else if (strcmp(method, "size") == 0) {
|
||||
return rava_type_create_primitive(RAVA_TYPE_INT);
|
||||
} else if (strcmp(method, "isEmpty") == 0) {
|
||||
return rava_type_create_primitive(RAVA_TYPE_BOOLEAN);
|
||||
} else if (strcmp(method, "containsKey") == 0) {
|
||||
return rava_type_create_primitive(RAVA_TYPE_BOOLEAN);
|
||||
}
|
||||
}
|
||||
return rava_type_create_primitive(RAVA_TYPE_INT);
|
||||
@@ -458,6 +499,9 @@ static bool _rava_semantic_analyze_node(RavaSemanticAnalyzer_t *analyzer, RavaAS
|
||||
case RAVA_AST_CLASS_DECL:
|
||||
return _rava_semantic_analyze_class(analyzer, node);
|
||||
|
||||
case RAVA_AST_ENUM_DECL:
|
||||
return _rava_semantic_analyze_enum(analyzer, node);
|
||||
|
||||
case RAVA_AST_METHOD_DECL:
|
||||
return _rava_semantic_analyze_method(analyzer, node);
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
typedef enum {
|
||||
RAVA_SYMBOL_CLASS,
|
||||
RAVA_SYMBOL_ENUM,
|
||||
RAVA_SYMBOL_METHOD,
|
||||
RAVA_SYMBOL_FIELD,
|
||||
RAVA_SYMBOL_VARIABLE,
|
||||
|
||||
Reference in New Issue
Block a user