From a4cb5ffafc050b519f806f74f0160ad48f76bee6 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sat, 4 Oct 2025 23:10:43 -0400 Subject: Deprecate `extend` --- src/compile/expressions.c | 1 - src/compile/files.c | 15 --------------- src/compile/functions.c | 5 +---- src/compile/headers.c | 17 ----------------- src/compile/statements.c | 1 - 5 files changed, 1 insertion(+), 38 deletions(-) (limited to 'src/compile') diff --git a/src/compile/expressions.c b/src/compile/expressions.c index b9fafeb8..098ed4ca 100644 --- a/src/compile/expressions.c +++ b/src/compile/expressions.c @@ -241,7 +241,6 @@ Text_t compile(env_t *env, ast_t *ast) { case Repeat: case StructDef: case LangDef: - case Extend: case EnumDef: case FunctionDef: case ConvertDef: diff --git a/src/compile/files.c b/src/compile/files.c index f331a50a..a4cc07fe 100644 --- a/src/compile/files.c +++ b/src/compile/files.c @@ -48,8 +48,6 @@ void initialize_vars_and_statics(env_t *env, ast_t *ast) { initialize_namespace(env, Match(stmt->ast, EnumDef)->name, Match(stmt->ast, EnumDef)->namespace); } else if (stmt->ast->tag == LangDef) { initialize_namespace(env, Match(stmt->ast, LangDef)->name, Match(stmt->ast, LangDef)->namespace); - } else if (stmt->ast->tag == Extend) { - initialize_namespace(env, Match(stmt->ast, Extend)->name, Match(stmt->ast, Extend)->body); } else if (stmt->ast->tag == Use) { continue; } else { @@ -137,19 +135,6 @@ Text_t compile_top_level_code(env_t *env, ast_t *ast) { ", .metamethods=Text$metamethods, .tag=TextInfo, .TextInfo={", quoted_str(def->name), "}};\n"); return Texts(code, compile_namespace(env, def->name, def->namespace)); } - case Extend: { - DeclareMatch(extend, ast, Extend); - binding_t *b = get_binding(env, extend->name); - if (!b || b->type->tag != TypeInfoType) - code_err(ast, "'", extend->name, "' is not the name of any type I recognize."); - env_t *ns_env = Match(b->type, TypeInfoType)->env; - env_t *extended = new (env_t); - *extended = *ns_env; - extended->locals = new (Table_t, .fallback = env->locals); - extended->namespace_bindings = new (Table_t, .fallback = env->namespace_bindings); - extended->id_suffix = env->id_suffix; - return compile_top_level_code(extended, extend->body); - } case Block: { Text_t code = EMPTY_TEXT; for (ast_list_t *stmt = Match(ast, Block)->statements; stmt; stmt = stmt->next) { diff --git a/src/compile/functions.c b/src/compile/functions.c index 40e16e48..ab267e2c 100644 --- a/src/compile/functions.c +++ b/src/compile/functions.c @@ -580,10 +580,7 @@ static void add_closed_vars(Table_t *closed_vars, env_t *enclosing_scope, env_t case ConvertDef: case StructDef: case EnumDef: - case LangDef: - case Extend: { - errx(1, "Definitions should not be reachable in a closure."); - } + case LangDef: errx(1, "Definitions should not be reachable in a closure."); default: break; } } diff --git a/src/compile/headers.c b/src/compile/headers.c index 1865905c..bc0156ad 100644 --- a/src/compile/headers.c +++ b/src/compile/headers.c @@ -25,20 +25,6 @@ Text_t compile_statement_namespace_header(env_t *env, Path_t header_path, ast_t block = def->namespace; break; } - case Extend: { - DeclareMatch(extend, ast, Extend); - ns_env = namespace_env(env, extend->name); - - env_t *extended = new (env_t); - *extended = *ns_env; - extended->locals = new (Table_t, .fallback = env->locals); - extended->namespace_bindings = new (Table_t, .fallback = env->namespace_bindings); - extended->id_suffix = env->id_suffix; - ns_env = extended; - - block = extend->body; - break; - } case StructDef: { DeclareMatch(def, ast, StructDef); ns_env = namespace_env(env, def->name); @@ -251,9 +237,6 @@ Text_t compile_statement_type_header(env_t *env, Path_t header_path, ast_t *ast) "extern const TypeInfo_t ", namespace_name(env, env->namespace, Texts(def->name, Text("$$info"))), ";\n"); } - case Extend: { - return EMPTY_TEXT; - } default: return EMPTY_TEXT; } } diff --git a/src/compile/statements.c b/src/compile/statements.c index 156cc8c0..a9ec4327 100644 --- a/src/compile/statements.c +++ b/src/compile/statements.c @@ -76,7 +76,6 @@ static Text_t _compile_statement(env_t *env, ast_t *ast) { case StructDef: case EnumDef: case LangDef: - case Extend: case FunctionDef: case ConvertDef: { return EMPTY_TEXT; -- cgit v1.2.3