1 Star 1 Fork 1

U语言组织 / U语言

forked from 秋来冬风 / U语言 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
result.go 1.80 KB
一键复制 编辑 原始数据 按行查看 历史
秋来冬风 提交于 2023-10-06 16:14 . 秋来冬风:build2支持for
package ir2
import (
"strings"
"gitee.com/u-language/u-language/pkg/ast"
)
// Ir2 表示一个可以包含ir2定义的ir指令的类型
type Ir2 interface {
String() string
ir2()
}
var _ Ir2 = (*File)(nil)
type File struct {
//全局声明
GlobalDecl []ast.Node
//指令
Ir []IrNode
//变量初始化
VarInit []IrNode
// 临时变量
tmpVar autoVar
//现有临时变量
tmpVarStr string
//包名
PackageName string
// 文件名
FileName string
//是否有自定义init函数
HaveInitFunc bool
Sbt *ast.Sbt
FuncInfo *ast.FuncInfo
//临时变量的保存地点
tmp *[]IrNode
}
func NewFile(t *ast.Tree) *File {
ret := new(File)
ret.PackageName, ret.HaveInitFunc, ret.Sbt, ret.FileName, ret.tmp = t.PackageName, t.IsInitFunc.Load(), t.Sbt, t.Filename, &ret.Ir
NodeToIr(ret, t.Nodes)
return ret
}
// getTmpVar 返回一个临时变量
// 如果 old == true , 返回之前一次调用返回的临时变量
func (f *File) getTmpVar(old bool, LineNum int) string {
if old {
return f.tmpVarStr
}
f.tmpVarStr = f.tmpVar.Get()
v := NewIr(TmpVarOP, LineNum)
v.Arg1Obj = f.tmpVarStr
(*f.tmp) = append((*f.tmp), v)
return f.tmpVarStr
}
func (f *File) String() string {
var buf strings.Builder
buf.WriteString("ir2.File{\n全局声明:\n")
for _, v := range f.GlobalDecl {
buf.WriteString(v.String())
buf.WriteString("\n")
}
buf.WriteString("\n变量初始化:\n")
for _, v := range f.VarInit {
buf.WriteString(v.String())
buf.WriteString("\n")
}
buf.WriteString("\n\n指令:\n")
for _, v := range f.Ir {
buf.WriteString(v.String())
buf.WriteString("\n")
}
buf.WriteString("}")
return buf.String()
}
func (f *File) ir2() {}
// toS 将转换的结果保存到ret
func (f *File) toS(ret *[]IrNode, F func()) {
old := f.Ir
f.Ir = *ret
F()
*ret = f.Ir
f.Ir = old
}
Go
1
https://gitee.com/u-language/u-language.git
git@gitee.com:u-language/u-language.git
u-language
u-language
U语言
0e42c1326373

搜索帮助

53164aa7 5694891 3bd8fe86 5694891