restore(lang): full lang tree from ff3ef452 (306 files) — compiler, vm, shared, runner, c-abi, etc.\n\n- Restores lang/ directory (files≈306, dirs≈64) as per historical branch with selfhost sources\n- Keeps our recent parser index changes in compiler/* (merged clean by checkout)\n- Unblocks selfhost development and documentation references
This commit is contained in:
@ -37,9 +37,12 @@ box ExecutionPipelineBox {
|
||||
if stage3_flag == 1 { p.stage3_enable(1) }
|
||||
p.extract_usings(src)
|
||||
local usings = p.get_usings_json()
|
||||
// Extract extern_c annotations (syntax: @extern_c("c_symbol","Func/Arity");)
|
||||
p.extract_externs(src)
|
||||
local externs = p.get_externs_json()
|
||||
local ast = p.parse_program2(src)
|
||||
// Emit Stage‑1 JSON with meta.usings
|
||||
local json = EmitterBox.emit_program(ast, usings)
|
||||
local json = EmitterBox.emit_program(ast, usings, externs)
|
||||
if json == null || json.size() == 0 { return 1 }
|
||||
print(json)
|
||||
return 0
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
// Guard: This box performs no execution. Returns MIR(JSON) as text.
|
||||
|
||||
using "lang/src/compiler/pipeline_v2/pipeline.hako" as PipelineV2
|
||||
using "lang/src/shared/json/mir_v1_adapter.hako" as MirJsonV1Adapter
|
||||
|
||||
static box FlowEntryBox {
|
||||
// Emit legacy v0 JSON(call/boxcall/newbox)。最小入力: Stage‑1 JSON 文字列
|
||||
@ -21,6 +22,18 @@ static box FlowEntryBox {
|
||||
return PipelineV2.lower_stage1_to_mir_v1_compat(ast_json, prefer_cfg)
|
||||
}
|
||||
|
||||
// Emit v1 JSON with metadata.extern_c(externs を v1 の metadata に反映)
|
||||
// externs_json: JSON array text, e.g. [{"func":"Name/Arity","symbol":"c_symbol"}]
|
||||
emit_v1_from_ast_with_meta(ast_json, prefer_cfg, externs_json) {
|
||||
return PipelineV2.lower_stage1_to_mir_v1_with_meta(ast_json, prefer_cfg, externs_json)
|
||||
}
|
||||
|
||||
// Emit v1 JSON + metadata.extern_c を注入し、v0互換に変換
|
||||
emit_v1_compat_from_ast_with_meta(ast_json, prefer_cfg, externs_json) {
|
||||
local j1 = PipelineV2.lower_stage1_to_mir_v1_with_meta(ast_json, prefer_cfg, externs_json)
|
||||
return MirJsonV1Adapter.to_v0(j1)
|
||||
}
|
||||
|
||||
// No-op entry(箱ガード用)
|
||||
main(args) { return 0 }
|
||||
}
|
||||
|
||||
@ -24,6 +24,7 @@ using "lang/src/compiler/pipeline_v2/stage1_name_args_normalizer_box.hako" as Na
|
||||
using "lang/src/compiler/pipeline_v2/alias_preflight_box.hako" as AliasPreflightBox
|
||||
using "lang/src/compiler/pipeline_v2/stage1_args_parser_box.hako" as Stage1ArgsParserBox
|
||||
using "lang/src/compiler/pipeline_v2/pipeline_helpers_box.hako" as PipelineHelpersBox
|
||||
using "lang/src/shared/json/mir_v1_meta_inject_box.hako" as MirV1MetaInjectBox
|
||||
|
||||
flow PipelineV2 {
|
||||
lower_stage1_to_mir(ast_json, prefer_cfg) {
|
||||
@ -150,6 +151,14 @@ flow PipelineV2 {
|
||||
return PipelineV2.lower_stage1_to_mir(ast_json, prefer_cfg)
|
||||
}
|
||||
|
||||
// Experimental (with metadata): emit JSON v1 and inject metadata.extern_c.
|
||||
// externs_json: JSON array text like
|
||||
// [{"func":"Name/Arity","symbol":"c_symbol"}, ...]
|
||||
lower_stage1_to_mir_v1_with_meta(ast_json, prefer_cfg, externs_json) {
|
||||
local j1 = PipelineV2.lower_stage1_to_mir_v1(ast_json, prefer_cfg)
|
||||
return MirV1MetaInjectBox.inject_meta_externs(j1, externs_json)
|
||||
}
|
||||
|
||||
// Experimental helper: emit v1 then downgrade to v0 for Mini‑VM exec
|
||||
lower_stage1_to_mir_v1_compat(ast_json, prefer_cfg) {
|
||||
local j1 = PipelineV2.lower_stage1_to_mir_v1(ast_json, prefer_cfg)
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
|
||||
using "lang/src/compiler/pipeline_v2/emit_call_box.hako" as EmitCallBox
|
||||
using "lang/src/compiler/pipeline_v2/local_ssa_box.hako" as LocalSSABox
|
||||
using "lang/src/shared/json/mir_v1_meta_inject_box.hako" as MirV1MetaInjectBox
|
||||
|
||||
static box PipelineEmitBox {
|
||||
// Emit Call(name, int-args) → JSON v0, wrapped with LocalSSA ensures
|
||||
@ -10,6 +11,14 @@ static box PipelineEmitBox {
|
||||
local j = EmitCallBox.emit_call_int_args(name, args)
|
||||
return LocalSSABox.ensure_calls(LocalSSABox.ensure_cond(j))
|
||||
}
|
||||
|
||||
// Emit Call(name, int-args) → JSON v1 with metadata.extern_c (if provided)
|
||||
// externs_json: JSON array text like
|
||||
// [{"func":"Name/Arity","symbol":"c_symbol"}, ...]
|
||||
emit_call_int_args_v1_with_meta(name, args, externs_json) {
|
||||
local jv0 = me.emit_call_int_args_v0(name, args)
|
||||
return MirV1MetaInjectBox.inject_meta_externs(jv0, externs_json)
|
||||
}
|
||||
}
|
||||
|
||||
static box PipelineEmitMain { main(args) { return 0 } }
|
||||
|
||||
Reference in New Issue
Block a user