代码拉取完成,页面将自动刷新
同步操作将从 秋来冬风/U语言 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。