Documentation ¶
Index ¶
- Constants
- Variables
- func AllPrograms(db *gorm.DB) []string
- func DeleteProgram(db *gorm.DB, program string)
- func ExactSearchVariable(DB *gorm.DB, mod int, value string) chan int64
- func GetDB() *gorm.DB
- func GetDBInProgram(program string) *gorm.DB
- func GetIrSourceFromHash(hash string) (*memedit.MemEditor, error)
- func GetSSAIndexCost() time.Duration
- func GetSSASaveTypeCost() time.Duration
- func GetSSASourceCodeCost() time.Duration
- func GetType(id int) (int, string, string, error)
- func GlobSearchVariable(DB *gorm.DB, mod int, value string) chan int64
- func RegexpSearchVariable(DB *gorm.DB, mod int, value string) chan int64
- func SaveIrIndex(idx *IrIndex)
- func SaveIrSource(editor *memedit.MemEditor, hash string) error
- func SaveType(kind int, str string, extra string) int
- func SearchVariable(db *gorm.DB, compareMode, matchMod int, value string) chan int64
- func UpdateProgram(prog *IrProgram)
- func YieldIrCodesProgramName(db *gorm.DB, ctx context.Context, program string) chan *IrCode
- type Int64Map
- type Int64Slice
- type IrCode
- func (r *IrCode) GetExtraInfo() map[string]any
- func (r *IrCode) GetIdInt() int
- func (r *IrCode) GetIdInt64() int64
- func (r *IrCode) GetSourceCode(db *gorm.DB) string
- func (r *IrCode) GetSourceCodeContext(db *gorm.DB, n int) string
- func (r *IrCode) GetStartAndEndPositions(db *gorm.DB) (*memedit.MemEditor, memedit.PositionIf, memedit.PositionIf, error)
- func (r *IrCode) IsEmptySourceCodeHash() bool
- func (r *IrCode) SetExtraInfo(params map[string]any)
- func (i *IrCode) Show()
- func (i *IrCode) VerboseString() string
- type IrIndex
- type IrProgram
- type IrSource
- type IrType
- type StringMap
- type StringSlice
Constants ¶
View Source
const ( NameMatch int = 1 KeyMatch = 1 << 1 BothMatch = NameMatch | KeyMatch )
type MatchMode int
View Source
const ( ExactCompare int = iota GlobCompare RegexpCompare )
Variables ¶
Functions ¶
func AllPrograms ¶
func DeleteProgram ¶
func ExactSearchVariable ¶ added in v1.3.3
func GetDBInProgram ¶
func GetIrSourceFromHash ¶ added in v1.3.3
GetIrSourceFromHash fetch editor from cache by hash(md5)
func GetSSAIndexCost ¶
func GetSSASaveTypeCost ¶
func GetSSASourceCodeCost ¶
func GlobSearchVariable ¶ added in v1.3.3
func RegexpSearchVariable ¶ added in v1.3.3
func SaveIrIndex ¶
func SaveIrIndex(idx *IrIndex)
func SearchVariable ¶
func UpdateProgram ¶
func UpdateProgram(prog *IrProgram)
Types ¶
type Int64Slice ¶
type Int64Slice []int64
Int64Slice 是一个自定义类型,用于处理 []int64 的序列化和反序列化
func (*Int64Slice) Scan ¶
func (us *Int64Slice) Scan(value interface{}) error
Scan 实现了 sql.Scanner 接口,允许从数据库读取值时将其转换回 Int64Slice 类型
type IrCode ¶
type IrCode struct { gorm.Model ProgramName string `json:"program_name" gorm:"index"` Version string `json:"package_version" gorm:"index"` // source code SourceCodeStartOffset int64 `json:"source_code_start_offset"` SourceCodeEndOffset int64 `json:"source_code_end_offset"` SourceCodeHash string `json:"source_code_hash"` // default md5 // opcode Opcode int64 `json:"opcode"` OpcodeName string `json:"opcode_name"` // just for binary and unary operator OpcodeOperator string `json:"opcode_operator"` // basic info Name string `json:"name"` VerboseName string `json:"verbose_name"` ShortVerboseName string `json:"short_verbose_name"` String string `json:"string"` // any IrCode in one block inner one function CurrentBlock int64 `json:"current_block"` CurrentFunction int64 `json:"current_function"` // FunctionDefs IsFunction bool `json:"is_function"` FormalArgs Int64Slice `json:"formal_args" gorm:"type:text"` FreeValues Int64Slice `json:"free_values" gorm:"type:text"` MemberCallArgs Int64Slice `json:"formal_member_call_args" gorm:"type:text"` SideEffects Int64Slice `json:"side_effects" gorm:"type:text"` IsVariadic bool `json:"is_variadic"` ReturnCodes Int64Slice `json:"return_codes" gorm:"type:text"` IsExternal bool `json:"is_external"` CodeBlocks Int64Slice `json:"code_blocks" gorm:"type:text"` EnterBlock int64 `json:"enter_block"` ExitBlock int64 `json:"exit_block"` DeferBlock int64 `json:"defer_block"` ChildrenFunction Int64Slice `json:"children_function" gorm:"type:text"` ParentFunction int64 `json:"parent_function"` // block IsBlock bool `json:"is_block"` PredBlock Int64Slice `json:"pred_block" gorm:"type:text"` SuccBlock Int64Slice `json:"succ_block" gorm:"type:text"` Phis Int64Slice `json:"phis_in_block" gorm:"type:text"` // Use-Def Chains Relation Defs Int64Slice `json:"defs" gorm:"type:text"` Users Int64Slice `json:"users" gorm:"type:text"` // this is user is call and method is this IR self CalledBy Int64Slice `json:"is_called_by" gorm:"type:text"` // OOP Supporting IsObject bool ObjectMembers Int64Map `json:"object_members" gorm:"type:text"` IsObjectMember bool ObjectParent int64 `json:"object_parent"` ObjectKey int64 `json:"object_key"` // Maskable MaskedCodes Int64Slice `json:"masked_codes" gorm:"type:text"` IsMasked bool `json:"is_masked"` // Variable Variable StringSlice `json:"variable" gorm:"type:text"` // compile hash means: hash[ (file-content)+(program-name)+(package-name)+(program-index) ] ProgramCompileHash string `json:"program_compile_hash" gorm:"index"` // type TypeID int `json:"type_id"` // reference Point int64 `json:"point" gorm:"type:text"` Pointer Int64Slice `json:"pointer" gorm:"type:text"` // not important information ExtraInformation string `json:"extra_information"` }
func (*IrCode) GetExtraInfo ¶ added in v1.3.3
func (*IrCode) GetIdInt64 ¶ added in v1.3.3
func (*IrCode) GetSourceCodeContext ¶ added in v1.3.3
func (*IrCode) GetStartAndEndPositions ¶ added in v1.3.3
func (r *IrCode) GetStartAndEndPositions(db *gorm.DB) (*memedit.MemEditor, memedit.PositionIf, memedit.PositionIf, error)
func (*IrCode) IsEmptySourceCodeHash ¶ added in v1.3.3
func (*IrCode) SetExtraInfo ¶ added in v1.3.3
func (*IrCode) VerboseString ¶ added in v1.3.3
type IrIndex ¶
type IrIndex struct { gorm.Model ProgramName string `json:"program_name" gorm:"index"` // class ClassName string `json:"class_name" gorm:"index"` // variable VariableName string `json:"variable_name" gorm:"index"` VersionID int64 `json:"version_id" gorm:"index"` // member call FieldName string `json:"field_name" gorm:"index"` // scope ScopeName string `json:"scope_name" gorm:"index"` // value ValueID int64 `json:"value_id" gorm:"index"` }
func CreateIndex ¶
func CreateIndex() *IrIndex
type IrProgram ¶
type IrProgram struct { gorm.Model ProgramName string `json:"program_name" gorm:"index"` Version string `json:"package_version" gorm:"index"` // Language: yak, java, php, js, etc // if the program contains many language, // use comma to separate them. // e.g. "yak,java,php" Language string `json:"language" gorm:"index"` // application / library ProgramKind string `json:"program_kind" gorm:"index"` // up-stream program is the program that this program depends on UpStream StringSlice `json:"up_stream_programs" gorm:"type:text"` // down-stream program is the program that depends on this program DownStream StringSlice `json:"down_stream_programs" gorm:"type:text"` // this program contain this file FileList StringMap `json:"file_list" gorm:"type:text"` // program extra file: *.properties, *.xml, *.json, etc ExtraFile StringMap `json:"extra_file" gorm:"type:text"` }
func CreateProgram ¶
func GetProgram ¶
type IrType ¶
type IrType struct { gorm.Model Kind int `json:"kind"` String string `json:"string"` ExtraInformation string `json:"extra_information"` Hash string `json:"hash" gorm:"unique_index"` }
func (*IrType) BeforeCreate ¶
func (*IrType) BeforeSave ¶
func (*IrType) BeforeUpdate ¶
type StringSlice ¶
type StringSlice []string
func (*StringSlice) Scan ¶
func (ss *StringSlice) Scan(value interface{}) error
Click to show internal directories.
Click to hide internal directories.