69 lines
1.4 KiB
V
69 lines
1.4 KiB
V
// Copyright (c) 2026 Alexander Medvednikov. All rights reserved.
|
|
// Use of this source code is governed by an MIT license
|
|
// that can be found in the LICENSE file.
|
|
|
|
module ssa
|
|
|
|
pub type ValueID = int
|
|
|
|
pub fn (id ValueID) str() string {
|
|
return int(id).str()
|
|
}
|
|
|
|
pub enum ValueKind {
|
|
unknown
|
|
constant
|
|
argument
|
|
global
|
|
instruction
|
|
basic_block
|
|
string_literal // V string struct literal (by value)
|
|
c_string_literal // C string literal (raw char pointer)
|
|
func_ref // Function pointer reference (for map hash/eq/clone/free functions)
|
|
}
|
|
|
|
// str returns the symbolic name for an SSA value kind.
|
|
pub fn (k ValueKind) str() string {
|
|
return match k {
|
|
.unknown { 'unknown' }
|
|
.constant { 'constant' }
|
|
.argument { 'argument' }
|
|
.global { 'global' }
|
|
.instruction { 'instruction' }
|
|
.basic_block { 'basic_block' }
|
|
.string_literal { 'string_literal' }
|
|
.c_string_literal { 'c_string_literal' }
|
|
.func_ref { 'func_ref' }
|
|
}
|
|
}
|
|
|
|
pub struct Value {
|
|
pub:
|
|
id ValueID
|
|
typ TypeID
|
|
// Index into the specific arena (instrs, blocks, globals)
|
|
index int
|
|
pub mut:
|
|
kind ValueKind
|
|
name string
|
|
uses []ValueID
|
|
}
|
|
|
|
pub struct ConstantData {
|
|
pub:
|
|
int_val i64
|
|
float_val f64
|
|
str_val string
|
|
}
|
|
|
|
pub struct GlobalVar {
|
|
pub mut:
|
|
name string
|
|
typ TypeID
|
|
linkage Linkage
|
|
alignment int
|
|
is_constant bool
|
|
initial_value i64 // For constants/enums, the initial integer value
|
|
initial_data []u8 // For constant arrays: serialized element data
|
|
}
|