1
0
Fork 0
mirror of https://github.com/ton-blockchain/ton synced 2025-03-09 15:40:10 +00:00

[Tolk] Refactor: get rid of split_vars, construct valid LET ops

In FunC (and in Tolk before), tensor vars (actually occupying
several stack slots) were represented as a single var in terms
or IR vars (Ops):
> var a = (1, 2);
> LET (_i) = (_1, _2)

Now, every tensor of N stack slots is represented as N IR vars.
> LET (_i, _j) = (_1, _2)

This will give an ability to control access to parts of a tensor
when implementing `tensorVar.0` syntax.
This commit is contained in:
tolk-vm 2024-12-18 19:26:26 +03:00
parent 989629a832
commit 565bc59735
No known key found for this signature in database
GPG key ID: 7905DD7FE0324B12
17 changed files with 100 additions and 217 deletions

View file

@ -59,20 +59,23 @@ struct LocalVarData final : Symbol {
TypePtr declared_type; // either at declaration `var x:int`, or if omitted, from assigned value `var x=2`
int flags;
int idx;
int param_idx; // 0...N for function parameters, -1 for local vars
std::vector<int> ir_idx;
LocalVarData(std::string name, SrcLocation loc, TypePtr declared_type, int flags, int idx)
LocalVarData(std::string name, SrcLocation loc, TypePtr declared_type, int flags, int param_idx)
: Symbol(std::move(name), loc)
, declared_type(declared_type)
, flags(flags)
, idx(idx) {
, param_idx(param_idx) {
}
bool is_parameter() const { return param_idx >= 0; }
bool is_immutable() const { return flags & flagImmutable; }
bool is_mutate_parameter() const { return flags & flagMutateParameter; }
LocalVarData* mutate() const { return const_cast<LocalVarData*>(this); }
void assign_idx(int idx);
void assign_ir_idx(std::vector<int>&& ir_idx);
void assign_resolved_type(TypePtr declared_type);
void assign_inferred_type(TypePtr inferred_type);
};