Skip to content

Commit 02f2177

Browse files
committed
Revert "compiler: refactor build queue"
This reverts commit 40403e7, which fixes a regression sometimes making subsequent builds unstable. Let's revert for now so we can finish the new beta release of Fuse X.
1 parent 56d69f0 commit 02f2177

15 files changed

+248
-311
lines changed

src/compiler/core/Compiler.cs

+10-14
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ public class Compiler : LogObject, ICompiler, IScheduler
4949
public readonly NameResolver NameResolver;
5050

5151
// Building
52-
public readonly BuildQueue Queue;
5352
public readonly BlockBuilder BlockBuilder;
5453
public readonly BundleBuilder BundleBuilder;
5554
public readonly TypeBuilder TypeBuilder;
@@ -92,9 +91,8 @@ public Compiler(Log log, Backend backend, SourceBundle bundle, CompilerOptions o
9291
var data = Data = new BuildData(il, extensions, ilf);
9392
var environment = Environment = new BuildEnvironment(backend, bundle, options, extensions, ilf, this);
9493
var input = Input = new SourceReader(log, bundle, environment);
95-
var queue = Queue = new BuildQueue(log, environment, backend, this);
96-
var blockBuilder = BlockBuilder = new BlockBuilder(backend, il, ilf, resolver, this, queue);
97-
var typeBuilder = TypeBuilder = new TypeBuilder(environment, ilf, resolver, this, queue);
94+
var blockBuilder = BlockBuilder = new BlockBuilder(backend, il, ilf, resolver, this);
95+
var typeBuilder = TypeBuilder = new TypeBuilder(environment, ilf, resolver, this);
9896
BundleBuilder = new BundleBuilder(backend, environment, ilf, this);
9997
AstProcessor = new AstProcessor(il, blockBuilder, typeBuilder, resolver, environment);
10098
UxlProcessor = new UxlProcessor(disk, backend.Name, il, extensions, environment, ilf);
@@ -134,23 +132,20 @@ public void Compile()
134132
if (Backend.CanLink(bundle))
135133
bundle.Flags |= SourceBundleFlags.CanLink;
136134

137-
using (Log.StartProfiler(Queue))
138-
Queue.BuildTypesAndFunctions();
139-
135+
using (Log.StartProfiler(TypeBuilder))
136+
TypeBuilder.Build();
140137
if (Log.HasErrors)
141138
return;
142139

143-
using (Log.StartProfiler(UxlProcessor))
144-
UxlProcessor.CompileDocuments();
140+
Backend.ShaderBackend.Initialize(this, BundleBuilder);
145141

142+
using (Log.StartProfiler(BlockBuilder))
143+
BlockBuilder.Build();
146144
if (Log.HasErrors)
147145
return;
148146

149-
Backend.ShaderBackend.Initialize(this, BundleBuilder);
150-
151-
using (Log.StartProfiler(Queue))
152-
Queue.BuildEverything();
153-
147+
using (Log.StartProfiler(UxlProcessor))
148+
UxlProcessor.CompileDocuments();
154149
if (Log.HasErrors)
155150
return;
156151

@@ -210,6 +205,7 @@ public BackendResult Generate(Action<ICompiler> callback)
210205
UxlProcessor.CompileRequirements();
211206
ILStripper.Begin();
212207
Run(_transforms);
208+
TypeBuilder.BuildTypes();
213209

214210
using (Log.StartProfiler(ILStripper))
215211
ILStripper.End();

src/compiler/core/IL/EntitySwapper.cs

+2
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ DataType GetTypeInternal(DataType dt)
6565
args[i] = GetType(dt.FlattenedArguments[i]);
6666

6767
result = TypeBuilder.Parameterize(result.Source, def, args);
68+
TypeBuilder.BuildTypes();
6869
SwapTypes.Add(dt, result);
6970
return result;
7071
}
@@ -98,6 +99,7 @@ DataType GetTypeInternal(DataType dt)
9899

99100
var def = result.IsGenericDefinition ? result : GetType(dt.GenericDefinition);
100101
result = TypeBuilder.Parameterize(dt.Source, def, args);
102+
TypeBuilder.BuildTypes();
101103
}
102104

103105
SwapTypes.Add(dt, result);

src/compiler/core/Syntax/Builders/BlockBuilder.CompileDraw.cs

+4-2
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ public Statement CompileDraw(Function func, List<VariableScope> vscopeStack, Ast
3232

3333
var result = new DrawBlock(draw.Source, parent, method, FlattenVariableScopes(vscopeStack));
3434
method.DrawBlocks.Add(result);
35-
_queue.EnqueueBlock(result, x => PopulateBlock(draw.Block, x));
36-
_queue.EnqueueDrawClass(method.DeclaringType);
35+
36+
EnqueueBlock(result, x => PopulateBlock(draw.Block, x));
37+
_enqueuedDrawClasses.Add(method.DeclaringType);
38+
3739
return result.DrawScope;
3840
}
3941

src/compiler/core/Syntax/Builders/BlockBuilder.CreateBlock.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ public Block CreateBlock(AstBlock ast, Namescope parent)
3030
Log.Error(src, ErrorCode.E3214, "Block declaration is not allowed in this scope");
3131

3232
_processedBlocks.Add(ast, result);
33-
_queue.EnqueueBlock(result, x => PopulateBlock(ast, x));
33+
EnqueueBlock(result, x => PopulateBlock(ast, x));
34+
3435
return result;
3536
}
3637

@@ -75,7 +76,7 @@ MetaBlock CreateNodeBlock(AstNode ast, BlockBase parent)
7576
return MetaBlock.Invalid;
7677
}
7778

78-
_queue.EnqueueBlock(result, x => PopulateBlock(ast, x));
79+
EnqueueBlock(result, x => PopulateBlock(ast, x));
7980
return result;
8081
}
8182
}

src/compiler/core/Syntax/Builders/BlockBuilder.CreateMetaProperty.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,12 @@ MetaProperty CreateMetaProperty(AstMetaProperty ast, BlockBase parent)
5858
}
5959

6060
var result = new MetaProperty(ast.Name.Source, parent, dt, ast.Name.Symbol, visibility);
61-
_queue.EnqueueMetaProperty(ast, result);
61+
_enqueuedProperties.Add(new KeyValuePair<AstMetaProperty, MetaProperty>(ast, result));
62+
6263
return result;
6364
}
6465

65-
internal void CompileMetaPropertyDefinitions(AstMetaProperty ast, MetaProperty mp)
66+
void CompileMetaPropertyDefinitions(AstMetaProperty ast, MetaProperty mp)
6667
{
6768
var defs = new MetaDefinition[ast.Definitions.Count];
6869

src/compiler/core/Syntax/Builders/BlockBuilder.FlattenType.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public partial class BlockBuilder
88
{
99
internal readonly Dictionary<DataType, HashSet<DataType>> FlattenedTypes = new Dictionary<DataType, HashSet<DataType>>();
1010

11-
internal void FlattenTypes()
11+
void FlattenTypes()
1212
{
1313
FlattenTypes(_il);
1414

src/compiler/core/Syntax/Builders/BlockBuilder.cs

+33-5
Original file line numberDiff line numberDiff line change
@@ -22,27 +22,54 @@ public partial class BlockBuilder : LogObject
2222
readonly ILFactory _ilf;
2323
readonly NameResolver _resolver;
2424
readonly Compiler _compiler;
25-
readonly BuildQueue _queue;
2625
readonly Dictionary<AstBlockBase, Block> _processedBlocks = new Dictionary<AstBlockBase, Block>();
26+
readonly List<BlockBase> _enqueuedBlocks = new List<BlockBase>();
27+
readonly List<KeyValuePair<AstMetaProperty, MetaProperty>> _enqueuedProperties = new List<KeyValuePair<AstMetaProperty, MetaProperty>>();
28+
readonly HashSet<DataType> _enqueuedDrawClasses = new HashSet<DataType>();
2729

2830
Block _terminals;
2931
readonly HashSet<string> _terminalNames = new HashSet<string>();
3032

31-
internal BlockBuilder(
33+
public BlockBuilder(
3234
Backend backend,
3335
Namespace il,
3436
ILFactory ilf,
3537
NameResolver resolver,
36-
Compiler compiler,
37-
BuildQueue queue)
38+
Compiler compiler)
3839
: base(compiler)
3940
{
4041
_backend = backend;
4142
_il = il;
4243
_ilf = ilf;
4344
_resolver = resolver;
4445
_compiler = compiler;
45-
_queue = queue;
46+
}
47+
48+
void EnqueueBlock(BlockBase b, Action<BlockBase> populate)
49+
{
50+
b.Populating = populate;
51+
_enqueuedBlocks.Add(b);
52+
}
53+
54+
public void Build()
55+
{
56+
FlattenTypes();
57+
58+
for (int i = 0; i < _enqueuedBlocks.Count; i++)
59+
if (!_enqueuedBlocks[i].Source.Bundle.CanLink)
60+
_enqueuedBlocks[i].Populate();
61+
62+
_enqueuedBlocks.Clear();
63+
64+
for (int i = 0; i < _enqueuedProperties.Count; i++)
65+
CompileMetaPropertyDefinitions(_enqueuedProperties[i].Key, _enqueuedProperties[i].Value);
66+
67+
_enqueuedProperties.Clear();
68+
69+
foreach (var dt in _enqueuedDrawClasses)
70+
DrawCallGenerator.GenerateDrawCalls(_compiler, dt);
71+
72+
_enqueuedDrawClasses.Clear();
4673
}
4774

4875
public Block TerminalProperties
@@ -56,6 +83,7 @@ public Block TerminalProperties
5683

5784
foreach (var t in _backend.ShaderBackend.InputProperties)
5885
CompileTerminalProperty(t);
86+
5987
foreach (var t in _backend.ShaderBackend.OutputProperties)
6088
CompileTerminalProperty(t);
6189
}

src/compiler/core/Syntax/Builders/BuildQueue.cs

-189
This file was deleted.

0 commit comments

Comments
 (0)