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:
parent
989629a832
commit
565bc59735
17 changed files with 100 additions and 217 deletions
|
@ -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);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue