MCPcopy
hub / github.com/lmorg/murex / Fork

Method Fork

lang/fork.go:101–242  ·  view source on GitHub ↗

const ForkSuffix = " (fork)" Fork will create a new handle for executing a code block

(flags int)

Source from the content-addressed store, hash-verified

99
100// Fork will create a new handle for executing a code block
101func (p *Process) Fork(flags int) *Fork {
102 fork := new(Fork)
103 fork.Process = new(Process)
104 fork.SystemProcess = process.NewSystemProcessStruct()
105 fork.SetTerminatedState(true)
106 fork.Forks = p.Forks
107 trace(fork.Process)
108 fork.raw = p.raw
109
110 fork.State.Set(state.FunctionGroup)
111 fork.Background.Set(flags&F_BACKGROUND != 0 || p.Background.Get())
112 fork.HasJobId.Set(flags&F_ASSIGN_JOBID != 0 || p.HasJobId.Get())
113
114 fork.IsMethod = p.IsMethod
115 fork.OperatorLogicAnd = p.OperatorLogicAnd
116 fork.OperatorLogicOr = p.OperatorLogicOr
117 fork.IsNot = p.IsNot
118 fork.IsFork = true
119 fork.Parent = p //p.Parent
120
121 fork.Previous = p.Previous
122 fork.Next = p.Next
123
124 fork.preview = flags&F_PREVIEW != 0
125
126 if p.Id == ShellProcess.Id {
127 fork.ExitNum = ShellExitNum
128 }
129
130 if flags&F_NEW_MODULE == 0 {
131 fork.FileRef = p.FileRef
132 }
133
134 if flags&F_FUNCTION != 0 {
135 fork.Scope = fork.Process
136 //fork.Parent = fork.Process
137 fork.Context, fork.Done = context.WithCancel(context.Background())
138 fork.Kill = fork.Done
139
140 fork.Variables = NewVariables(fork.Process)
141 GlobalFIDs.Register(fork.Process)
142 fork.fidRegistered = true
143
144 fork.Config = p.Config.Copy()
145
146 fork.newTestScope = true
147 fork.Tests = NewTests(fork.Process)
148
149 } else {
150 fork.Scope = p.Scope
151 fork.Name.Set(p.Name.String())
152 fork.Context, fork.Done = p.Context, p.Done
153 fork.Kill = func() { deregisterProcess(fork.Process) }
154
155 if p.Scope.RunMode > runmode.Default {
156 fork.RunMode = p.Scope.RunMode
157 }
158 if p.RunMode > runmode.Default {

Callers 15

BenchmarkAForeachNFunction · 0.80
BenchmarkAForeachNoVarNFunction · 0.80
BenchmarkAForeachDotVarNFunction · 0.80
BenchmarkJaForeachNFunction · 0.80
BenchmarkAForeachForkNFunction · 0.80
BenchmarkCsvIndexNTimesFunction · 0.80
BenchmarkCsvForkNTimesFunction · 0.80
BenchmarkMathLibsExprFunction · 0.80
TestMurexFunction · 0.80
wasmShellExecFunction · 0.80

Calls 14

NewSystemProcessStructFunction · 0.92
NewStdinFunction · 0.92
NewErrFunction · 0.92
NewVariablesFunction · 0.85
NewTestsFunction · 0.85
deregisterProcessFunction · 0.85
SetTerminatedStateMethod · 0.80
RegisterMethod · 0.80
CopyMethod · 0.80
traceFunction · 0.70
SetMethod · 0.65
StringMethod · 0.65

Tested by 15

BenchmarkAForeachNFunction · 0.64
BenchmarkAForeachNoVarNFunction · 0.64
BenchmarkAForeachDotVarNFunction · 0.64
BenchmarkJaForeachNFunction · 0.64
BenchmarkAForeachForkNFunction · 0.64
BenchmarkCsvIndexNTimesFunction · 0.64
BenchmarkCsvForkNTimesFunction · 0.64
BenchmarkMathLibsExprFunction · 0.64
TestMurexFunction · 0.64