-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* #31 - IAbstractSyntaxTreeNode.cs * #31 - tree internal * #31 - separate ast from backend * #31 - segment * #31 - separate ast from backend 2 * #31 - value dto converter * #31 - удалил Type из TypeValue * #31 - fix test * #31 - symbol contracts * #31 - tuple -> dto * #31 - End is property * mv * #31 - backend mv * #31 - backend subdomain * #31 - scope dto for ast * #31 - rename * #31 - rename * #31 - ISymbolTable -> Scope * #31 - SymbolTableStorage.cs * #31 - fix bug * #31 - remove IR from codegen
- Loading branch information
Showing
138 changed files
with
1,203 additions
and
982 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
using HydraScript.Lib.BackEnd.Impl.Addresses; | ||
|
||
namespace HydraScript.Lib.BackEnd; | ||
|
||
public record Call( | ||
IAddress From, | ||
FunctionInfo To, | ||
string? Where = null) | ||
{ | ||
public override string ToString() => | ||
$"{From}: {Where} => {To.Start}: {To.Id}"; | ||
} | ||
|
||
public record FunctionInfo(string Id) | ||
{ | ||
public Label Start => new($"Start_{this}"); | ||
public Label End => new($"End_{this}"); | ||
|
||
public override string ToString() => Id; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
namespace HydraScript.Lib.BackEnd; | ||
|
||
public class Frame(IAddress returnAddress, Frame? parentFrame = null) | ||
{ | ||
private readonly Dictionary<string, object?> _variables = new(); | ||
|
||
public IAddress ReturnAddress { get; } = returnAddress; | ||
|
||
public object? this[string id] | ||
{ | ||
get => _variables.TryGetValue(id, out var value) | ||
? value | ||
: parentFrame?[id]; | ||
set => _variables[id] = value; | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...aScript.Lib/BackEnd/Addresses/IAddress.cs → src/HydraScript.Lib/BackEnd/IAddress.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
namespace HydraScript.Lib.BackEnd; | ||
|
||
public interface IExecutableInstruction | ||
{ | ||
public IAddress Address { get; set; } | ||
public IAddress Execute(IExecuteParams executeParams); | ||
public bool End { get; } | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
namespace HydraScript.Lib.BackEnd; | ||
|
||
public interface IExecuteParams | ||
{ | ||
public Stack<Call> CallStack { get; } | ||
public Stack<Frame> Frames { get; } | ||
public Queue<object?> Arguments { get; } | ||
public TextWriter Writer { get; } | ||
} |
2 changes: 1 addition & 1 deletion
2
src/HydraScript.Lib/BackEnd/Values/IValue.cs → src/HydraScript.Lib/BackEnd/IValue.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
namespace HydraScript.Lib.BackEnd; | ||
|
||
public interface IVirtualMachine | ||
{ | ||
public IExecuteParams ExecuteParams { get; } | ||
public void Run(AddressedInstructions instructions); | ||
} |
2 changes: 1 addition & 1 deletion
2
...ript.Lib/BackEnd/Addresses/HashAddress.cs → ...Lib/BackEnd/Impl/Addresses/HashAddress.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...ydraScript.Lib/BackEnd/Addresses/Label.cs → ...cript.Lib/BackEnd/Impl/Addresses/Label.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
namespace HydraScript.Lib.BackEnd.Impl; | ||
|
||
public class ExecuteParams(TextWriter textWriter) : IExecuteParams | ||
{ | ||
public Stack<Call> CallStack { get; } = new(); | ||
public Stack<Frame> Frames { get; } = new(); | ||
public Queue<object?> Arguments { get; } = new(); | ||
public TextWriter Writer { get; } = textWriter; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
using HydraScript.Lib.BackEnd.Impl.Addresses; | ||
|
||
namespace HydraScript.Lib.BackEnd.Impl.Instructions; | ||
|
||
public class Halt : Instruction | ||
{ | ||
public override bool End => true; | ||
|
||
public override IAddress Execute(IExecuteParams executeParams) | ||
{ | ||
executeParams.Frames.Pop(); | ||
return new HashAddress(seed: 0); | ||
} | ||
|
||
protected override string ToStringInternal() => "End"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
14 changes: 14 additions & 0 deletions
14
src/HydraScript.Lib/BackEnd/Impl/Instructions/PopParameter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
namespace HydraScript.Lib.BackEnd.Impl.Instructions; | ||
|
||
public class PopParameter(string parameter) : Instruction | ||
{ | ||
public override IAddress Execute(IExecuteParams executeParams) | ||
{ | ||
var argument = executeParams.Arguments.Dequeue(); | ||
executeParams.Frames.Peek()[parameter] = argument; | ||
return Address.Next; | ||
} | ||
|
||
protected override string ToStringInternal() => | ||
$"PopParameter {parameter}"; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
namespace HydraScript.Lib.BackEnd.Impl.Instructions; | ||
|
||
public class Print(IValue value) : Instruction | ||
{ | ||
public override IAddress Execute(IExecuteParams executeParams) | ||
{ | ||
executeParams.Writer.WriteLine(value.Get(executeParams.Frames.Peek())); | ||
return Address.Next; | ||
} | ||
|
||
protected override string ToStringInternal() => | ||
$"Print {value}"; | ||
} |
14 changes: 14 additions & 0 deletions
14
src/HydraScript.Lib/BackEnd/Impl/Instructions/PushParameter.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
namespace HydraScript.Lib.BackEnd.Impl.Instructions; | ||
|
||
public class PushParameter(IValue value) : Instruction | ||
{ | ||
public override IAddress Execute(IExecuteParams executeParams) | ||
{ | ||
executeParams.Arguments.Enqueue( | ||
value.Get(executeParams.Frames.Peek())); | ||
return Address.Next; | ||
} | ||
|
||
protected override string ToStringInternal() => | ||
$"PushParameter {value}"; | ||
} |
9 changes: 3 additions & 6 deletions
9
...b/BackEnd/Instructions/RemoveFromArray.cs → ...kEnd/Impl/Instructions/RemoveFromArray.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
namespace HydraScript.Lib.BackEnd.Impl.Instructions; | ||
|
||
public class Return(IValue? value = null) : Instruction | ||
{ | ||
public override IAddress Execute(IExecuteParams executeParams) | ||
{ | ||
var frame = executeParams.Frames.Pop(); | ||
var call = executeParams.CallStack.Pop(); | ||
if (call.Where != null && value != null) | ||
{ | ||
executeParams.Frames.Peek()[call.Where] = value.Get(frame); | ||
} | ||
|
||
return frame.ReturnAddress; | ||
} | ||
|
||
protected override string ToStringInternal() => | ||
$"Return{(value != null ? $" {value}" : "")}"; | ||
} |
8 changes: 3 additions & 5 deletions
8
...d/Instructions/WithAssignment/AsString.cs → ...l/Instructions/WithAssignment/AsString.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
src/HydraScript.Lib/BackEnd/Impl/Instructions/WithAssignment/CallFunction.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
namespace HydraScript.Lib.BackEnd.Impl.Instructions.WithAssignment; | ||
|
||
public class CallFunction( | ||
FunctionInfo function, | ||
bool hasReturnValue) : Simple(null, (null, null), "Call ") | ||
{ | ||
protected override void OnSetOfAddress(IAddress address) | ||
{ | ||
if (hasReturnValue) | ||
base.OnSetOfAddress(address); | ||
} | ||
|
||
public override IAddress Execute(IExecuteParams executeParams) | ||
{ | ||
var frame = new Frame(Address.Next, executeParams.Frames.Peek()); | ||
executeParams.CallStack.Push(new Call(Address, function, Left)); | ||
executeParams.Frames.Push(frame); | ||
return function.Start; | ||
} | ||
|
||
protected override string ToStringInternal() => Left == null | ||
? $"Call {function}" | ||
: $"{Left} = Call {function}"; | ||
} |
8 changes: 3 additions & 5 deletions
8
...ignment/ComplexData/Create/CreateArray.cs → ...ignment/ComplexData/Create/CreateArray.cs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.