Daily update on 20251020-041041 by Nitload Youmu. Additional Message : Code cleanup and new design of parallel (maybe THE THENTH VERSION? Tough work!).

Signed-off-by: Nitload <YoumuLiu_NSI@whv0t.onmicrosoft.com>
This commit is contained in:
Nitload
2025-10-20 04:10:41 +08:00
parent 1927f4fdf3
commit 547ba80a01
141 changed files with 5475 additions and 6175 deletions
+26 -29
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="AbstractSyntaxTree.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="AbstractSyntaxTree"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Collections;
using System;
@@ -51,9 +48,9 @@ namespace StgSharp.Script
public TNode Root => _root;
public bool Contains( TNode node )
public bool Contains(TNode node)
{
return _allToken.Contains( node );
return _allToken.Contains(node);
}
}
+46 -49
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="CodeLineHelper.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="CodeLineHelper"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
@@ -37,66 +34,66 @@ namespace StgSharp.Script
public static class CodeLineHelper
{
public static string SliceAndTrim( this string line, int startIndex )
public static string SliceAndTrim(this string line, int startIndex)
{
if( line == null ) {
throw new ArgumentNullException( nameof( line ) );
if (line == null) {
throw new ArgumentNullException(nameof(line));
}
if( startIndex < 0 || startIndex >= line.Length ) {
throw new ArgumentOutOfRangeException( nameof( startIndex ) );
if (startIndex < 0 || startIndex >= line.Length) {
throw new ArgumentOutOfRangeException(nameof(startIndex));
}
ReadOnlySpan<char> sourceSpan = line.AsSpan();
ReadOnlySpan<char> subSpan = sourceSpan.Slice( startIndex );
ReadOnlySpan<char> subSpan = sourceSpan.Slice(startIndex);
int start = 0;
while( start < subSpan.Length && char.IsWhiteSpace( subSpan[ start ] ) ) {
while (start < subSpan.Length && char.IsWhiteSpace(subSpan[start])) {
start++;
}
int end = subSpan.Length - 1;
while( end >= start && char.IsWhiteSpace( subSpan[ end ] ) ) {
while (end >= start && char.IsWhiteSpace(subSpan[end])) {
end--;
}
if( start > end ) {
if (start > end) {
return string.Empty;
}
int finalLength = end - start + 1;
return new string( subSpan.Slice( start, finalLength ) );
return new string(subSpan.Slice(start, finalLength));
}
public static string SliceAndTrim( this string line, int startIndex, int length )
public static string SliceAndTrim(this string line, int startIndex, int length)
{
if( line == null ) {
throw new ArgumentNullException( nameof( line ) );
if (line == null) {
throw new ArgumentNullException(nameof(line));
}
if( startIndex < 0 || startIndex >= line.Length ) {
throw new ArgumentOutOfRangeException( nameof( startIndex ) );
if (startIndex < 0 || startIndex >= line.Length) {
throw new ArgumentOutOfRangeException(nameof(startIndex));
}
if( length < 0 || startIndex + length > line.Length ) {
throw new ArgumentOutOfRangeException( nameof( length ) );
if (length < 0 || startIndex + length > line.Length) {
throw new ArgumentOutOfRangeException(nameof(length));
}
ReadOnlySpan<char> sourceSpan = line.AsSpan();
ReadOnlySpan<char> subSpan = sourceSpan.Slice( startIndex, length );
ReadOnlySpan<char> subSpan = sourceSpan.Slice(startIndex, length);
int start = 0;
while( start < subSpan.Length && char.IsWhiteSpace( subSpan[ start ] ) ) {
while (start < subSpan.Length && char.IsWhiteSpace(subSpan[start])) {
start++;
}
int end = subSpan.Length - 1;
while( end >= start && char.IsWhiteSpace( subSpan[ end ] ) ) {
while (end >= start && char.IsWhiteSpace(subSpan[end])) {
end--;
}
if( start > end ) {
if (start > end) {
return string.Empty;
}
int finalLength = end - start + 1;
return new string( subSpan.Slice( start, finalLength ) );
return new string(subSpan.Slice(start, finalLength));
}
}
+26 -33
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="CompileDepthState.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="CompileDepthState"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Data;
@@ -47,18 +44,14 @@ namespace StgSharp.Script
public class CompileDepthMark
{
internal CompileDepthMark( int operatorBegin, int operandBegin, int usage )
internal CompileDepthMark(int operatorBegin, int operandBegin, int usage)
{
OperatorBegin = operatorBegin;
OperandBegin = operandBegin;
Usage = usage;
}
internal CompileDepthMark(
int operatorBegin,
int operandBegin,
int usage,
ICompileDepthState stateCache )
internal CompileDepthMark(int operatorBegin, int operandBegin, int usage, ICompileDepthState stateCache)
{
OperatorBegin = operatorBegin;
OperandBegin = operandBegin;
+91 -98
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="CompileStack.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="CompileStack"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Collections;
using System;
@@ -55,14 +52,14 @@ namespace StgSharp.Script
);
private RandomAccessibleStack<OperandIndex> _isNode = new RandomAccessibleStack<OperandIndex>(
8 );
8);
private Stack<Stack<TNode>> _statementCache = new Stack<Stack<TNode>>();
private TNode _lastNode;
public CompileStack()
{
_depthStack.Push( new CompileDepthMark( 0, 0, 0, null! ) );
_statementCache.Push( new Stack<TNode>() );
_depthStack.Push(new CompileDepthMark(0, 0, 0, null!));
_statementCache.Push(new Stack<TNode>());
}
public bool IsLastAddedOperator { get; private set; }
@@ -99,86 +96,82 @@ namespace StgSharp.Script
Stack<TNode> statementsInDepth = _statementCache.Pop();
}
public bool GetOperandAt( Index i, out TNode operandNode, out Token operandToken )
public bool GetOperandAt(Index i, out TNode operandNode, out Token operandToken)
{
OperandIndex index = _isNode[ i ];
if( index.IsNode )
OperandIndex index = _isNode[i];
if (index.IsNode)
{
operandNode = _nodeArray[ index.Index ];
operandNode = _nodeArray[index.Index];
operandToken = Token.Empty;
return true;
} else
{
operandToken = _tokenArray[ index.Index ];
operandToken = _tokenArray[index.Index];
operandNode = default!;
return false;
}
}
public bool GetOperandAt(
CompileDepthMark depth,
Index i,
out Token operandToken,
out TNode operandNode )
public bool GetOperandAt(CompileDepthMark depth, Index i, out Token operandToken, out TNode operandNode)
{
OperandIndex index = _isNode[ i ];
OperandIndex index = _isNode[i];
_depthStack.Contains( depth );
if( index.IsNode )
_depthStack.Contains(depth);
if (index.IsNode)
{
operandNode = _nodeArray[ index.Index ];
operandNode = _nodeArray[index.Index];
operandToken = Token.Empty;
return true;
} else
{
operandToken = _tokenArray[ index.Index ];
operandToken = _tokenArray[index.Index];
operandNode = default!;
return false;
}
}
public CompileDepthMark IncreaseDepth( int usage )
public CompileDepthMark IncreaseDepth(int usage)
{
CompileDepthMark mark =
new CompileDepthMark( OperatorCount, OperandCount, usage );
new CompileDepthMark(OperatorCount, OperandCount, usage);
_depthStack.Push( mark );
_statementCache.Push( new Stack<TNode>() );
_depthStack.Push(mark);
_statementCache.Push(new Stack<TNode>());
return mark;
}
public TNode PackAllStatements()
{
if( StatementsInDepth.Count == 0 ) {
if (StatementsInDepth.Count == 0) {
return TNode.Empty;
}
TNode end = StatementsInDepth.Peek();
TNode first = end;
while( StatementsInDepth.Count > 0 )
while (StatementsInDepth.Count > 0)
{
first = StatementsInDepth.Pop();
end.PrependNode( first );
end.PrependNode(first);
end = first;
}
return first;
}
public bool PeekOperand( out Token t, out TNode n )
public bool PeekOperand(out Token t, out TNode n)
{
if( OperandAheadOfDepth <= 0 )
if (OperandAheadOfDepth <= 0)
{
t = Token.Empty;
n = TNode.Empty;
return false;
}
if( _isNode.Pop().IsNode )
if (_isNode.Pop().IsNode)
{
t = Token.Empty;
n = _nodeArray[ _nodeCount - 1 ];
n = _nodeArray[_nodeCount - 1];
return true;
} else
{
t = _tokenArray[ _tokenCount - 1 ];
t = _tokenArray[_tokenCount - 1];
n = TNode.Empty;
return false;
}
@@ -186,28 +179,28 @@ namespace StgSharp.Script
public Token PeekOperator()
{
if( OperatorAheadOfDepth > 0 ) {
return _operatorArray[ _operatorCount - 1 ];
if (OperatorAheadOfDepth > 0) {
return _operatorArray[_operatorCount - 1];
}
return Token.Empty;
}
public bool PopOperand( out Token t, out TNode n )
public bool PopOperand(out Token t, out TNode n)
{
if( OperandAheadOfDepth <= 0 )
if (OperandAheadOfDepth <= 0)
{
t = Token.Empty;
n = TNode.Empty;
return false;
}
if( _isNode.Pop().IsNode )
if (_isNode.Pop().IsNode)
{
t = Token.Empty;
n = _nodeArray[ --_nodeCount ];
n = _nodeArray[--_nodeCount];
return true;
} else
{
t = _tokenArray[ --_tokenCount ];
t = _tokenArray[--_tokenCount];
n = TNode.Empty;
return false;
}
@@ -215,122 +208,122 @@ namespace StgSharp.Script
public Token PopOperator()
{
if( OperatorAheadOfDepth > 0 )
if (OperatorAheadOfDepth > 0)
{
_operatorCount--;
return _operatorArray[ _operatorCount ];
return _operatorArray[_operatorCount];
}
return Token.Empty;
}
public void PushOperand( TNode node )
public void PushOperand(TNode node)
{
if( _nodeArray.Length == _nodeCount ) {
Array.Resize( ref _nodeArray, _nodeArray.Length * 2 );
if (_nodeArray.Length == _nodeCount) {
Array.Resize(ref _nodeArray, _nodeArray.Length * 2);
}
_nodeArray[ _nodeCount ] = node;
_isNode.Push( new( true, _nodeCount ) );
_nodeArray[_nodeCount] = node;
_isNode.Push(new(true, _nodeCount));
_nodeCount++;
IsLastAddedOperator = false;
}
public void PushOperand( Token token )
public void PushOperand(Token token)
{
if( _tokenArray.Length == _tokenCount ) {
Array.Resize( ref _tokenArray, _tokenArray.Length * 2 );
if (_tokenArray.Length == _tokenCount) {
Array.Resize(ref _tokenArray, _tokenArray.Length * 2);
}
_tokenArray[ _tokenCount ] = token;
_isNode.Push( new( false, _tokenCount ) );
_tokenArray[_tokenCount] = token;
_isNode.Push(new(false, _tokenCount));
_tokenCount++;
IsLastAddedOperator = false;
}
public void PushOperator( Token token )
public void PushOperator(Token token)
{
if( _operatorArray.Length == _operatorCount ) {
Array.Resize( ref _operatorArray, _operatorArray.Length * 2 );
if (_operatorArray.Length == _operatorCount) {
Array.Resize(ref _operatorArray, _operatorArray.Length * 2);
}
_operatorArray[ _operatorCount ] = token;
_operatorArray[_operatorCount] = token;
_operatorCount++;
IsLastAddedOperator = true;
}
public T StateOfCurrentDepth<T>() where T: class, ICompileDepthState
{
return ( CurrentDepthMark.StateCache as T )!;
return (CurrentDepthMark.StateCache as T)!;
}
public bool TryPeekOperand( out bool isNode, out Token t, out TNode n )
public bool TryPeekOperand(out bool isNode, out Token t, out TNode n)
{
if( OperandAheadOfDepth <= 0 )
if (OperandAheadOfDepth <= 0)
{
t = Token.Empty;
n = TNode.Empty;
isNode = false;
return false;
}
if( _isNode.Pop().IsNode )
if (_isNode.Pop().IsNode)
{
t = Token.Empty;
n = _nodeArray[ _nodeCount - 1 ];
n = _nodeArray[_nodeCount - 1];
isNode = true;
return true;
} else
{
t = _tokenArray[ _tokenCount - 1 ];
t = _tokenArray[_tokenCount - 1];
n = TNode.Empty;
isNode = false;
return false;
}
}
public bool TryPeekOperator( out Token op )
public bool TryPeekOperator(out Token op)
{
if( OperatorAheadOfDepth > 0 )
if (OperatorAheadOfDepth > 0)
{
op = _operatorArray[ _operatorCount - 1 ];
op = _operatorArray[_operatorCount - 1];
return true;
}
op = Token.Empty;
return false;
}
public bool TryPopOperand( out bool isNode, out Token t, out TNode n )
public bool TryPopOperand(out bool isNode, out Token t, out TNode n)
{
if( OperandAheadOfDepth <= 0 )
if (OperandAheadOfDepth <= 0)
{
t = Token.Empty;
n = TNode.Empty;
isNode = false;
return false;
}
if( _isNode.Pop().IsNode )
if (_isNode.Pop().IsNode)
{
t = Token.Empty;
n = _nodeArray[ --_nodeCount ];
n = _nodeArray[--_nodeCount];
isNode = true;
return true;
} else
{
t = _tokenArray[ --_tokenCount ];
t = _tokenArray[--_tokenCount];
n = TNode.Empty;
isNode = false;
return true;
}
}
public bool TryPopOperator( out Token op )
public bool TryPopOperator(out Token op)
{
if( OperatorAheadOfDepth > 0 )
if (OperatorAheadOfDepth > 0)
{
op = _operatorArray[ --_operatorCount ];
op = _operatorArray[--_operatorCount];
return true;
}
op = Token.Empty;
return false;
}
private record struct OperandIndex( bool IsNode, int Index );
private record struct OperandIndex(bool IsNode, int Index);
}
}
+26 -29
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="IScriptSourceProvider.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="IScriptSourceProvider"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
@@ -45,7 +42,7 @@ namespace StgSharp.Script
string ReadLine();
string ReadLine( out int position );
string ReadLine(out int position);
/// <summary>
/// Return part of current provider.
@@ -56,7 +53,7 @@ namespace StgSharp.Script
/// <returns>
///
/// </returns>
public IScriptSourceProvider Slice( int location, int count );
public IScriptSourceProvider Slice(int location, int count);
}
}
+25 -28
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="IScriptTokenReader.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="IScriptTokenReader"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
namespace StgSharp.Script
{
public interface IScriptTokenReader
@@ -37,7 +34,7 @@ namespace StgSharp.Script
Token ReadToken();
bool TryReadToken( out Token t );
bool TryReadToken(out Token t);
}
}
+25 -28
View File
@@ -1,39 +1,36 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ISyntaxAnalyzer.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ISyntaxAnalyzer"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
namespace StgSharp.Script
{
public interface ISyntaxAnalyzer
{
void AppendToken( Token t );
void AppendToken(Token t);
}
}
+27 -31
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ISyntaxNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ISyntaxNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Collections;
using StgSharp.Script.Express;
@@ -39,8 +36,7 @@ using System.Text;
namespace StgSharp.Script
{
public interface ISyntaxNode<TNode, TType> where TNode: ISyntaxNode<TNode, TType>
where TType: ITypeSource<TType>
public interface ISyntaxNode<TNode, TType> where TNode: ISyntaxNode<TNode, TType> where TType: ITypeSource<TType>
{
long NodeFlag { get; }
@@ -61,9 +57,9 @@ namespace StgSharp.Script
TType EqualityTypeConvert { get; }
void AppendNode( TNode nextToken );
void AppendNode(TNode nextToken);
void PrependNode( TNode previusNode );
void PrependNode(TNode previusNode);
}
}
+25 -28
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ITypeSource.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ITypeSource"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -39,7 +36,7 @@ namespace StgSharp.Script
public interface ITypeSource<in TConvert> where TConvert: ITypeSource<TConvert>
{
bool IsConvertable( TConvert targetType );
bool IsConvertable(TConvert targetType);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ScriptSourceTransmitter.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ScriptSourceTransmitter"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Concurrent;
@@ -46,7 +43,7 @@ namespace StgSharp.Script
{
private static ScriptSourceTransmitter _empty = new ScriptSourceTransmitter(
string.Empty, 0, 0 )
string.Empty, 0, 0)
{
_cache = [],
_buffer = []
@@ -58,14 +55,14 @@ namespace StgSharp.Script
private List<string> _cache;
private readonly string _completeMark;
internal ScriptSourceTransmitter( string[] buffer, int start )
internal ScriptSourceTransmitter(string[] buffer, int start)
{
_buffer = buffer;
_begin = start;
_isWriting = false;
}
public ScriptSourceTransmitter( string endMark, int start )
public ScriptSourceTransmitter(string endMark, int start)
{
_cache = new List<string>();
_completeMark = endMark;
@@ -73,16 +70,15 @@ namespace StgSharp.Script
_index = 0;
}
public ScriptSourceTransmitter( string endMark, int start, int capacity )
public ScriptSourceTransmitter(string endMark, int start, int capacity)
{
_cache = new List<string>( capacity );
_cache = new List<string>(capacity);
_completeMark = endMark;
_begin = start;
_index = 0;
}
public bool IsEmpty => _isWriting ?
( _cache.Count == 0 ) : ( _buffer.Length == 0 ) || ( _index >= _buffer.Length );
public bool IsEmpty => _isWriting ? (_cache.Count == 0) : (_buffer.Length == 0) || (_index >= _buffer.Length);
public bool IsFrozen => !_isWriting;
@@ -92,7 +88,7 @@ namespace StgSharp.Script
public void EndWriting()
{
if( !_isWriting ) {
if (!_isWriting) {
return;
}
_isWriting = false;
@@ -102,53 +98,53 @@ namespace StgSharp.Script
public string ReadLine()
{
if( _isWriting ) {
throw new InvalidOperationException( "Cannot read before all writing operation." );
if (_isWriting) {
throw new InvalidOperationException("Cannot read before all writing operation.");
}
if( _index >= _buffer.Length ) {
if (_index >= _buffer.Length) {
return string.Empty;
}
string str = _buffer[ _index ];
string str = _buffer[_index];
_index++;
return str;
}
public string ReadLine( out int position )
public string ReadLine(out int position)
{
if( _isWriting ) {
throw new InvalidOperationException( "Cannot read before all writing operation." );
if (_isWriting) {
throw new InvalidOperationException("Cannot read before all writing operation.");
}
if( _index >= _buffer.Length )
if (_index >= _buffer.Length)
{
position = -1;
return string.Empty;
}
position = _begin + _index;
string str = _buffer[ _index ];
string str = _buffer[_index];
_index++;
return str;
}
public IScriptSourceProvider Slice( int location, int count )
public IScriptSourceProvider Slice(int location, int count)
{
ArgumentOutOfRangeException.ThrowIfLessThan( location, _begin );
ArgumentOutOfRangeException.ThrowIfLessThan(location, _begin);
ArgumentOutOfRangeException.ThrowIfGreaterThan(
location + count, _begin + _buffer.Length );
location + count, _begin + _buffer.Length);
return new ScriptSourceTransmitter(
_buffer.AsSpan().Slice( location, count ).ToArray(), location );
_buffer.AsSpan().Slice(location, count).ToArray(), location);
}
public void WriteLine( string line )
public void WriteLine(string line)
{
if( !_isWriting ) {
if (!_isWriting) {
return;
}
if( string.Equals( _completeMark, line ) )
if (string.Equals(_completeMark, line))
{
EndWriting();
return;
}
_cache.Add( line );
_cache.Add(line);
}
}
+28 -31
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="Token.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="Token"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -47,7 +44,7 @@ namespace StgSharp.Script
public readonly string Value;
public readonly TokenFlag Flag;
public Token( string chars, int lineNumber, int columnNumber, TokenFlag flag )
public Token(string chars, int lineNumber, int columnNumber, TokenFlag flag)
{
Value = chars;
Line = lineNumber;
@@ -57,10 +54,10 @@ namespace StgSharp.Script
public static Token Empty => EmptyToken;
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public Token ReLocate( int line, int column )
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Token ReLocate(int line, int column)
{
return new Token( Value, line, column, Flag );
return new Token(Value, line, column, Flag);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpBuiltinType.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpBuiltinType"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Data;
using System;
@@ -41,8 +38,8 @@ namespace StgSharp.Script.Express
private Type _marshalType;
internal ExpBuiltinType( string name, Type origin )
: base( name, ScriptSourceTransmitter.Empty )
internal ExpBuiltinType(string name, Type origin)
: base(name, ScriptSourceTransmitter.Empty)
{
_marshalType = origin;
}
@@ -52,7 +49,7 @@ namespace StgSharp.Script.Express
return;
}
//A method convert value to CLR type
//Used for direct running rather than compiling to C# code.
// A method convert value to CLR type
// Used for direct running rather than compiling to C# code.
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpCollection.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpCollection"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Concurrent;
@@ -42,7 +39,7 @@ namespace StgSharp.Script.Express
protected internal string _accurateType;
protected ExpCollectionBase( string accurateType )
protected ExpCollectionBase(string accurateType)
{
_accurateType = accurateType;
}
@@ -51,7 +48,7 @@ namespace StgSharp.Script.Express
public abstract int Count { get; }
public override sealed IScriptSourceProvider SourceProvider => ScriptSourceTransmitter.Empty;
public sealed override IScriptSourceProvider SourceProvider => ScriptSourceTransmitter.Empty;
public string MemberType
{
@@ -65,7 +62,7 @@ namespace StgSharp.Script.Express
public abstract IEnumerator<ExpElementInstance> GetEnumerator();
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
memberNode = ExpSyntaxNode.Empty;
return false;
@@ -83,32 +80,32 @@ namespace StgSharp.Script.Express
private ExpElementInstance[] _collection;
public ExpArray( string accurateType ) : base( accurateType ) { }
public ExpArray(string accurateType) : base(accurateType) { }
public ExpElementInstance this[ int index ]
public ExpElementInstance this[int index]
{
get { return _collection[ index ]; }
get { return _collection[index]; }
set
{
if( value.TypeName != MemberType ) {
throw new ExpInvalidCollectionMemberTypeException( value, this );
if (value.TypeName != MemberType) {
throw new ExpInvalidCollectionMemberTypeException(value, this);
}
_collection[ index ] = value;
_collection[index] = value;
}
}
public override int Count => _collection.Length;
public override string Name => ExpressCompile.PoolString( "ARRAY" );
public override string Name => ExpressCompile.PoolString("ARRAY");
public override ExpSyntaxNode CreateInstanceNode( Token t )
public override ExpSyntaxNode CreateInstanceNode(Token t)
{
throw new NotImplementedException();
}
public override IEnumerator<ExpElementInstance> GetEnumerator()
{
return ( ( IEnumerable<ExpElementInstance> )_collection )
return ((IEnumerable<ExpElementInstance>)_collection)
.GetEnumerator();
}
@@ -120,13 +117,13 @@ namespace StgSharp.Script.Express
private ConcurrentBag<ExpElementInstance> _collection = new ConcurrentBag<ExpElementInstance>(
);
public ExpBag( string accurateType ) : base( accurateType ) { }
public ExpBag(string accurateType) : base(accurateType) { }
public override int Count => _collection.Count;
public override string Name => ExpressCompile.PoolString( "BAG" );
public override string Name => ExpressCompile.PoolString("BAG");
public override ExpSyntaxNode CreateInstanceNode( Token t )
public override ExpSyntaxNode CreateInstanceNode(Token t)
{
throw new NotImplementedException();
}
@@ -143,13 +140,13 @@ namespace StgSharp.Script.Express
private List<ExpElementInstance> _collection = new List<ExpElementInstance>();
public ExpList( string accurateType ) : base( accurateType ) { }
public ExpList(string accurateType) : base(accurateType) { }
public override int Count => _collection.Count;
public override string Name => ExpressCompile.PoolString( "LIST" );
public override string Name => ExpressCompile.PoolString("LIST");
public override ExpSyntaxNode CreateInstanceNode( Token t )
public override ExpSyntaxNode CreateInstanceNode(Token t)
{
throw new NotImplementedException();
}
@@ -166,28 +163,28 @@ namespace StgSharp.Script.Express
private HashSet<ExpElementInstance> _collection = new();
public ExpSet( string accurateType ) : base( accurateType ) { }
public ExpSet(string accurateType) : base(accurateType) { }
public override int Count => _collection.Count;
public override string Name => ExpressCompile.PoolString( "SET" );
public override string Name => ExpressCompile.PoolString("SET");
public void Add( ExpElementInstance token )
public void Add(ExpElementInstance token)
{
if( token.TypeName != MemberType ) {
throw new ExpInvalidCollectionMemberTypeException( token, this );
if (token.TypeName != MemberType) {
throw new ExpInvalidCollectionMemberTypeException(token, this);
}
_collection.Add( token );
_collection.Add(token);
}
public override ExpSyntaxNode CreateInstanceNode( Token t )
public override ExpSyntaxNode CreateInstanceNode(Token t)
{
throw new NotImplementedException();
}
public override sealed IEnumerator<ExpElementInstance> GetEnumerator()
public sealed override IEnumerator<ExpElementInstance> GetEnumerator()
{
return ( ( IEnumerable<ExpElementInstance> )_collection )
return ((IEnumerable<ExpElementInstance>)_collection)
.GetEnumerator();
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpCollectionInstance.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpCollectionInstance"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
@@ -40,7 +37,7 @@ namespace StgSharp.Script.Express
protected internal (int min, int max) _range;
protected internal ExpElementType _memberType;
protected ExpCollectionInstanceBase( Token source ) : base( source ) { }
protected ExpCollectionInstanceBase(Token source) : base(source) { }
public abstract ExpCollectionBase CollectionValue { get; }
@@ -64,8 +61,8 @@ namespace StgSharp.Script.Express
private ExpSet _collection;
public ExpSetInstance( Token source, ExpSet set )
: base( source )
public ExpSetInstance(Token source, ExpSet set)
: base(source)
{
_collection = set;
}
@@ -82,8 +79,8 @@ namespace StgSharp.Script.Express
private ExpBag _collection;
public ExpBagInstance( Token source, ExpBag bag )
: base( source )
public ExpBagInstance(Token source, ExpBag bag)
: base(source)
{
_collection = bag;
}
@@ -100,8 +97,8 @@ namespace StgSharp.Script.Express
private ExpList _collection;
public ExpListInstance( Token source, ExpList list )
: base( source )
public ExpListInstance(Token source, ExpList list)
: base(source)
{
_collection = list;
}
@@ -118,8 +115,8 @@ namespace StgSharp.Script.Express
private ExpArray _collection;
public ExpArrayInstance( Token source, ExpArray array )
: base( source )
public ExpArrayInstance(Token source, ExpArray array)
: base(source)
{
_collection = array;
}
+42 -45
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpLogic.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpLogic"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
@@ -47,14 +44,14 @@ namespace StgSharp.Script.Express
public struct ExpLogic
{
public static readonly ExpLogic False = new ExpLogic( ExpLogicValue.False );
public static readonly ExpLogic False = new ExpLogic(ExpLogicValue.False);
public static readonly ExpLogic True = new ExpLogic( ExpLogicValue.True );
public static readonly ExpLogic Unknown = new ExpLogic( ExpLogicValue.Unknown );
public static readonly ExpLogic True = new ExpLogic(ExpLogicValue.True);
public static readonly ExpLogic Unknown = new ExpLogic(ExpLogicValue.Unknown);
private readonly ExpLogicValue _value;
public ExpLogic( ExpLogicValue value )
public ExpLogic(ExpLogicValue value)
{
_value = value;
}
@@ -65,7 +62,7 @@ namespace StgSharp.Script.Express
public bool IsUnknown => _value == ExpLogicValue.Unknown;
[MethodImpl( MethodImplOptions.AggressiveInlining )]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool ToBoolean()
{
return _value == ExpLogicValue.True;
@@ -73,11 +70,11 @@ namespace StgSharp.Script.Express
public override string ToString() => _value.ToString();
public static bool TryParse( ReadOnlySpan<char> value, out ExpLogic result )
public static bool TryParse(ReadOnlySpan<char> value, out ExpLogic result)
{
if( Enum.TryParse<ExpLogicValue>( value, out ExpLogicValue e ) )
if (Enum.TryParse<ExpLogicValue>(value, out ExpLogicValue e))
{
result = new ExpLogic( e );
result = new ExpLogic(e);
return true;
}
result = default;
@@ -85,19 +82,19 @@ namespace StgSharp.Script.Express
}
// NOT !
public static ExpLogic operator !( ExpLogic a )
public static ExpLogic operator !(ExpLogic a)
{
return a.IsTrue ? False : a.IsFalse ? True : Unknown;
}
// AND &
public static ExpLogic operator &( ExpLogic a, ExpLogic b )
public static ExpLogic operator &(ExpLogic a, ExpLogic b)
{
if( a.IsFalse || b.IsFalse ) {
if (a.IsFalse || b.IsFalse) {
return False;
}
if( a.IsUnknown || b.IsUnknown ) {
if (a.IsUnknown || b.IsUnknown) {
return Unknown;
}
@@ -105,23 +102,23 @@ namespace StgSharp.Script.Express
}
// XOR ^
public static ExpLogic operator ^( ExpLogic a, ExpLogic b )
public static ExpLogic operator ^(ExpLogic a, ExpLogic b)
{
if( a.IsUnknown || b.IsUnknown ) {
if (a.IsUnknown || b.IsUnknown) {
return Unknown;
}
return ( a.IsTrue ^ b.IsTrue ) ? True : False;
return (a.IsTrue ^ b.IsTrue) ? True : False;
}
// OR |
public static ExpLogic operator |( ExpLogic a, ExpLogic b )
public static ExpLogic operator |(ExpLogic a, ExpLogic b)
{
if( a.IsTrue || b.IsTrue ) {
if (a.IsTrue || b.IsTrue) {
return True;
}
if( a.IsUnknown || b.IsUnknown ) {
if (a.IsUnknown || b.IsUnknown) {
return Unknown;
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="BuiltinType.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="BuiltinType"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="DefaultSchema.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="DefaultSchema"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Frozen;
@@ -54,80 +51,72 @@ namespace StgSharp.Script.Express
get => _onlyInstance;
}
public override void LoadFromSource( ExpSchemaSource source )
public override void LoadFromSource(ExpSchemaSource source)
{
return;
}
public override bool TryGetConst( string name, out ExpElementInstance c )
public override bool TryGetConst(string name, out ExpElementInstance c)
{
return ConstDict.TryGetValue( name, out c );
return ConstDict.TryGetValue(name, out c);
}
public override bool TryGetEntity( string name, out ExpEntitySource e )
public override bool TryGetEntity(string name, out ExpEntitySource e)
{
e = null;
return false;
}
public override bool TryGetFunction( string name, out ExpFunctionSource f )
public override bool TryGetFunction(string name, out ExpFunctionSource f)
{
return FunctionDict.TryGetValue( name, out f! );
return FunctionDict.TryGetValue(name, out f!);
}
public override bool TryGetProcedure( string name, out ExpProcedureSource p )
public override bool TryGetProcedure(string name, out ExpProcedureSource p)
{
return ProcedureDict.TryGetValue( name, out p! );
return ProcedureDict.TryGetValue(name, out p!);
}
public override bool TryGetRule( string name, out ExpRuleSource r )
public override bool TryGetRule(string name, out ExpRuleSource r)
{
r = null!;
return false;
}
public override bool TryGetSchemaInclude( string name, out ExpSchema include )
public override bool TryGetSchemaInclude(string name, out ExpSchema include)
{
include = null!;
return false;
}
public override bool TryGetType( string name, out ExpTypeSource t )
public override bool TryGetType(string name, out ExpTypeSource t)
{
return TypeDict.TryGetValue( name, out t );
return TypeDict.TryGetValue(name, out t);
}
internal void Init()
{
IEnumerable<KeyValuePair<string, ExpTypeSource>> builtinTypeSource = [
new KeyValuePair<string, ExpTypeSource>(
PoolString( Keyword.Integer ),
new ExpBuiltinType( Keyword.Integer, typeof( int ) ) ),
new KeyValuePair<string, ExpTypeSource>(
PoolString( Keyword.Real ), new ExpBuiltinType( Keyword.Real, typeof( float ) ) ),
new KeyValuePair<string, ExpTypeSource>(
PoolString( Keyword.Boolean ),
new ExpBuiltinType( Keyword.Boolean, typeof( bool ) ) ),
new KeyValuePair<string, ExpTypeSource>(
PoolString( Keyword.Logical ),
new ExpBuiltinType( Keyword.Logical, typeof( ExpLogic ) ) ),
new KeyValuePair<string, ExpTypeSource>(
PoolString( Keyword.String ),
new ExpBuiltinType( Keyword.String, typeof( string ) ) ),
new KeyValuePair<string, ExpTypeSource>(
PoolString( Keyword.Binary ),
new ExpBuiltinType( Keyword.Binary, typeof( BitArray ) ) ),
];
TypeDict = new Dictionary<string, ExpTypeSource>( builtinTypeSource,
Multiplexer ).ToFrozenDictionary();
IEnumerable<KeyValuePair<string, ExpTypeSource>> builtinTypeSource = [ new KeyValuePair<string, ExpTypeSource>(
PoolString(Keyword.Integer),
new ExpBuiltinType(Keyword.Integer, typeof(int))), new KeyValuePair<string, ExpTypeSource>(
PoolString(Keyword.Real), new ExpBuiltinType(Keyword.Real, typeof(float))), new KeyValuePair<string, ExpTypeSource>(
PoolString(Keyword.Boolean),
new ExpBuiltinType(Keyword.Boolean, typeof(bool))), new KeyValuePair<string, ExpTypeSource>(
PoolString(Keyword.Logical),
new ExpBuiltinType(Keyword.Logical, typeof(ExpLogic))), new KeyValuePair<string, ExpTypeSource>(
PoolString(Keyword.String),
new ExpBuiltinType(Keyword.String, typeof(string))), new KeyValuePair<string, ExpTypeSource>(
PoolString(Keyword.Binary),
new ExpBuiltinType(Keyword.Binary, typeof(BitArray))), ];
TypeDict = new Dictionary<string, ExpTypeSource>(builtinTypeSource,
Multiplexer).ToFrozenDictionary();
ConstDict = new Dictionary<string, ExpElementInstance>( Multiplexer ) {
{ PoolString( "PI" ), new ExpRealNumberNode(
new Token( PoolString( "PI" ), -1, -1, TokenFlag.Number ), MathF.PI, true ) },
{ PoolString( "E" ), new ExpRealNumberNode(
new Token( PoolString( "E" ), -1, -1, TokenFlag.Number ), MathF.E, true ) },
ConstDict = new Dictionary<string, ExpElementInstance>(Multiplexer) {
{ PoolString("PI"), new ExpRealNumberNode(
new Token(PoolString("PI"), -1, -1, TokenFlag.Number), MathF.PI, true) },
{ PoolString("E"), new ExpRealNumberNode(
new Token(PoolString("E"), -1, -1, TokenFlag.Number), MathF.E, true) },
}.ToFrozenDictionary();
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpCompile.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpCompile"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using CommunityToolkit.HighPerformance.Buffers;
using StgSharp.Collections;
@@ -56,7 +53,7 @@ namespace StgSharp.Script.Express
{
get
{
if( _multiplexer == null ) {
if (_multiplexer == null) {
throw new ExpCompileNotInitializedException();
}
return _multiplexer;
@@ -87,34 +84,23 @@ namespace StgSharp.Script.Express
PoolKeywords();
InitPrecedence();
_operatorsWithLetter = [
Keyword.Add,
Keyword.Sub,
Keyword.Mul,
Keyword.Div,
Keyword.And,
Keyword.Or,
Keyword.Xor,
Keyword.AndOr,
Keyword.Not,
];
_operatorsWithLetter = [ Keyword.Add, Keyword.Sub, Keyword.Mul, Keyword.Div, Keyword.And, Keyword.Or, Keyword.Xor, Keyword.AndOr, Keyword.Not, ];
ExpSchema_Builtin.Only
.TryGetType(
PoolString( Keyword.Integer ), out ExpTypeSource? _expInt );
PoolString(Keyword.Integer), out ExpTypeSource? _expInt);
ExpInt = _expInt;
ExpSchema_Builtin.Only
.TryGetType( PoolString( Keyword.Real ), out ExpTypeSource? _expReal );
ExpSchema_Builtin.Only.TryGetType(PoolString(Keyword.Real), out ExpTypeSource? _expReal);
ExpReal = _expReal;
ExpSchema_Builtin.Only
.TryGetType(
PoolString( Keyword.Boolean ), out ExpTypeSource? _expBool );
PoolString(Keyword.Boolean), out ExpTypeSource? _expBool);
ExpBool = _expBool;
ExpSchema_Builtin.Only
.TryGetType(
PoolString( Keyword.Boolean ), out ExpTypeSource? _expString );
PoolString(Keyword.Boolean), out ExpTypeSource? _expString);
ExpString = _expString;
@@ -126,30 +112,30 @@ namespace StgSharp.Script.Express
/**/
}
public static bool LetterIsKeyword( string str )
public static bool LetterIsKeyword(string str)
{
if( char.IsLetter( str[ 0 ] ) ) {
return _keywordSet.Contains( str );
if (char.IsLetter(str[0])) {
return _keywordSet.Contains(str);
}
return true;
}
public static bool LetterIsOperator( string str )
public static bool LetterIsOperator(string str)
{
if( char.IsLetter( str[ 0 ] ) ) {
return Array.IndexOf( _operatorsWithLetter, str ) != -1;
if (char.IsLetter(str[0])) {
return Array.IndexOf(_operatorsWithLetter, str) != -1;
}
return true;
}
public static string PoolString( string str )
public static string PoolString(string str)
{
return _compileStringCache.GetOrAdd( str );
return _compileStringCache.GetOrAdd(str);
}
public static string PoolString( ReadOnlySpan<char> str )
public static string PoolString(ReadOnlySpan<char> str)
{
return _compileStringCache.GetOrAdd( str );
return _compileStringCache.GetOrAdd(str);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpOperatorPrecedence.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpOperatorPrecedence"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Frozen;
using System.Collections.Generic;
@@ -40,59 +37,24 @@ namespace StgSharp.Script.Express
public static partial class ExpressCompile
{
public static bool TryGetOperatorPrecedence( string operatorName, out int precedence )
public static bool TryGetOperatorPrecedence(string operatorName, out int precedence)
{
return _operatorPrecedence.TryGetValue( operatorName, out precedence );
return _operatorPrecedence.TryGetValue(operatorName, out precedence);
}
public static bool TryGetSuperTypeOperatorPrecedence(
string operatorName,
out int precedence )
public static bool TryGetSuperTypeOperatorPrecedence(string operatorName, out int precedence)
{
return _superTypeOperatorPrecedent.TryGetValue( operatorName, out precedence );
return _superTypeOperatorPrecedent.TryGetValue(operatorName, out precedence);
}
private static void InitPrecedence()
{
KeyValuePair<string, int>[] source = [
new KeyValuePair<string, int>( PoolString( "[" ), 1 ),
new KeyValuePair<string, int>( PoolString( "." ), 1 ),
new KeyValuePair<string, int>( PoolString( "\\" ), 1 ),
new KeyValuePair<string, int>( PoolString( "unary+" ), 2 ),
new KeyValuePair<string, int>( PoolString( "unary-" ), 2 ),
new KeyValuePair<string, int>( PoolString( "NOT" ), 2 ),
new KeyValuePair<string, int>( PoolString( "**" ), 3 ),
new KeyValuePair<string, int>( PoolString( "*" ), 4 ),
new KeyValuePair<string, int>( PoolString( "/" ), 4 ),
new KeyValuePair<string, int>( PoolString( "AND" ), 4 ),
new KeyValuePair<string, int>( PoolString( "MOD" ), 4 ),
new KeyValuePair<string, int>( PoolString( "DIV" ), 4 ),
new KeyValuePair<string, int>( PoolString( "||" ), 4 ),
new KeyValuePair<string, int>( PoolString( "+" ), 5 ),
new KeyValuePair<string, int>( PoolString( "-" ), 5 ),
new KeyValuePair<string, int>( PoolString( "OR" ), 5 ),
new KeyValuePair<string, int>( PoolString( "XOR" ), 5 ),
new KeyValuePair<string, int>( PoolString( "=" ), 6 ),
new KeyValuePair<string, int>( PoolString( "<>" ), 6 ),
new KeyValuePair<string, int>( PoolString( "<=" ), 6 ),
new KeyValuePair<string, int>( PoolString( ">=" ), 6 ),
new KeyValuePair<string, int>( PoolString( ">" ), 6 ),
new KeyValuePair<string, int>( PoolString( "<" ), 6 ),
new KeyValuePair<string, int>( PoolString( ":=:" ), 6 ),
new KeyValuePair<string, int>( PoolString( ":<>:" ), 6 ),
new KeyValuePair<string, int>( PoolString( "IN" ), 6 ),
new KeyValuePair<string, int>( PoolString( "LIKE" ), 6 ),
new KeyValuePair<string, int>( PoolString( Keyword.Assignment ), 7 )
];
_operatorPrecedence = new Dictionary<string, int>( source,
_multiplexer ).ToFrozenDictionary();
source = [
new KeyValuePair<string, int>( "ONEOF", 1 ),
new KeyValuePair<string, int>( "AND", 2 ),
new KeyValuePair<string, int>( "ANDOR", 3 ),
];
_superTypeOperatorPrecedent = new Dictionary<string, int>( source,
_multiplexer ).ToFrozenDictionary(
KeyValuePair<string, int>[] source = [ new KeyValuePair<string, int>(PoolString("["), 1), new KeyValuePair<string, int>(PoolString("."), 1), new KeyValuePair<string, int>(PoolString("\\"), 1), new KeyValuePair<string, int>(PoolString("unary+"), 2), new KeyValuePair<string, int>(PoolString("unary-"), 2), new KeyValuePair<string, int>(PoolString("NOT"), 2), new KeyValuePair<string, int>(PoolString("**"), 3), new KeyValuePair<string, int>(PoolString("*"), 4), new KeyValuePair<string, int>(PoolString("/"), 4), new KeyValuePair<string, int>(PoolString("AND"), 4), new KeyValuePair<string, int>(PoolString("MOD"), 4), new KeyValuePair<string, int>(PoolString("DIV"), 4), new KeyValuePair<string, int>(PoolString("||"), 4), new KeyValuePair<string, int>(PoolString("+"), 5), new KeyValuePair<string, int>(PoolString("-"), 5), new KeyValuePair<string, int>(PoolString("OR"), 5), new KeyValuePair<string, int>(PoolString("XOR"), 5), new KeyValuePair<string, int>(PoolString("="), 6), new KeyValuePair<string, int>(PoolString("<>"), 6), new KeyValuePair<string, int>(PoolString("<="), 6), new KeyValuePair<string, int>(PoolString(">="), 6), new KeyValuePair<string, int>(PoolString(">"), 6), new KeyValuePair<string, int>(PoolString("<"), 6), new KeyValuePair<string, int>(PoolString(":=:"), 6), new KeyValuePair<string, int>(PoolString(":<>:"), 6), new KeyValuePair<string, int>(PoolString("IN"), 6), new KeyValuePair<string, int>(PoolString("LIKE"), 6), new KeyValuePair<string, int>(PoolString(Keyword.Assignment), 7) ];
_operatorPrecedence = new Dictionary<string, int>(source,
_multiplexer).ToFrozenDictionary();
source = [ new KeyValuePair<string, int>("ONEOF", 1), new KeyValuePair<string, int>("AND", 2), new KeyValuePair<string, int>("ANDOR", 3), ];
_superTypeOperatorPrecedent = new Dictionary<string, int>(source,
_multiplexer).ToFrozenDictionary(
);
}
+45 -83
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="KeyWord.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="KeyWord"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -46,16 +43,16 @@ namespace StgSharp.Script.Express
{
_keywordSet = new();
FieldInfo[] fields = typeof( Keyword ).GetFields( BindingFlags.Public );
FieldInfo[] fields = typeof(Keyword).GetFields(BindingFlags.Public);
ParallelLoopResult result = Parallel.ForEach(
fields, static( field ) => {
if( field.FieldType == typeof( string ) && field.GetValue( null ) is string str )
{
_compileStringCache.GetOrAdd( str );
_keywordSet.Add( str );
}
} );
while( !result.IsCompleted ) { }
fields, static(field) => {
if (field.FieldType == typeof(string) && field.GetValue(null) is string str)
{
_compileStringCache.GetOrAdd(str);
_keywordSet.Add(str);
}
});
while (!result.IsCompleted) { }
}
public static class Keyword
@@ -65,64 +62,29 @@ namespace StgSharp.Script.Express
EndAlias, EndCase, EndConstant, EndEntity, EndFunction, EndIf, EndLocal, EndProcedure, EndRepeat, EndRule, EndSchema, EndSubtypeConstraint, EndType
};
public static HashSet<string> Symbols = [
Dot, Comma, Semicolon, Colon, Percent, Apostrophe,
Backslash, IndexOf, RightBracket, LeftBrace,
RightBrace, Pipe, LeftParen, RightParen, LeftAsterisk,
Assignment, DoublePipe, ExpSymbol, CommentSingleLine,
CommentStart, CommentEnd, InstanceEqual, InstanceNotEqual
];
public static HashSet<string> Symbols = [ Dot, Comma, Semicolon, Colon, Percent, Apostrophe, Backslash, IndexOf, RightBracket, LeftBrace, RightBrace, Pipe, LeftParen, RightParen, LeftAsterisk, Assignment, DoublePipe, ExpSymbol, CommentSingleLine, CommentStart, CommentEnd, InstanceEqual, InstanceNotEqual ];
public static HashSet<string> DataTypes { get; } = [
Array, Bag, Binary, Boolean, Enumeration, Integer, List, Logical, Number, Of, Real, Set, String
];
public static HashSet<string> DataTypes { get; } = [ Array, Bag, Binary, Boolean, Enumeration, Integer, List, Logical, Number, Of, Real, Set, String ];
public static HashSet<string> InternalProcess { get; } = [
Insert, Remove
];
public static HashSet<string> InternalProcess { get; } = [ Insert, Remove ];
public static HashSet<string> BuiltinFunctions { get; } = [
Abs, Acos, Asin, Atan, BLength, Cos, Exists, Exp,
Format, HiBound, HiIndex, Length, LoBound, Log,
Log2, Log10, LoIndex, Nvl, Odd, Rolesof, Sin,
Sizeof, Sqrt, Tan, Typeof, Usedin, Value,
ValueIn, ValueUnique
];
public static HashSet<string> BuiltinFunctions { get; } = [ Abs, Acos, Asin, Atan, BLength, Cos, Exists, Exp, Format, HiBound, HiIndex, Length, LoBound, Log, Log2, Log10, LoIndex, Nvl, Odd, Rolesof, Sin, Sizeof, Sqrt, Tan, Typeof, Usedin, Value, ValueIn, ValueUnique ];
public static HashSet<string> Literals { get; } = [
QuestionMark, Self, Const, E, Pi, False, True, Unknown
];
public static HashSet<string> Literals { get; } = [ QuestionMark, Self, Const, E, Pi, False, True, Unknown ];
public static HashSet<string> Operators { get; } = [
And, AndOr, Div, In, Like, Mod, Not, Or, Xor,
Add, Sub, Mul, Slash, Equal, NotEqual,
LessThan, GreaterThan, LessThanOrEqual, GreaterThanOrEqual
];
public static HashSet<string> Operators { get; } = [ And, AndOr, Div, In, Like, Mod, Not, Or, Xor, Add, Sub, Mul, Slash, Equal, NotEqual, LessThan, GreaterThan, LessThanOrEqual, GreaterThanOrEqual ];
public static HashSet<string> Aliasing { get; } = [
Alias, Renamed
];
public static HashSet<string> Aliasing { get; } = [ Alias, Renamed ];
public static HashSet<string> ModifiersAttributes { get; } = [
Abstract, Aggregate, As, BasedOn, By, Escape, Fixed, From, Use, With
];
public static HashSet<string> ModifiersAttributes { get; } = [ Abstract, Aggregate, As, BasedOn, By, Escape, Fixed, From, Use, With ];
public static HashSet<string> QueryReference { get; } = [
Query, Reference, Select
];
public static HashSet<string> QueryReference { get; } = [ Query, Reference, Select ];
public static HashSet<string> ConstraintsInheritance { get; } = [
Oneof, Optional, Subtype, SubtypeConstraint, Supertype, TotalOver, Unique, Where
];
public static HashSet<string> ConstraintsInheritance { get; } = [ Oneof, Optional, Subtype, SubtypeConstraint, Supertype, TotalOver, Unique, Where ];
public static HashSet<string> Declarations { get; } = [
Constant, Derive, Entity, Extensible, Fixed, Function, Generic,
GenericEntity, Inverse, Local, Procedure, Rule, Schema, Type, Var
];
public static HashSet<string> Declarations { get; } = [ Constant, Derive, Entity, Extensible, Fixed, Function, Generic, GenericEntity, Inverse, Local, Procedure, Rule, Schema, Type, Var ];
public static HashSet<string> FlowControl { get; } = [
Begin, Case, Else, End, For, If, Otherwise, Repeat, Return, Skip, Then, To, Until, While
];
public static HashSet<string> FlowControl { get; } = [ Begin, Case, Else, End, For, If, Otherwise, Repeat, Return, Skip, Then, To, Until, While ];
#region Basic Data Type
+36 -39
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpConst.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpConst"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Frozen;
@@ -45,10 +42,10 @@ namespace StgSharp.Script.Express
private Dictionary<string, ExpElementInstance> _constants;
private IScriptSourceProvider _sourceProvider;
public ExpConstantCollectionSource( IScriptSourceProvider sourceProvider )
public ExpConstantCollectionSource(IScriptSourceProvider sourceProvider)
{
_sourceProvider = sourceProvider;
_constants = new Dictionary<string, ExpElementInstance>( ExpressCompile.Multiplexer );
_constants = new Dictionary<string, ExpElementInstance>(ExpressCompile.Multiplexer);
}
public override ExpElementType ElementType => ExpElementType.Const;
@@ -65,28 +62,28 @@ namespace StgSharp.Script.Express
throw new NotImplementedException();
}
public override ExpSyntaxNode MakeReference( params object[] options )
public override ExpSyntaxNode MakeReference(params object[] options)
{
if( options.Length == 0 || options[ 0 ] is not string str ) {
if (options.Length == 0 || options[0] is not string str) {
return null!;
}
if( _constants.Count == 0 ) {
if (_constants.Count == 0) {
return null!;
}
if( _constants.TryGetValue( str, out ExpElementInstance? token ) ) {
if (_constants.TryGetValue(str, out ExpElementInstance? token)) {
return token;
}
return null!;
}
public bool TryGetConstant( string name, out ExpElementInstance instance )
public bool TryGetConstant(string name, out ExpElementInstance instance)
{
return _constants.TryGetValue( name, out instance );
return _constants.TryGetValue(name, out instance);
}
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
if( _constants.TryGetValue( name, out ExpElementInstance? node ) )
if (_constants.TryGetValue(name, out ExpElementInstance? node))
{
memberNode = node;
return true;
@@ -95,9 +92,9 @@ namespace StgSharp.Script.Express
return false;
}
internal void AddConstant( string name, ExpElementInstance value )
internal void AddConstant(string name, ExpElementInstance value)
{
_constants.Add( name, value );
_constants.Add(name, value);
}
}
+27 -30
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpEntity.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpEntity"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
@@ -41,7 +38,7 @@ namespace StgSharp.Script.Express
private ScriptSourceTransmitter _source;
private string _name;
public ExpEntitySource( string name, ScriptSourceTransmitter provider )
public ExpEntitySource(string name, ScriptSourceTransmitter provider)
{
_name = name;
_source = provider;
@@ -58,12 +55,12 @@ namespace StgSharp.Script.Express
throw new NotImplementedException();
}
public override ExpSyntaxNode CreateInstanceNode( Token t )
public override ExpSyntaxNode CreateInstanceNode(Token t)
{
throw new NotImplementedException();
}
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
throw new NotImplementedException();
}
+29 -32
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpFunction.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpFunction"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Text;
@@ -40,7 +37,7 @@ namespace StgSharp.Script.Express
private ScriptSourceTransmitter _transmitter;
private string _name;
public ExpFunctionSource( string name, ScriptSourceTransmitter transmitter )
public ExpFunctionSource(string name, ScriptSourceTransmitter transmitter)
{
_name = name;
_transmitter = transmitter;
@@ -72,19 +69,19 @@ namespace StgSharp.Script.Express
*/
}
public override ExpSyntaxNode MakeReference( params object[] options )
public override ExpSyntaxNode MakeReference(params object[] options)
{
throw new NotImplementedException();
}
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
if( FuncParams.TryGetValue( name, out ExpElementInstance? param ) )
if (FuncParams.TryGetValue(name, out ExpElementInstance? param))
{
memberNode = param;
return true;
}
if( LocalVariables.TryGetValue( name, out ExpElementInstance? variable ) )
if (LocalVariables.TryGetValue(name, out ExpElementInstance? variable))
{
memberNode = variable;
return true;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpProcedureSource.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpProcedureSource"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -50,12 +47,12 @@ namespace StgSharp.Script.Express
throw new NotImplementedException();
}
public override ExpSyntaxNode MakeReference( params object[] options )
public override ExpSyntaxNode MakeReference(params object[] options)
{
throw new NotImplementedException();
}
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
throw new NotImplementedException();
}
+28 -31
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpRule.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpRule"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Data;
@@ -41,7 +38,7 @@ namespace StgSharp.Script.Express
private ExpRuleSource _source;
public ExpRule( Token source ) : base( source ) { }
public ExpRule(Token source) : base(source) { }
public object? value => throw new NotImplementedException();
@@ -62,7 +59,7 @@ namespace StgSharp.Script.Express
private ScriptSourceTransmitter _transmitter;
private string _name;
public ExpRuleSource( string name, ScriptSourceTransmitter transmitter )
public ExpRuleSource(string name, ScriptSourceTransmitter transmitter)
{
_name = name;
_transmitter = transmitter;
@@ -79,12 +76,12 @@ namespace StgSharp.Script.Express
throw new NotImplementedException();
}
public override ExpSyntaxNode MakeReference( params object[] options )
public override ExpSyntaxNode MakeReference(params object[] options)
{
throw new NotImplementedException();
}
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
memberNode = ExpSyntaxNode.Empty;
return false;
+30 -33
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpType.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpType"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the ¡°Software¡±), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED ¡°AS IS¡±,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Script;
using System;
@@ -42,14 +39,14 @@ namespace StgSharp.Script.Express
private string _name;
protected bool _isBuiltinType;
protected ExpTypeSource( string name )
protected ExpTypeSource(string name)
{
_name = name;
_transmitter = ScriptSourceTransmitter.Empty;
_isBuiltinType = true;
}
public ExpTypeSource( string name, ScriptSourceTransmitter transmitter )
public ExpTypeSource(string name, ScriptSourceTransmitter transmitter)
{
_name = name;
_transmitter = transmitter;
@@ -77,17 +74,17 @@ namespace StgSharp.Script.Express
throw new NotImplementedException();
}
public override ExpElementInstance CreateInstanceNode( Token t )
public override ExpElementInstance CreateInstanceNode(Token t)
{
throw new NotImplementedException();
}
public static bool IsNullOrVoid( IExpElementSource type )
public static bool IsNullOrVoid(IExpElementSource type)
{
return type == null || type == ExpVoidType.Only;
}
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
memberNode = ExpSyntaxNode.Empty;
return false;
@@ -98,7 +95,7 @@ namespace StgSharp.Script.Express
private static readonly ExpVoidType _onlyInstance = new ExpVoidType();
private ExpVoidType() : base( string.Empty ) { }
private ExpVoidType() : base(string.Empty) { }
public static ExpVoidType Only
{
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpBinaryOperatorNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpBinaryOperatorNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.CSharp;
using System;
@@ -48,8 +45,8 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _left;
private ExpSyntaxNode _right;
private ExpBinaryOperatorNode( Token source, ExpSyntaxNode left, ExpSyntaxNode right )
: base( source )
private ExpBinaryOperatorNode(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
: base(source)
{
_left = left;
_right = right;
@@ -63,19 +60,16 @@ namespace StgSharp.Script.Express
public string Operator { get; private set; }
public static ExpBinaryOperatorNode Add(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode Add(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( !left.IsNumber && !right.IsNumber ) {
throw new ExpInvalidTypeException( source, "Number",
left.EqualityTypeConvert.Name );
if (!left.IsNumber && !right.IsNumber) {
throw new ExpInvalidTypeException(source, "Number",
left.EqualityTypeConvert.Name);
}
bool isFloat =
( left._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0 ||
( right._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0;
return new ExpBinaryOperatorNode( source, left, right )
(left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 ||
(right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0;
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt,
_nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number,
@@ -83,16 +77,13 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode Assign(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode Assign(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( left.EqualityTypeConvert != right.EqualityTypeConvert ) {
if (left.EqualityTypeConvert != right.EqualityTypeConvert) {
throw new ExpInvalidTypeException(
source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name );
source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name);
}
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpInstantiableElement.Void,
_nodeFlag = ExpNodeFlag.Operator_Binary | left._nodeFlag,
@@ -101,12 +92,9 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode CompareInstanceEqual(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode CompareInstanceEqual(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpressCompile.ExpBool,
_nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary,
@@ -117,9 +105,9 @@ namespace StgSharp.Script.Express
public static ExpBinaryOperatorNode CompareInstanceNotEqual(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
ExpSyntaxNode right)
{
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpressCompile.ExpBool,
_nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary,
@@ -127,16 +115,13 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode ConvertElement(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode ConvertElement(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( right is not ExpMetaRefNode metaRef ) {
if (right is not ExpMetaRefNode metaRef) {
throw new ExpInvalidTypeException(
source, "<source of element>", right.EqualityTypeConvert.Name );
source, "<source of element>", right.EqualityTypeConvert.Name);
}
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = metaRef.SourceRef,
_nodeFlag = ExpNodeFlag.Operator_Binary,
@@ -148,19 +133,16 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode Div(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode Div(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( !left.IsNumber && !right.IsNumber ) {
throw new ExpInvalidTypeException( source, "Number",
left.EqualityTypeConvert.Name );
if (!left.IsNumber && !right.IsNumber) {
throw new ExpInvalidTypeException(source, "Number",
left.EqualityTypeConvert.Name);
}
bool isFloat =
( left._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0 ||
( right._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0;
return new ExpBinaryOperatorNode( source, left, right )
(left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 ||
(right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0;
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt,
_nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number,
@@ -168,16 +150,13 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode EqualTo(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode EqualTo(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( left.EqualityTypeConvert != right.EqualityTypeConvert ) {
if (left.EqualityTypeConvert != right.EqualityTypeConvert) {
throw new ExpInvalidTypeException(
source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name );
source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name);
}
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpressCompile.ExpBool,
_nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary,
@@ -185,16 +164,13 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode GreaterThan(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode GreaterThan(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( !left.IsNumber && !right.IsNumber ) {
throw new ExpInvalidTypeException( source, "Number",
left.EqualityTypeConvert.Name );
if (!left.IsNumber && !right.IsNumber) {
throw new ExpInvalidTypeException(source, "Number",
left.EqualityTypeConvert.Name);
}
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpressCompile.ExpBool,
_nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary,
@@ -202,16 +178,13 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode LessThan(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode LessThan(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( !left.IsNumber && !right.IsNumber ) {
throw new ExpInvalidTypeException( source, "Number",
left.EqualityTypeConvert.Name );
if (!left.IsNumber && !right.IsNumber) {
throw new ExpInvalidTypeException(source, "Number",
left.EqualityTypeConvert.Name);
}
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpressCompile.ExpBool,
_nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary,
@@ -219,19 +192,16 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode Mul(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode Mul(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( !left.IsNumber && !right.IsNumber ) {
throw new ExpInvalidTypeException( source, "Number",
left.EqualityTypeConvert.Name );
if (!left.IsNumber && !right.IsNumber) {
throw new ExpInvalidTypeException(source, "Number",
left.EqualityTypeConvert.Name);
}
bool isFloat =
( left._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0 ||
( right._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0;
return new ExpBinaryOperatorNode( source, left, right )
(left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 ||
(right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0;
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt,
_nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number,
@@ -239,16 +209,13 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode NotEqualTo(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode NotEqualTo(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( left.EqualityTypeConvert != right.EqualityTypeConvert ) {
if (left.EqualityTypeConvert != right.EqualityTypeConvert) {
throw new ExpInvalidTypeException(
source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name );
source, left.EqualityTypeConvert.Name, right.EqualityTypeConvert.Name);
}
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpressCompile.ExpBool,
_nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary,
@@ -256,16 +223,13 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode SmallerThan(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode SmallerThan(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( !left.IsNumber && !right.IsNumber ) {
throw new ExpInvalidTypeException( source, "Number",
left.EqualityTypeConvert.Name );
if (!left.IsNumber && !right.IsNumber) {
throw new ExpInvalidTypeException(source, "Number",
left.EqualityTypeConvert.Name);
}
return new ExpBinaryOperatorNode( source, left, right )
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = ExpressCompile.ExpBool,
_nodeFlag = ExpNodeFlag.BuiltinType_Boolean | ExpNodeFlag.Operator_Binary,
@@ -273,19 +237,16 @@ namespace StgSharp.Script.Express
};
}
public static ExpBinaryOperatorNode Sub(
Token source,
ExpSyntaxNode left,
ExpSyntaxNode right )
public static ExpBinaryOperatorNode Sub(Token source, ExpSyntaxNode left, ExpSyntaxNode right)
{
if( !left.IsNumber && !right.IsNumber ) {
throw new ExpInvalidTypeException( source, "Number",
left.EqualityTypeConvert.Name );
if (!left.IsNumber && !right.IsNumber) {
throw new ExpInvalidTypeException(source, "Number",
left.EqualityTypeConvert.Name);
}
bool isFloat =
( left._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0 ||
( right._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0;
return new ExpBinaryOperatorNode( source, left, right )
(left._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0 ||
(right._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0;
return new ExpBinaryOperatorNode(source, left, right)
{
_returnType = isFloat ? ExpressCompile.ExpReal : ExpressCompile.ExpInt,
_nodeFlag = ExpNodeFlag.Operator_Binary | ExpNodeFlag.BuiltinType_Number,
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpCollectionIndexNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpCollectionIndexNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -43,11 +40,8 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _indexExpression;
private ExpCollectionIndexNode(
Token source,
ExpCollectionInstanceBase instance,
ExpSyntaxNode indexExpression )
: base( source )
private ExpCollectionIndexNode(Token source, ExpCollectionInstanceBase instance, ExpSyntaxNode indexExpression)
: base(source)
{
_collection = instance;
_indexExpression = indexExpression;
@@ -63,13 +57,13 @@ namespace StgSharp.Script.Express
public static ExpCollectionIndexNode Create(
Token source,
ExpCollectionInstanceBase instance,
ExpSyntaxNode indexExpression )
ExpSyntaxNode indexExpression)
{
if( !indexExpression.IsNumber ) {
if (!indexExpression.IsNumber) {
throw new ExpInvalidTypeException(
source, "Number", indexExpression.EqualityTypeConvert.Name );
source, "Number", indexExpression.EqualityTypeConvert.Name);
}
return new ExpCollectionIndexNode( source, instance, indexExpression );
return new ExpCollectionIndexNode(source, instance, indexExpression);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpElementInitializingNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpElementInitializingNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -43,11 +40,8 @@ namespace StgSharp.Script.Express
private ExpMetaRefNode _type;
private ExpSyntaxNode _init;
private ExpElementInitializingNode(
Token source,
ExpMetaRefNode type,
ExpSyntaxNode initParameter )
: base( source )
private ExpElementInitializingNode(Token source, ExpMetaRefNode type, ExpSyntaxNode initParameter)
: base(source)
{
_type = type;
_init = initParameter;
@@ -59,16 +53,13 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => _type.SourceRef;
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public ExpElementInitializingNode InitializeElement(
Token source,
ExpMetaRefNode type,
ExpSyntaxNode init )
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ExpElementInitializingNode InitializeElement(Token source, ExpMetaRefNode type, ExpSyntaxNode init)
{
if( init is ExpTupleNode tupleNode ) {
if (init is ExpTupleNode tupleNode) {
init = tupleNode.Right;
}
ExpElementInitializingNode node = new ExpElementInitializingNode( source, type, init );
ExpElementInitializingNode node = new ExpElementInitializingNode(source, type, init);
return node;
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpElementMemberNameNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpElementMemberNameNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -39,8 +36,8 @@ namespace StgSharp.Script.Express
public class ExpElementMemberNameNode : ExpSyntaxNode
{
internal ExpElementMemberNameNode( Token source )
: base( source )
internal ExpElementMemberNameNode(Token source)
: base(source)
{
_nodeFlag = ExpNodeFlag.Name_Operator;
CodeConvertTemplate = source.Value;
@@ -54,15 +51,14 @@ namespace StgSharp.Script.Express
{
get
{
ExpSchema.BuiltinSchema
.TryGetType( ExpressCompile.Keyword.String, out ExpTypeSource? strType );
ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.String, out ExpTypeSource? strType);
return strType;
}
}
public static ExpElementMemberNameNode Create( Token t )
public static ExpElementMemberNameNode Create(Token t)
{
return new ExpElementMemberNameNode( t );
return new ExpElementMemberNameNode(t);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpEnumLiteralNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpEnumLiteralNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the ¡°Software¡±), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED ¡°AS IS¡±,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Script;
using System;
@@ -37,7 +34,7 @@ namespace StgSharp.Script.Express
public class ExpEnumLiteralNode : ExpSyntaxNode
{
private ExpEnumLiteralNode( Token t ) : base( t ) { }
private ExpEnumLiteralNode(Token t) : base(t) { }
public override ExpSyntaxNode Left => Empty;
@@ -47,17 +44,17 @@ namespace StgSharp.Script.Express
public string Literal { get; private set; }
public static ExpEnumLiteralNode Create( Token t, Func<string, string> parser )
public static ExpEnumLiteralNode Create(Token t, Func<string, string> parser)
{
string l;
if( parser is null )
if (parser is null)
{
l = t.Value;
} else
{
l = parser( t.Value );
l = parser(t.Value);
}
return new ExpEnumLiteralNode( t )
return new ExpEnumLiteralNode(t)
{
Literal = l,
CodeConvertTemplate = l
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpFunctionCallingNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpFunctionCallingNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -43,13 +40,10 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _parameter;
private ExpFunctionCallingNode(
Token source,
ExpFunctionSource function,
ExpSyntaxNode parameterEnumeration )
: base( source )
private ExpFunctionCallingNode(Token source, ExpFunctionSource function, ExpSyntaxNode parameterEnumeration)
: base(source)
{
if( parameterEnumeration is ExpTupleNode tuple ) {
if (parameterEnumeration is ExpTupleNode tuple) {
parameterEnumeration = tuple.Right;
}
_function = function;
@@ -64,20 +58,17 @@ namespace StgSharp.Script.Express
public override ExpSyntaxNode Right => _parameter;
public void AppendParameter( ExpSyntaxNode parameter )
public void AppendParameter(ExpSyntaxNode parameter)
{
_parameter.AppendNode( parameter );
_parameter.AppendNode(parameter);
}
public static ExpFunctionCallingNode CallFunction(
Token source,
ExpFunctionSource function,
ExpSyntaxNode param )
public static ExpFunctionCallingNode CallFunction(Token source, ExpFunctionSource function, ExpSyntaxNode param)
{
if( param is ExpTupleNode ) {
if (param is ExpTupleNode) {
param = param.Right;
}
return new ExpFunctionCallingNode( source, function, param );
return new ExpFunctionCallingNode(source, function, param);
}
}
+34 -37
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpIfNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpIfNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Script.Express;
using System;
@@ -43,8 +40,8 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _rule;
private ExpSyntaxNode _trueOpBegin ;
public ExpIfNode( Token source, ExpSyntaxNode rule, ExpSyntaxNode trueOpBegin )
: base( source )
public ExpIfNode(Token source, ExpSyntaxNode rule, ExpSyntaxNode trueOpBegin)
: base(source)
{
_rule = rule;
_trueOpBegin = trueOpBegin;
@@ -54,15 +51,15 @@ namespace StgSharp.Script.Express
{
{1}
}
""" );
""");
}
public ExpIfNode(
Token source,
ExpSyntaxNode rule,
ExpSyntaxNode rootOperationIfTrue,
ExpSyntaxNode rootOperationIfFalse )
: base( source )
ExpSyntaxNode rootOperationIfFalse)
: base(source)
{
_rule = rule;
_trueOpBegin = rootOperationIfFalse;
@@ -75,7 +72,7 @@ namespace StgSharp.Script.Express
} else {
{2}
}
""" );
""");
}
public override ExpSyntaxNode Left => _trueOpBegin;
@@ -84,14 +81,14 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => null!;
public void AppendFalseOperation( ExpSyntaxNode expressionRoot )
public void AppendFalseOperation(ExpSyntaxNode expressionRoot)
{
_falseOpBegin.AppendNode( expressionRoot );
_falseOpBegin.AppendNode(expressionRoot);
}
public void AppendTrueOperation( ExpSyntaxNode expressionRoot )
public void AppendTrueOperation(ExpSyntaxNode expressionRoot)
{
_trueOpBegin.AppendNode( expressionRoot );
_trueOpBegin.AppendNode(expressionRoot);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpInstanceMemberNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpInstanceMemberNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using CommunityToolkit.HighPerformance.Helpers;
using System;
@@ -45,15 +42,12 @@ namespace StgSharp.Script.Express
private ExpElementMemberNameNode _memberName;
private ExpSyntaxNode _member;
public ExpInstanceMemberNode(
Token source,
ExpElementInstance instance,
ExpElementMemberNameNode memberName )
: base( source )
public ExpInstanceMemberNode(Token source, ExpElementInstance instance, ExpElementMemberNameNode memberName)
: base(source)
{
_instance = instance;
_memberName = memberName;
_instance.TryGetMember( memberName.CodeConvertTemplate, out _member );
_instance.TryGetMember(memberName.CodeConvertTemplate, out _member);
}
public override ExpSyntaxNode Left => _instance;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpInstanceReferenceNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpInstanceReferenceNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -40,19 +37,19 @@ namespace StgSharp.Script.Express
public class ExpInstanceReferenceNode : ExpSyntaxNode
{
internal ExpInstanceReferenceNode( Token source, ExpElementInstance instance )
: base( source )
internal ExpInstanceReferenceNode(Token source, ExpElementInstance instance)
: base(source)
{
OriginObject = instance;
_nodeFlag = ( OriginObject._nodeFlag | ( ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any ) );
_nodeFlag = (OriginObject._nodeFlag | (ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any));
CodeConvertTemplate = source.Value;
}
internal ExpInstanceReferenceNode( Token source, ExpInstanceReferenceNode reference )
: base( source )
internal ExpInstanceReferenceNode(Token source, ExpInstanceReferenceNode reference)
: base(source)
{
OriginObject = reference.OriginObject;
_nodeFlag = ( OriginObject._nodeFlag | ( ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any ) );
_nodeFlag = (OriginObject._nodeFlag | (ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any));
CodeConvertTemplate = source.Value;
}
@@ -64,21 +61,19 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => OriginObject.EqualityTypeConvert;
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static ExpInstanceReferenceNode MakeReferenceFrom(
Token source,
ExpElementInstance instance )
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ExpInstanceReferenceNode MakeReferenceFrom(Token source, ExpElementInstance instance)
{
/**/
if( instance.IsLiteral )
if (instance.IsLiteral)
{
throw new ExpCompileException( source, "Cannot make reference to a literal." );
throw new ExpCompileException(source, "Cannot make reference to a literal.");
}
if( instance.CodeConvertTemplate != source.Value ) {
throw new ExpCompileException( source, "Token point at a wrong instance" );
if (instance.CodeConvertTemplate != source.Value) {
throw new ExpCompileException(source, "Token point at a wrong instance");
}
/**/
return new ExpInstanceReferenceNode( source, instance );
return new ExpInstanceReferenceNode(source, instance);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpLiteralNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpLiteralNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Data;
using System;
@@ -43,8 +40,8 @@ namespace StgSharp.Script.Express
private int _value;
public ExpIntNode( Token source, int value, bool isLiteral )
: base( source )
public ExpIntNode(Token source, int value, bool isLiteral)
: base(source)
{
this.IsLiteral = isLiteral;
_value = value;
@@ -68,8 +65,8 @@ namespace StgSharp.Script.Express
private readonly string _value;
public ExpStringNode( Token source, string value, bool isLiteral )
: base( source )
public ExpStringNode(Token source, string value, bool isLiteral)
: base(source)
{
this.IsLiteral = IsLiteral;
_value = value;
@@ -100,8 +97,8 @@ namespace StgSharp.Script.Express
private readonly bool _value;
public ExpBoolNode( Token source, bool value, bool isLiteral )
: base( source )
public ExpBoolNode(Token source, bool value, bool isLiteral)
: base(source)
{
this.IsLiteral = isLiteral;
_value = value;
@@ -113,22 +110,22 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert
{
get => ExpSchema.BuiltinSchema
.TryGetType( ExpressCompile.Keyword.Boolean, out ExpTypeSource? type ) ?
type : throw new ExpCompileNotInitializedException();
get => ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.Boolean, out ExpTypeSource? type) ?
type :
throw new ExpCompileNotInitializedException();
}
public override string TypeName => EqualityTypeConvert.Name;
public static ExpBoolNode False( Token? t )
public static ExpBoolNode False(Token? t)
{
return new( t ?? new Token( "FALSE", 0, -1, TokenFlag.Member ), false,
isLiteral: true );
return new(t ?? new Token("FALSE", 0, -1, TokenFlag.Member), false,
isLiteral:true);
}
public static ExpBoolNode True( Token? t )
public static ExpBoolNode True(Token? t)
{
return new( t ?? new Token( "TRUE", 0, -1, TokenFlag.Member ), true, isLiteral: true );
return new(t ?? new Token("TRUE", 0, -1, TokenFlag.Member), true, isLiteral:true);
}
}
@@ -138,8 +135,8 @@ namespace StgSharp.Script.Express
private readonly float _value;
public ExpRealNumberNode( Token source, float value, bool isLiteral )
: base( source )
public ExpRealNumberNode(Token source, float value, bool isLiteral)
: base(source)
{
_value = value;
_nodeFlag = ExpNodeFlag.BuiltinType_Real | ExpNodeFlag.Element_Type;
@@ -150,9 +147,9 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert
{
get => ExpSchema.BuiltinSchema
.TryGetType( ExpressCompile.Keyword.String, out ExpTypeSource? type ) ?
type : throw new ExpCompileNotInitializedException();
get => ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.String, out ExpTypeSource? type) ?
type :
throw new ExpCompileNotInitializedException();
}
public override string TypeName => EqualityTypeConvert.Name;
@@ -164,8 +161,8 @@ namespace StgSharp.Script.Express
private readonly ExpLogic _value;
public ExpLogicValueNode( Token source, ExpLogic value, bool isLiteral )
: base( source )
public ExpLogicValueNode(Token source, ExpLogic value, bool isLiteral)
: base(source)
{
this.IsLiteral = isLiteral;
_value = value;
@@ -177,9 +174,9 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert
{
get => ExpSchema.BuiltinSchema
.TryGetType( ExpressCompile.Keyword.Logical, out ExpTypeSource? type ) ?
type : throw new ExpCompileNotInitializedException();
get => ExpSchema.BuiltinSchema.TryGetType(ExpressCompile.Keyword.Logical, out ExpTypeSource? type) ?
type :
throw new ExpCompileNotInitializedException();
}
public override string TypeName => EqualityTypeConvert.Name;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpMetaRefNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpMetaRefNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis;
using System;
@@ -41,8 +38,8 @@ namespace StgSharp.Script.Express
public class ExpMetaRefNode : ExpSyntaxNode
{
internal ExpMetaRefNode( Token source, ExpInstantiableElement element )
: base( source )
internal ExpMetaRefNode(Token source, ExpInstantiableElement element)
: base(source)
{
SourceRef = element;
}
@@ -55,28 +52,28 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => ExpInstantiableElement.Void;
public static ExpMetaRefNode RefEntity( Token position, ExpEntitySource entity )
public static ExpMetaRefNode RefEntity(Token position, ExpEntitySource entity)
{
if( position.Value != entity.Name ) {
if (position.Value != entity.Name) {
throw new ExpCompileException(
position,
$"Meta data does not match, name of source to match is {entity.Name}, but token is {position.Value}" );
$"Meta data does not match, name of source to match is {entity.Name}, but token is {position.Value}");
}
ExpMetaRefNode node = new ExpMetaRefNode( position, entity )
ExpMetaRefNode node = new ExpMetaRefNode(position, entity)
{
CodeConvertTemplate = entity.Name,
};
return node;
}
public static ExpMetaRefNode RefType( Token position, ExpTypeSource type )
public static ExpMetaRefNode RefType(Token position, ExpTypeSource type)
{
if( position.Value != type.Name ) {
if (position.Value != type.Name) {
throw new ExpCompileException(
position,
$"Meta data does not match, name of source to match is {type.Name}, but token is {position.Value}" );
$"Meta data does not match, name of source to match is {type.Name}, but token is {position.Value}");
}
ExpMetaRefNode node = new ExpMetaRefNode( position, type )
ExpMetaRefNode node = new ExpMetaRefNode(position, type)
{
CodeConvertTemplate = type.Name,
};
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpProcedureCallingNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpProcedureCallingNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -42,11 +39,8 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _params;
public ExpProcedureCallingNode(
Token source,
ExpProcedureSource caller,
ExpSyntaxNode param )
: base( source )
public ExpProcedureCallingNode(Token source, ExpProcedureSource caller, ExpSyntaxNode param)
: base(source)
{
_params = param;
CalledProcedure = caller;
@@ -63,14 +57,15 @@ namespace StgSharp.Script.Express
public static ExpProcedureCallingNode CallProcedure(
Token postion,
ExpProcedureSource caller,
ExpSyntaxNode input )
ExpSyntaxNode input)
{
ExpProcedureCallingNode node = new ExpProcedureCallingNode( postion, caller, input )
ExpProcedureCallingNode node = new ExpProcedureCallingNode(postion, caller, input)
{
/*
* 0. parameters
*/
CodeConvertTemplate = $$"""
CodeConvertTemplate =
$$"""
{{caller.Name}}( {0} )
"""
};
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpProcedureControlNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpProcedureControlNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System;
@@ -45,7 +42,7 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _additional;
internal ExpProcedureControlNode( Token source ) : base( source ) { }
internal ExpProcedureControlNode(Token source) : base(source) { }
public override ExpSyntaxNode Left => Empty;
@@ -53,23 +50,22 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => ExpTypeSource.Void;
public static ExpProcedureControlNode Return( Token t, ExpSyntaxNode valueToReturn )
public static ExpProcedureControlNode Return(Token t, ExpSyntaxNode valueToReturn)
{
if( t.Value != ExpKeyword.Return ) {
if (t.Value != ExpKeyword.Return) {
throw new InvalidCastException();
}
ExpProcedureControlNode ret = new ExpProcedureControlNode( t )
ExpProcedureControlNode ret = new ExpProcedureControlNode(t)
{
_additional = valueToReturn ?? Empty,
CodeConvertTemplate = IsNullOrEmpty( valueToReturn! ) ?
ExpKeyword.Return : "return {0}",
CodeConvertTemplate = IsNullOrEmpty(valueToReturn!) ? ExpKeyword.Return : "return {0}",
};
return ret;
}
public static ExpProcedureControlNode Skip( Token t )
public static ExpProcedureControlNode Skip(Token t)
{
ExpProcedureControlNode ret = new ExpProcedureControlNode( t )
ExpProcedureControlNode ret = new ExpProcedureControlNode(t)
{
_additional = Empty,
CodeConvertTemplate = "break"
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpRangeAndIndexNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpRangeAndIndexNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -44,8 +41,8 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _index;
internal ExpIndexNode( Token t, ExpSyntaxNode node )
: base( t )
internal ExpIndexNode(Token t, ExpSyntaxNode node)
: base(t)
{
_index = node;
CodeConvertTemplate = _codeTemplate;
@@ -57,14 +54,14 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => throw new NotImplementedException();
public static ExpIndexNode IndexAt( Token position, ExpSyntaxNode expression )
public static ExpIndexNode IndexAt(Token position, ExpSyntaxNode expression)
{
ArgumentNullException.ThrowIfNull( expression );
if( ExpNodeFlag.BuiltinType_Int.IsNotInFlag( expression.NodeFlag ) ) {
ArgumentNullException.ThrowIfNull(expression);
if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(expression.NodeFlag)) {
throw new ExpInvalidTypeException(
position, "Integer", expression.EqualityTypeConvert.Name );
position, "Integer", expression.EqualityTypeConvert.Name);
}
return new ExpIndexNode( position, expression );
return new ExpIndexNode(position, expression);
}
}
@@ -76,8 +73,8 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _begin, _end;
internal ExpRangeNode( Token t, ExpSyntaxNode begin, ExpSyntaxNode end )
: base( t )
internal ExpRangeNode(Token t, ExpSyntaxNode begin, ExpSyntaxNode end)
: base(t)
{
_begin = begin;
_end = end;
@@ -90,22 +87,19 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => ExpInstantiableElement.Void;
public static ExpRangeNode RangeNode(
Token position,
ExpSyntaxNode beginNode,
ExpSyntaxNode endNode )
public static ExpRangeNode RangeNode(Token position, ExpSyntaxNode beginNode, ExpSyntaxNode endNode)
{
ArgumentNullException.ThrowIfNull( beginNode );
ArgumentNullException.ThrowIfNull( endNode );
if( ExpNodeFlag.BuiltinType_Int.IsNotInFlag( beginNode.NodeFlag ) ) {
ArgumentNullException.ThrowIfNull(beginNode);
ArgumentNullException.ThrowIfNull(endNode);
if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(beginNode.NodeFlag)) {
throw new ExpInvalidTypeException(
position, "Integer", beginNode.EqualityTypeConvert.Name );
position, "Integer", beginNode.EqualityTypeConvert.Name);
}
if( ExpNodeFlag.BuiltinType_Int.IsNotInFlag( endNode.NodeFlag ) ) {
if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(endNode.NodeFlag)) {
throw new ExpInvalidTypeException(
position, "Integer", endNode.EqualityTypeConvert.Name );
position, "Integer", endNode.EqualityTypeConvert.Name);
}
return new ExpRangeNode( position, beginNode, endNode );
return new ExpRangeNode(position, beginNode, endNode);
}
}
@@ -113,7 +107,7 @@ namespace StgSharp.Script.Express
public class ExpCollectionExpressionNode : ExpSyntaxNode
{
internal ExpCollectionExpressionNode( Token t, ExpTupleNode tupleNode ) : base( t ) { }
internal ExpCollectionExpressionNode(Token t, ExpTupleNode tupleNode) : base(t) { }
public override ExpSyntaxNode Left => throw new NotImplementedException();
@@ -1,30 +1,27 @@
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// file="ExpRepeatNode.cs"
// file="ExpRepeatNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
@@ -147,7 +144,8 @@ namespace StgSharp.Script.Express
* 6: until
*/
CodeConvertTemplate = $$"""
CodeConvertTemplate =
$$"""
for( {0} = {1}; {0} <= {2}; {0} += {3})
{
if(!( {5} )) break;
@@ -171,8 +169,7 @@ namespace StgSharp.Script.Express
{
whileRule = IsNullOrEmpty(whileRule) ? ExpBoolNode.True(t) : whileRule;
untilRule = IsNullOrEmpty(untilRule) ? ExpBoolNode.False(t) : untilRule;
ExpRepeatNode ret = new ExpRepeatNode(
t, repeatVariable, begin, end, increment, body, whileRule, untilRule)
ExpRepeatNode ret = new ExpRepeatNode(t, repeatVariable, begin, end, increment, body, whileRule, untilRule)
{
/*
* 0: variable name
@@ -184,7 +181,8 @@ namespace StgSharp.Script.Express
* 6: until
*/
CodeConvertTemplate = $$"""
CodeConvertTemplate =
$$"""
for({{repeatVariable.TypeName}} {0} = {1}; {0} <= {2}; {0} += {3})
{
if(!( {5} )) break;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSwitchNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSwitchNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Frozen;
using System.Collections.Generic;
@@ -47,21 +44,21 @@ namespace StgSharp.Script.Express
Token source,
ExpSyntaxNode target,
ExpSyntaxNode defaultCase,
params (ExpSyntaxNode label, ExpSyntaxNode op)[] cases )
: base( source )
params (ExpSyntaxNode label, ExpSyntaxNode op)[] cases)
: base(source)
{
_target = target;
_default = defaultCase;
Dictionary<ExpSyntaxNode, ExpSyntaxNode> casesDic = new Dictionary<ExpSyntaxNode, ExpSyntaxNode>(
);
foreach( (ExpSyntaxNode label, ExpSyntaxNode op ) item in cases )
foreach ((ExpSyntaxNode label, ExpSyntaxNode op ) item in cases)
{
if( item.op == null )
if (item.op == null)
{
casesDic.Add( item.label, null! );
casesDic.Add(item.label, null!);
} else
{
casesDic.Add( item.label, item.op );
casesDic.Add(item.label, item.op);
}
}
_cases = casesDic.ToFrozenDictionary();
@@ -69,8 +66,8 @@ namespace StgSharp.Script.Express
string str = @"switch( {0} ){";
StringBuilder codeFormatBuilder = new StringBuilder();
codeFormatBuilder.AppendLine( str );
for( int i = 0; i < casesDic.Count; i++ )
codeFormatBuilder.AppendLine(str);
for (int i = 0; i < casesDic.Count; i++)
{
int index = i * 2 + 1;
codeFormatBuilder.AppendLine(
@@ -78,7 +75,7 @@ namespace StgSharp.Script.Express
case {{{index}}}:
{{{index + 1}}}
break;
""" );
""");
}
CodeConvertTemplate = codeFormatBuilder.ToString();
}
@@ -87,8 +84,8 @@ namespace StgSharp.Script.Express
Token source,
ExpSyntaxNode target,
ExpSyntaxNode defaultCase,
IDictionary<ExpSyntaxNode, ExpSyntaxNode> cases )
: base( source )
IDictionary<ExpSyntaxNode, ExpSyntaxNode> cases)
: base(source)
{
_target = target;
_default = defaultCase;
@@ -96,8 +93,8 @@ namespace StgSharp.Script.Express
string str = @"switch( {0} ){";
StringBuilder codeFormatBuilder = new StringBuilder();
codeFormatBuilder.AppendLine( str );
for( int i = 0; i < cases.Count; i++ )
codeFormatBuilder.AppendLine(str);
for (int i = 0; i < cases.Count; i++)
{
int index = i * 2 + 1;
codeFormatBuilder.AppendLine(
@@ -105,16 +102,16 @@ namespace StgSharp.Script.Express
case {{{index}}}:
{{{index + 1}}}
break;
""" );
""");
}
CodeConvertTemplate = codeFormatBuilder.ToString();
}
public ExpSyntaxNode this[ ExpSyntaxNode index ]
public ExpSyntaxNode this[ExpSyntaxNode index]
{
get
{
if( _cases.TryGetValue( index, out ExpSyntaxNode? ret ) ) {
if (_cases.TryGetValue(index, out ExpSyntaxNode? ret)) {
return ret;
}
return _default;
@@ -127,9 +124,9 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => null!;
public bool ContainsCase( ExpSyntaxNode token )
public bool ContainsCase(ExpSyntaxNode token)
{
return _cases.ContainsKey( token );
return _cases.ContainsKey(token);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpTupleNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpTupleNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -42,8 +39,8 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode node;
private ExpTupleNode( ExpSyntaxNode node )
: base( node._source )
private ExpTupleNode(ExpSyntaxNode node)
: base(node._source)
{
this.node = node;
}
@@ -54,10 +51,10 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => throw new NotImplementedException();
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static ExpTupleNode Pack( ExpSyntaxNode node )
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ExpTupleNode Pack(ExpSyntaxNode node)
{
return new ExpTupleNode( node );
return new ExpTupleNode(node);
}
public ExpNodePresidentEnumerator TupleAsEnumerator()
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpUnaryOperatorNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpUnaryOperatorNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -41,10 +38,10 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode _operand;
private ExpUnaryOperatorNode( Token source ) : base( source ) { }
private ExpUnaryOperatorNode(Token source) : base(source) { }
public ExpUnaryOperatorNode( Token source, ExpSyntaxNode operand, ExpSchema context )
: base( source )
public ExpUnaryOperatorNode(Token source, ExpSyntaxNode operand, ExpSchema context)
: base(source)
{
_operand = operand;
}
@@ -55,44 +52,43 @@ namespace StgSharp.Script.Express
public override IExpElementSource EqualityTypeConvert => _operand.EqualityTypeConvert;
public static ExpUnaryOperatorNode UnaryMinus( Token source, ExpSyntaxNode operand )
public static ExpUnaryOperatorNode UnaryMinus(Token source, ExpSyntaxNode operand)
{
if( !operand.IsNumber ) {
if (!operand.IsNumber) {
throw new ExpInvalidTypeException(
source, "Number", operand.EqualityTypeConvert.Name );
source, "Number", operand.EqualityTypeConvert.Name);
}
bool isFloat =
( operand._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0;
return new ExpUnaryOperatorNode( source )
(operand._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0;
return new ExpUnaryOperatorNode(source)
{
_nodeFlag = ExpNodeFlag.Operator_Unary | ExpNodeFlag.BuiltinType_Number,
CodeConvertTemplate = "- {0}",
};
}
public static ExpUnaryOperatorNode UnaryNot( Token source, ExpSyntaxNode operand )
public static ExpUnaryOperatorNode UnaryNot(Token source, ExpSyntaxNode operand)
{
if( ( operand._nodeFlag | ( ExpNodeFlag.BuiltinType_Logic | ExpNodeFlag.BuiltinType_Logic ) ) ==
0 ) {
if ((operand._nodeFlag | (ExpNodeFlag.BuiltinType_Logic | ExpNodeFlag.BuiltinType_Logic)) == 0) {
throw new ExpInvalidTypeException(
source, "Bool or Logic", operand.EqualityTypeConvert.Name );
source, "Bool or Logic", operand.EqualityTypeConvert.Name);
}
return new ExpUnaryOperatorNode( source )
return new ExpUnaryOperatorNode(source)
{
_nodeFlag = ExpNodeFlag.Operator_Unary | ExpNodeFlag.BuiltinType_Logic,
CodeConvertTemplate = "! {0}",
};
}
public static ExpUnaryOperatorNode UnaryPlus( Token source, ExpSyntaxNode operand )
public static ExpUnaryOperatorNode UnaryPlus(Token source, ExpSyntaxNode operand)
{
if( !operand.IsNumber ) {
if (!operand.IsNumber) {
throw new ExpInvalidTypeException(
source, "Number", operand.EqualityTypeConvert.Name );
source, "Number", operand.EqualityTypeConvert.Name);
}
bool isFloat =
( operand._nodeFlag | ExpNodeFlag.BuiltinType_Real ) == 0;
return new ExpUnaryOperatorNode( source )
(operand._nodeFlag | ExpNodeFlag.BuiltinType_Real) == 0;
return new ExpUnaryOperatorNode(source)
{
_nodeFlag = ExpNodeFlag.Operator_Unary | ExpNodeFlag.BuiltinType_Number,
CodeConvertTemplate = "+ {0}",
+42 -48
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="_ExpNode.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="_ExpNode"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using CommunityToolkit.HighPerformance.Buffers;
using System;
@@ -45,7 +42,7 @@ namespace StgSharp.Script.Express
protected internal ExpNodeFlag _nodeFlag;
protected internal Token _source;
protected ExpSyntaxNode( Token source )
protected ExpSyntaxNode(Token source)
{
_source = source;
Next = this;
@@ -54,7 +51,7 @@ namespace StgSharp.Script.Express
public bool IsNumber
{
get { return ( _nodeFlag | ExpNodeFlag.BuiltinType_Number ) != 0; }
get { return (_nodeFlag | ExpNodeFlag.BuiltinType_Number) != 0; }
}
public abstract ExpSyntaxNode Left { get; }
@@ -76,7 +73,7 @@ namespace StgSharp.Script.Express
public int Column => _source.Column;
public long NodeFlag => ( long )_nodeFlag;
public long NodeFlag => (long)_nodeFlag;
public string CodeConvertTemplate { get; init; }
@@ -85,7 +82,7 @@ namespace StgSharp.Script.Express
get => _source;
}
public void AppendNode( ExpSyntaxNode nextNode )
public void AppendNode(ExpSyntaxNode nextNode)
{
Next.Previous = nextNode;
nextNode.Next = Next;
@@ -93,24 +90,24 @@ namespace StgSharp.Script.Express
Next.Previous = this;
}
public static bool IsNullOrEmpty( [AllowNull]ExpSyntaxNode node )
public static bool IsNullOrEmpty([AllowNull]ExpSyntaxNode node)
{
return node == ExpEmptyNode._only || node == null;
}
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static ExpSyntaxNode NonOperation( Token source )
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ExpSyntaxNode NonOperation(Token source)
{
return new ExpEmptyNode( source.Line, source.Column );
return new ExpEmptyNode(source.Line, source.Column);
}
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static ExpSyntaxNode NonOperation( int line, int column )
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ExpSyntaxNode NonOperation(int line, int column)
{
return new ExpEmptyNode( line, column );
return new ExpEmptyNode(line, column);
}
public void PrependNode( ExpSyntaxNode previousNode )
public void PrependNode(ExpSyntaxNode previousNode)
{
Previous.Next = previousNode;
previousNode.Previous = Previous;
@@ -118,19 +115,17 @@ namespace StgSharp.Script.Express
previousNode.Next = this;
}
public static bool VerifyTypeConvertable( ExpSyntaxNode left, ExpSyntaxNode right )
public static bool VerifyTypeConvertable(ExpSyntaxNode left, ExpSyntaxNode right)
{
IExpElementSource tLeft = left.EqualityTypeConvert,
tRight = right.EqualityTypeConvert;
if( tLeft is not ExpInstantiableElement tLeftIns ||
tRight is not ExpInstantiableElement tRightIns ) {
if (tLeft is not ExpInstantiableElement tLeftIns || tRight is not ExpInstantiableElement tRightIns) {
return false;
}
if( ExpInstantiableElement.IsNullOrVoid( tLeftIns ) ||
ExpInstantiableElement.IsNullOrVoid( tLeftIns ) ) {
if (ExpInstantiableElement.IsNullOrVoid(tLeftIns) || ExpInstantiableElement.IsNullOrVoid(tLeftIns)) {
return false;
}
return tLeft.IsConvertable( tRight );
return tLeft.IsConvertable(tRight);
}
private class ExpEmptyNode : ExpSyntaxNode
@@ -138,10 +133,9 @@ namespace StgSharp.Script.Express
internal static readonly ExpEmptyNode _only = new();
public ExpEmptyNode() : base( Token.Empty ) { }
public ExpEmptyNode() : base(Token.Empty) { }
public ExpEmptyNode( int line, int column )
: base( new Token( string.Empty, line, column, TokenFlag.None ) ) { }
public ExpEmptyNode(int line, int column) : base(new Token(string.Empty, line, column, TokenFlag.None)) { }
public override ExpInstantiableElement EqualityTypeConvert => ExpInstantiableElement.Void;
+51 -54
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpElementInstance.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpElementInstance"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
@@ -56,8 +53,8 @@ namespace StgSharp.Script.Express
public abstract class ExpElementInstance : ExpSyntaxNode
{
protected ExpElementInstance( Token source )
: base( source )
protected ExpElementInstance(Token source)
: base(source)
{
CodeConvertTemplate = source.Value;
}
@@ -72,61 +69,61 @@ namespace StgSharp.Script.Express
public abstract string TypeName { get; }
public static ExpElementInstance CreateLiteral( Token t )
public static ExpElementInstance CreateLiteral(Token t)
{
if( int.TryParse( t.Value, out int _int ) )
if (int.TryParse(t.Value, out int _int))
{
return new ExpIntNode( t, _int, true );
} else if( float.TryParse( t.Value, out float _float ) )
return new ExpIntNode(t, _int, true);
} else if (float.TryParse(t.Value, out float _float))
{
return new ExpRealNumberNode( t, _float, true );
} else if( bool.TryParse( t.Value, out bool _bool ) )
return new ExpRealNumberNode(t, _float, true);
} else if (bool.TryParse(t.Value, out bool _bool))
{
return new ExpBoolNode( t, _bool, true );
} else if( ExpLogic.TryParse( t.Value, out ExpLogic _logic ) )
return new ExpBoolNode(t, _bool, true);
} else if (ExpLogic.TryParse(t.Value, out ExpLogic _logic))
{
return new ExpLogicValueNode( t, _logic, true );
return new ExpLogicValueNode(t, _logic, true);
} else
{
return new ExpStringNode( t, t.Value, true );
return new ExpStringNode(t, t.Value, true);
}
}
public ExpInstanceReferenceNode MakeReference( Token t )
public ExpInstanceReferenceNode MakeReference(Token t)
{
return new ExpInstanceReferenceNode( t, this );
return new ExpInstanceReferenceNode(t, this);
}
public static bool TryCreateLiteral( Token t, out ExpElementInstance instance )
public static bool TryCreateLiteral(Token t, out ExpElementInstance instance)
{
if( int.TryParse( t.Value, out int _int ) )
if (int.TryParse(t.Value, out int _int))
{
instance = new ExpIntNode( t, _int, true );
instance = new ExpIntNode(t, _int, true);
return true;
} else if( float.TryParse( t.Value, out float _float ) )
} else if (float.TryParse(t.Value, out float _float))
{
instance = new ExpRealNumberNode( t, _float, true );
instance = new ExpRealNumberNode(t, _float, true);
return true;
} else if( bool.TryParse( t.Value, out bool _bool ) )
} else if (bool.TryParse(t.Value, out bool _bool))
{
instance = new ExpBoolNode( t, _bool, true );
instance = new ExpBoolNode(t, _bool, true);
return true;
} else if( ExpLogic.TryParse( t.Value, out ExpLogic _logic ) )
} else if (ExpLogic.TryParse(t.Value, out ExpLogic _logic))
{
instance = new ExpLogicValueNode( t, _logic, true );
instance = new ExpLogicValueNode(t, _logic, true);
return true;
} else if( t.Flag == TokenFlag.String )
} else if (t.Flag == TokenFlag.String)
{
instance = new ExpStringNode( t, t.Value, true );
instance = new ExpStringNode(t, t.Value, true);
return true;
}
instance = null!;
return false;
}
public bool TryGetMember( string name, out ExpSyntaxNode node )
public bool TryGetMember(string name, out ExpSyntaxNode node)
{
return EqualityTypeConvert.TryGetMember( name, out node );
return EqualityTypeConvert.TryGetMember(name, out node);
}
}
+38 -41
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpElmentSource.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpElmentSource"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -45,11 +42,11 @@ namespace StgSharp.Script.Express
string Name { get; }
public void AddMember( string name, ExpSyntaxNode memberNode );
public void AddMember(string name, ExpSyntaxNode memberNode);
public void Analyse();
public bool TryGetMember( string name, out ExpSyntaxNode memberNode );
public bool TryGetMember(string name, out ExpSyntaxNode memberNode);
}
@@ -70,29 +67,29 @@ namespace StgSharp.Script.Express
public abstract string Name { get; }
public void AddMember( string name, ExpSyntaxNode memberNode )
public void AddMember(string name, ExpSyntaxNode memberNode)
{
throw new NotImplementedException();
}
public abstract void Analyse();
public abstract ExpSyntaxNode CreateInstanceNode( Token t );
public abstract ExpSyntaxNode CreateInstanceNode(Token t);
public bool IsConvertable( IExpElementSource targetType )
public bool IsConvertable(IExpElementSource targetType)
{
if( targetType == null ) {
if (targetType == null) {
return false;
}
throw new NotImplementedException();
}
public static bool IsNullOrVoid( ExpInstantiableElement element )
public static bool IsNullOrVoid(ExpInstantiableElement element)
{
return element == null || element == ExpVoidElement.Only;
}
public abstract bool TryGetMember( string name, out ExpSyntaxNode memberNode );
public abstract bool TryGetMember(string name, out ExpSyntaxNode memberNode);
private sealed class ExpVoidElement : ExpInstantiableElement
{
@@ -112,12 +109,12 @@ namespace StgSharp.Script.Express
return;
}
public override ExpSyntaxNode CreateInstanceNode( Token t )
public override ExpSyntaxNode CreateInstanceNode(Token t)
{
return ExpSyntaxNode.Empty;
}
public override bool TryGetMember( string name, out ExpSyntaxNode memberNode )
public override bool TryGetMember(string name, out ExpSyntaxNode memberNode)
{
memberNode = ExpSyntaxNode.Empty;
return false;
@@ -136,21 +133,21 @@ namespace StgSharp.Script.Express
public abstract string Name { get; }
public void AddMember( string name, ExpSyntaxNode memberNode )
public void AddMember(string name, ExpSyntaxNode memberNode)
{
throw new NotImplementedException();
}
public abstract void Analyse();
public bool IsConvertable( IExpElementSource targetType )
public bool IsConvertable(IExpElementSource targetType)
{
return false;
}
public abstract ExpSyntaxNode MakeReference( params object[] options );
public abstract ExpSyntaxNode MakeReference(params object[] options);
public abstract bool TryGetMember( string name, out ExpSyntaxNode memberNode );
public abstract bool TryGetMember(string name, out ExpSyntaxNode memberNode);
}
}
+56 -63
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpExceptions.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpExceptions"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -44,17 +41,17 @@ namespace StgSharp.Script.Express
private Token _pos;
public ExpException( string message ) : base( message ) { }
public ExpException(string message) : base(message) { }
public ExpException( Token position, string message )
: base( $"Express compile error at {position.Line}-{position.Column}:\n{message}" )
public ExpException(Token position, string message)
: base($"Express compile error at {position.Line}-{position.Column}:\n{message}")
{
_pos = position;
}
public ExpException( ExpSyntaxNode node, string message )
public ExpException(ExpSyntaxNode node, string message)
: base(
$"Express compile error at {node.Source.Line}-{node.Source.Column}:\n{message}" )
$"Express compile error at {node.Source.Line}-{node.Source.Column}:\n{message}")
{
_pos = node._source;
}
@@ -64,36 +61,34 @@ namespace StgSharp.Script.Express
public class ExpInvalidCharException : ExpException
{
public ExpInvalidCharException( char c ) : base( $"An unknown char {c} occurred." ) { }
public ExpInvalidCharException(char c) : base($"An unknown char {c} occurred.") { }
public ExpInvalidCharException( int index )
: base( $"Cannot read a token from line at {index}" ) { }
public ExpInvalidCharException(int index) : base($"Cannot read a token from line at {index}") { }
}
public class ExpStringNotCloseException : ExpException
{
public ExpStringNotCloseException( int linenum )
: base( $"A string does not closed at end of line {linenum}." ) { }
public ExpStringNotCloseException(int linenum) : base($"A string does not closed at end of line {linenum}.") { }
}
public class ExpInvalidSyntaxException : ExpException
{
public ExpInvalidSyntaxException( string message ) : base( message ) { }
public ExpInvalidSyntaxException(string message) : base(message) { }
public static void ThrowNonCollectionIndex( Token t )
public static void ThrowNonCollectionIndex(Token t)
{
throw new ExpInvalidSyntaxException(
$"Use a collection indexer to a non-collection variable at line {t.Line} column {t.Column}" );
$"Use a collection indexer to a non-collection variable at line {t.Line} column {t.Column}");
}
public static void ThrowNoOperator( Token t )
public static void ThrowNoOperator(Token t)
{
throw new ExpInvalidSyntaxException(
$"No operator but more than one operand before line {t.Line} column {t.Column}" );
$"No operator but more than one operand before line {t.Line} column {t.Column}");
}
}
@@ -101,70 +96,68 @@ namespace StgSharp.Script.Express
public class ExpInvalidElementDeclareEndingExceptions : ExpException
{
public ExpInvalidElementDeclareEndingExceptions( string declaredName, string endedName )
public ExpInvalidElementDeclareEndingExceptions(string declaredName, string endedName)
: base(
$"The datatype is declared with name {declaredName} but ended with {endedName}" ) { }
$"The datatype is declared with name {declaredName} but ended with {endedName}") { }
}
public class ExpInvalidElementNameException : ExpException
{
public ExpInvalidElementNameException( string elementName, ExpSchema schema )
: base( $"Cannot find any element named {elementName} in {schema.Name}" ) { }
public ExpInvalidElementNameException(string elementName, ExpSchema schema)
: base($"Cannot find any element named {elementName} in {schema.Name}") { }
}
public class ExpInvalidTypeException : ExpException
{
public ExpInvalidTypeException( ExpSyntaxNode node, string required, string provided )
public ExpInvalidTypeException(ExpSyntaxNode node, string required, string provided)
: base(
node,
$"Type {required} is required at position, but a {provided} instance is provided." ) { }
$"Type {required} is required at position, but a {provided} instance is provided.") { }
public ExpInvalidTypeException( Token t, string required, string provided )
public ExpInvalidTypeException(Token t, string required, string provided)
: base(
t,
$"Type {required} is required at position, but a {provided} instance is provided." ) { }
$"Type {required} is required at position, but a {provided} instance is provided.") { }
}
public class ExpCaseNotFoundException : ArgumentOutOfRangeException
{
public ExpCaseNotFoundException( ExpSwitchNode token, ExpSyntaxNode label )
public ExpCaseNotFoundException(ExpSwitchNode token, ExpSyntaxNode label)
: base(
$"Attempt to read or write the label at ({token.Line},{token.Column}), that does not exist in SWITCH expression at ({token.Line},{token.Column})" ) { }
$"Attempt to read or write the label at ({token.Line},{token.Column}), that does not exist in SWITCH expression at ({token.Line},{token.Column})") { }
}
public class ExpInvalidCollectionMemberTypeException : InvalidCastException
{
public ExpInvalidCollectionMemberTypeException(
ExpElementInstance elementInstance,
ExpCollectionBase collection )
public ExpInvalidCollectionMemberTypeException(ExpElementInstance elementInstance, ExpCollectionBase collection)
: base(
$"Attempt to add or remove an element of type: {elementInstance.ElementType} from a collection collects {collection.MemberType}" ) { }
$"Attempt to add or remove an element of type: {elementInstance.ElementType} from a collection collects {collection.MemberType}") { }
}
public class ExpInvalidSchemaIncludeException : InvalidOperationException
{
public ExpInvalidSchemaIncludeException( ExpSchema context, ExpSchema source )
public ExpInvalidSchemaIncludeException(ExpSchema context, ExpSchema source)
: base(
$"Attempted to refer to an EXPRESS language expression in the current schema context '{context.Name}', but this expression comes from another schema '{source.Name}' that has not been included." ) { }
$"Attempted to refer to an EXPRESS language expression in the current schema context '{context.Name}', but this expression comes from another schema '{source.Name}' that has not been included.") { }
}
public class ExpElementLoadException : TypeLoadException
{
public ExpElementLoadException( string typeName, ExpSchema context )
public ExpElementLoadException(string typeName, ExpSchema context)
: base(
$"Cannot find the element {typeName} in schema {context.Name} and its included schemas" ) { }
$"Cannot find the element {typeName} in schema {context.Name} and its included schemas") { }
}
@@ -172,16 +165,16 @@ namespace StgSharp.Script.Express
{
public ExpCompileNotInitializedException()
: base( "Attempt to compile an EXPRESS script before the init of compiler." ) { }
: base("Attempt to compile an EXPRESS script before the init of compiler.") { }
}
public class ExpCompileException : ExpException
{
public ExpCompileException( Token pos, string message )
public ExpCompileException(Token pos, string message)
: base(
$"Compiler exception occur when processing token at line {pos.Line}, column {pos.Column}. Detailed message:{Environment.NewLine}{message} " ) { }
$"Compiler exception occur when processing token at line {pos.Line}, column {pos.Column}. Detailed message:{Environment.NewLine}{message} ") { }
}
}
+40 -43
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpNodeFlag.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpNodeFlag"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
@@ -37,28 +34,28 @@ using System.Threading.Tasks;
namespace StgSharp.Script.Express
{
[EditorBrowsable( EditorBrowsableState.Never )]
[EditorBrowsable(EditorBrowsableState.Never)]
public static class ExpNodeFlagHelper
{
public static bool IsInFlag( this ExpNodeFlag flag, long target )
public static bool IsInFlag(this ExpNodeFlag flag, long target)
{
return ( ( long )flag & target ) != 0;
return ((long)flag & target) != 0;
}
public static bool IsInFlag( this ExpNodeFlag flag, ExpNodeFlag target )
public static bool IsInFlag(this ExpNodeFlag flag, ExpNodeFlag target)
{
return ( long )( flag & target ) != 0;
return (long)(flag & target) != 0;
}
public static bool IsNotInFlag( this ExpNodeFlag flag, long target )
public static bool IsNotInFlag(this ExpNodeFlag flag, long target)
{
return ( ( long )flag & target ) == 0;
return ((long)flag & target) == 0;
}
public static bool IsNotInFlag( this ExpNodeFlag flag, ExpNodeFlag target )
public static bool IsNotInFlag(this ExpNodeFlag flag, ExpNodeFlag target)
{
return ( long )( flag & target ) == 0;
return (long)(flag & target) == 0;
}
}
@@ -67,7 +64,7 @@ namespace StgSharp.Script.Express
public enum ExpNodeFlag : long
{
//string as name of non-builtin variables
// string as name of non-builtin variables
None = 0,
Name_Element = 1,
Name_Param = 2,
@@ -76,14 +73,14 @@ namespace StgSharp.Script.Express
Name_Operator = 16,
Name_Any = Name_Block | Name_Element | Name_Keyword | Name_Param | Name_Operator,
//any type of collections, also has NAME flag
// any type of collections, also has NAME flag
Collection_Set = 32,
Collection_Bag = 64,
Collection_Array = 128,
Collection_List = 256,
Collection_Any = Collection_Set | Collection_Bag | Collection_Array | Collection_List,
//the variable is type of element, both builtin and non-builtin has this flag
// the variable is type of element, both builtin and non-builtin has this flag
Element_Const = 512,
Element_Entity = 1024,
Element_Type = 2048,
@@ -91,7 +88,7 @@ namespace StgSharp.Script.Express
Element_Function = 8192,
Element_Any = Element_Entity | Element_Const | Element_Function | Element_Rule | Element_Type,
//variable is one of these builtin type
// variable is one of these builtin type
BuiltinType_Int = 16384,
BuiltinType_Real = 32768,
BuiltinType_String = 65536,
@@ -101,20 +98,20 @@ namespace StgSharp.Script.Express
BuiltinType_Number = BuiltinType_Real | BuiltinType_Int,
BuiltinType_Any = BuiltinType_Int | BuiltinType_Real | BuiltinType_String | BuiltinType_Boolean | BuiltinType_Binary | BuiltinType_Logic,
//the token is root of a branch
// the token is root of a branch
Branch_If = 0x1_000,
Branch_Switch = 0x2_0000,
Branch_Repeat = 0x4_0000,
Branch_Any = Branch_If | Branch_Repeat | Branch_Switch,
//the token is one of separators
// the token is one of separators
Separator_Inline = 0x8_0000, //, or sth else
Separator_Line = 0x10_0000, //; or eth else
Separator_Block = 0x20_0000, //{}or sth else
Separator_Range = 0x40_0000, //()or sth else
Separator_Any = Separator_Inline | Separator_Line | Separator_Block | Separator_Range,
//the token is a kind of operator
// the token is a kind of operator
Operator_Unary = 0x40_0000,
Operator_Binary = 0x80_0000,
Operator_SuperType = 0x100_0000,
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpNodeTempEnumerator.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpNodeTempEnumerator"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System;
@@ -45,31 +42,28 @@ namespace StgSharp.Script.Express
public static class ExpNodeNextEnumeratorExtensions
{
public static ExpNodeTempEnumerator AsCollectionEnumerator(
this ExpSyntaxNode token,
bool unpack )
public static ExpNodeTempEnumerator AsCollectionEnumerator(this ExpSyntaxNode token, bool unpack)
{
ExpNodeTempEnumerator enumerator = new ExpNodeTempEnumerator( token, unpack );
ExpNodeTempEnumerator enumerator = new ExpNodeTempEnumerator(token, unpack);
IExpElementSource type = token.EqualityTypeConvert;
while( enumerator.MoveNext() )
while (enumerator.MoveNext())
{
if( enumerator. Current != type ) {
if (enumerator. Current != type) {
throw new InvalidCastException();
}
}
return enumerator;
}
[MethodImpl( MethodImplOptions.AggressiveInlining )]
public static ExpNodePresidentEnumerator ToPresidentEnumerator( this ExpSyntaxNode node )
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static ExpNodePresidentEnumerator ToPresidentEnumerator(this ExpSyntaxNode node)
{
return new ExpNodePresidentEnumerator( node );
return new ExpNodePresidentEnumerator(node);
}
public static ExpNodePresidentEnumerator TupleToPresidentEnumerator(
this ExpSyntaxNode tuple )
public static ExpNodePresidentEnumerator TupleToPresidentEnumerator(this ExpSyntaxNode tuple)
{
return new ExpNodePresidentEnumerator( tuple.Right );
return new ExpNodePresidentEnumerator(tuple.Right);
}
}
@@ -80,50 +74,50 @@ namespace StgSharp.Script.Express
private int _index = -1;
private List<ExpSyntaxNode> _begin = new List<ExpSyntaxNode>();
public ExpNodePresidentEnumerator( ExpSyntaxNode token )
public ExpNodePresidentEnumerator(ExpSyntaxNode token)
{
_begin.Add( token );
_begin.Add(token);
ExpSyntaxNode t = token;
while( !ReferenceEquals( t.Next, token ) && t.Next != null )
while (!ReferenceEquals(t.Next, token) && t.Next != null)
{
t = t.Next;
_begin.Add( t );
_begin.Add(t);
}
}
public ExpSyntaxNode this[ int index ]
public ExpSyntaxNode this[int index]
{
get
{
ArgumentOutOfRangeException.ThrowIfNegative( index );
ArgumentOutOfRangeException.ThrowIfGreaterThan( index, _begin.Count );
return _begin[ index ];
ArgumentOutOfRangeException.ThrowIfNegative(index);
ArgumentOutOfRangeException.ThrowIfGreaterThan(index, _begin.Count);
return _begin[index];
}
}
public ExpSyntaxNode Current => _begin[ _index ];
public ExpSyntaxNode Current => _begin[_index];
public int Count => _begin.Count;
public void AssertEnumeratorCount( int count )
public void AssertEnumeratorCount(int count)
{
if( _begin.Count != count ) {
if (_begin.Count != count) {
throw new InvalidOperationException(
$"Enumerator count mismatch. Expected {count}, but got {_begin.Count}." );
$"Enumerator count mismatch. Expected {count}, but got {_begin.Count}.");
}
}
public void AssertEnumeratorCount( int min, int max )
public void AssertEnumeratorCount(int min, int max)
{
if( _begin.Count < min || _begin.Count > max ) {
if (_begin.Count < min || _begin.Count > max) {
throw new InvalidOperationException(
$"Enumerator count mismatch. Expected between {min} and {max}, but got {_begin.Count}." );
$"Enumerator count mismatch. Expected between {min} and {max}, but got {_begin.Count}.");
}
}
public Span<ExpSyntaxNode> AsSpan()
{
return CollectionsMarshal.AsSpan( _begin );
return CollectionsMarshal.AsSpan(_begin);
}
public void Dispose()
@@ -133,7 +127,7 @@ namespace StgSharp.Script.Express
public bool MoveNext()
{
if( _index < _begin.Count - 1 )
if (_index < _begin.Count - 1)
{
_index++;
return true;
@@ -155,13 +149,13 @@ namespace StgSharp.Script.Express
private ExpSyntaxNode? _current,_begin;
public ExpNodeTempEnumerator( ExpSyntaxNode node )
public ExpNodeTempEnumerator(ExpSyntaxNode node)
{
_current = null;
_begin = node;
}
public ExpNodeTempEnumerator( ExpSyntaxNode node, bool unpack )
public ExpNodeTempEnumerator(ExpSyntaxNode node, bool unpack)
{
_current = null;
_begin = unpack ? node.Right : node;
@@ -171,13 +165,13 @@ namespace StgSharp.Script.Express
public bool MoveNext()
{
if( _current == null )
if (_current == null)
{
_current = _begin;
return true;
}
ExpSyntaxNode next = _current.Next;
if( ReferenceEquals( next, _begin ) || next == null ) {
if (ReferenceEquals(next, _begin) || next == null) {
return false;
}
_current = next;
+42 -46
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpPostProcessor.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpPostProcessor"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -48,26 +45,26 @@ namespace StgSharp.Script.Express
private readonly string _interfaceName /*= typeof( )/**/;
private readonly string _sourcePath;
public string Process( string filePath )
public string Process(string filePath)
{
Dictionary<string, string> factoryMethods = new Dictionary<string, string>();
FileStream file = File.OpenRead( filePath );
SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText( File.ReadAllText( filePath ) );
FileStream file = File.OpenRead(filePath);
SyntaxTree syntaxTree = CSharpSyntaxTree.ParseText(File.ReadAllText(filePath));
CSharpCompilation compilation = CSharpCompilation.Create( "Analysis" )
.AddSyntaxTrees( syntaxTree )
CSharpCompilation compilation = CSharpCompilation.Create("Analysis")
.AddSyntaxTrees(syntaxTree)
.AddReferences(
MetadataReference.CreateFromFile(
typeof( object ).Assembly.Location ) );
typeof(object).Assembly.Location));
INamedTypeSymbol? interfaceSymbol = compilation.GetTypeByMetadataName( _interfaceName );
INamedTypeSymbol? interfaceSymbol = compilation.GetTypeByMetadataName(_interfaceName);
if( interfaceSymbol == null ) {
throw new InvalidOperationException( $"Interface '{_interfaceName}' not found." );
if (interfaceSymbol == null) {
throw new InvalidOperationException($"Interface '{_interfaceName}' not found.");
}
SemanticModel semanticModel = compilation.GetSemanticModel( syntaxTree );
SemanticModel semanticModel = compilation.GetSemanticModel(syntaxTree);
SyntaxNode root = syntaxTree.GetRoot();
IEnumerable<ClassDeclarationSyntax> classDeclarations = root.DescendantNodes()
@@ -78,28 +75,27 @@ namespace StgSharp.Script.Express
t => SymbolEqualityComparer.Default
.Equals(
semanticModel.GetTypeInfo(
t.Type )
t.Type)
.Type,
interfaceSymbol ) ) ??
false );
interfaceSymbol)) ??
false);
foreach( ClassDeclarationSyntax classDeclaration in classDeclarations )
foreach (ClassDeclarationSyntax classDeclaration in classDeclarations)
{
string className = classDeclaration.Identifier.Text;
IMethodSymbol? factoryMethod = interfaceSymbol.GetMembers()
.OfType<IMethodSymbol>()
.FirstOrDefault(
m => m.IsStatic &&
m.Name == "CreateInstance" );
m => m.IsStatic && m.Name == "CreateInstance");
if( factoryMethod != null ) {
factoryMethods[ className ] = $"() => {interfaceSymbol.Name}.CreateInstance()";
if (factoryMethod != null) {
factoryMethods[className] = $"() => {interfaceSymbol.Name}.CreateInstance()";
}
}
string code = "var factoryMethods = new Dictionary<string, Func<object>>\n{\n";
code += string.Join(
",\n", factoryMethods.Select( kvp => $" {{ \"{kvp.Key}\", {kvp.Value} }}" ) );
",\n", factoryMethods.Select(kvp => $" {{ \"{kvp.Key}\", {kvp.Value} }}"));
code += "\n};";
return code;
+32 -35
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSchemaBase.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSchemaBase"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Collections;
using System;
@@ -49,21 +46,21 @@ namespace StgSharp.Script.Express
public string Name { get; internal set; }
public abstract void LoadFromSource( ExpSchemaSource source );
public abstract void LoadFromSource(ExpSchemaSource source);
public abstract bool TryGetConst( string name, out ExpElementInstance c );
public abstract bool TryGetConst(string name, out ExpElementInstance c);
public abstract bool TryGetEntity( string name, out ExpEntitySource e );
public abstract bool TryGetEntity(string name, out ExpEntitySource e);
public abstract bool TryGetFunction( string name, out ExpFunctionSource f );
public abstract bool TryGetFunction(string name, out ExpFunctionSource f);
public abstract bool TryGetProcedure( string name, out ExpProcedureSource p );
public abstract bool TryGetProcedure(string name, out ExpProcedureSource p);
public abstract bool TryGetRule( string name, out ExpRuleSource r );
public abstract bool TryGetRule(string name, out ExpRuleSource r);
public abstract bool TryGetSchemaInclude( string name, out ExpSchema include );
public abstract bool TryGetSchemaInclude(string name, out ExpSchema include);
public abstract bool TryGetType( string name, out ExpTypeSource t );
public abstract bool TryGetType(string name, out ExpTypeSource t);
#pragma warning disable CS8618
protected FrozenDictionary<string, ExpElementInstance> ConstDict { get; set; }
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSchemaSource.Compile.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSchemaSource.Compile"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -48,14 +45,14 @@ namespace StgSharp.Script.Express
public partial class ExpSchemaSource
{
public ExpSchema Compile( ExpressCompileOption option )
public ExpSchema Compile(ExpressCompileOption option)
{
switch( option )
switch (option)
{
case ExpressCompileOption.Default:
return Compile_Translate( option );
return Compile_Translate(option);
case ExpressCompileOption.Translate:
return Compile_Translate( option );
return Compile_Translate(option);
case ExpressCompileOption.Compile:
throw new NotSupportedException();
default:
@@ -63,7 +60,7 @@ namespace StgSharp.Script.Express
}
}
internal GeneratedExpSchema Compile_Translate( ExpressCompileOption option )
internal GeneratedExpSchema Compile_Translate(ExpressCompileOption option)
{
throw new NotImplementedException();
}
+131 -164
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSchemaSource.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSchemaSource"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using StgSharp.Collections;
using StgSharp.Graphics.OpenGL;
@@ -79,69 +76,66 @@ namespace StgSharp.Script.Express
public ExpSchema Organize()
{
_compileResult.LoadFromSource( this );
_compileResult.LoadFromSource(this);
return _compileResult;
}
public void ReadSchema( ExpFileSource reader )
public void ReadSchema(ExpFileSource reader)
{
string line = reader.ReadLine();
while( !_schemaBegin.IsMatch( line ) ) {
while (!_schemaBegin.IsMatch(line)) {
line = reader.ReadLine();
}
name = _schemaBegin.Match( line ).Groups[ "namespace" ].Value;
name = _schemaBegin.Match(line).Groups["namespace"].Value;
while( !_schemaEnd.IsMatch( line ) )
while (!_schemaEnd.IsMatch(line))
{
if( TryReadConst( line, reader, out IExpElementSource source ) )
if (TryReadConst(line, reader, out IExpElementSource source))
{
_sourceCache.Add( source );
} else if( TryReadType( line, reader, out source ) )
_sourceCache.Add(source);
} else if (TryReadType(line, reader, out source))
{
_sourceCache.Add( source );
} else if( TryReadEntity( line, reader, out source ) )
_sourceCache.Add(source);
} else if (TryReadEntity(line, reader, out source))
{
_sourceCache.Add( source );
} else if( TryReadRule( line, reader, out source ) )
_sourceCache.Add(source);
} else if (TryReadRule(line, reader, out source))
{
_sourceCache.Add( source );
} else if( TryReadFunction( line, reader, out source ) ) {
_sourceCache.Add( source );
_sourceCache.Add(source);
} else if (TryReadFunction(line, reader, out source)) {
_sourceCache.Add(source);
}
line = reader.ReadLine();
}
}
public static bool TryReadSchema(
string firstLine,
ExpFileSource reader,
out ExpSchemaSource source )
public static bool TryReadSchema(string firstLine, ExpFileSource reader, out ExpSchemaSource source)
{
if( !_schemaBegin.IsMatch( firstLine ) )
if (!_schemaBegin.IsMatch(firstLine))
{
source = null!;
return false;
}
ExpSchemaSource _source = new ExpSchemaSource();
_source.name = _schemaBegin.Match( firstLine ).Groups[ "namespace" ].Value;
_source.name = _schemaBegin.Match(firstLine).Groups["namespace"].Value;
while( !_schemaEnd.IsMatch( firstLine ) )
while (!_schemaEnd.IsMatch(firstLine))
{
if( _source.TryReadConst( firstLine, reader,
out IExpElementSource _elementSource ) )
if (_source.TryReadConst(firstLine, reader,
out IExpElementSource _elementSource))
{
_source._sourceCache.Add( _elementSource );
} else if( _source.TryReadType( firstLine, reader, out _elementSource ) )
_source._sourceCache.Add(_elementSource);
} else if (_source.TryReadType(firstLine, reader, out _elementSource))
{
_source._sourceCache.Add( _elementSource );
} else if( _source.TryReadEntity( firstLine, reader, out _elementSource ) )
_source._sourceCache.Add(_elementSource);
} else if (_source.TryReadEntity(firstLine, reader, out _elementSource))
{
_source._sourceCache.Add( _elementSource );
} else if( _source.TryReadRule( firstLine, reader, out _elementSource ) )
_source._sourceCache.Add(_elementSource);
} else if (_source.TryReadRule(firstLine, reader, out _elementSource))
{
_source._sourceCache.Add( _elementSource );
} else if( _source.TryReadFunction( firstLine, reader, out _elementSource ) ) {
_source._sourceCache.Add( _elementSource );
_source._sourceCache.Add(_elementSource);
} else if (_source.TryReadFunction(firstLine, reader, out _elementSource)) {
_source._sourceCache.Add(_elementSource);
}
firstLine = reader.ReadLine();
}
@@ -149,74 +143,59 @@ namespace StgSharp.Script.Express
return true;
}
[GeneratedRegex( @"\s*CONSTANT" )]
[GeneratedRegex(@"\s*CONSTANT")]
private static partial Regex GetConstDefineBegin();
[GeneratedRegex( @"\s*END_CONSTANT;" )]
[GeneratedRegex(@"\s*END_CONSTANT;")]
private static partial Regex GetConstDefineEnd();
[GeneratedRegex( @"\s*ENTITY\s*(?<TypeName>[A-Za-z0-9_]+)\s*", RegexOptions.Compiled )]
[GeneratedRegex(@"\s*ENTITY\s*(?<TypeName>[A-Za-z0-9_]+)\s*", RegexOptions.Compiled)]
private static partial Regex GetEntityDefineBegin();
[GeneratedRegex(
@"\s*END_ENTITY;\s*--\s*(?<TypeName>[A-Za-z0-9_]+)\s*",
RegexOptions.Compiled )]
[GeneratedRegex(@"\s*END_ENTITY;\s*--\s*(?<TypeName>[A-Za-z0-9_]+)\s*", RegexOptions.Compiled)]
private static partial Regex GetEntityDefineEnd();
[GeneratedRegex(
@"\s*FUNCTION\s*\s*(?<FunctionName>[a-zA-Z0-9_]+)\s*(?<Remaining>.*)",
RegexOptions.Compiled )]
[GeneratedRegex(@"\s*FUNCTION\s*\s*(?<FunctionName>[a-zA-Z0-9_]+)\s*(?<Remaining>.*)", RegexOptions.Compiled)]
private static partial Regex GetFunctionDefineBegin();
[GeneratedRegex(
@"\s*END_FUNCTION\s*;\s*--\s*(?<FunctionName>[a-zA-Z0-9_]+)",
RegexOptions.Compiled )]
[GeneratedRegex(@"\s*END_FUNCTION\s*;\s*--\s*(?<FunctionName>[a-zA-Z0-9_]+)", RegexOptions.Compiled)]
private static partial Regex GetFunctionDefineEnd();
[GeneratedRegex(
@"\s*RULE\s*(?<RuleName>[a-zA-Z0-9_]+)\s*FOR\s*\((?<Target>[a-zA-Z0-9_]*(?:\s*\)\s*;)?)",
RegexOptions.Compiled )]
RegexOptions.Compiled)]
private static partial Regex GetRuleDefineBegin();
[GeneratedRegex(
@"\s*END_RULE\s*;\s*--\s*(?<RuleName>[A-Za-z0-9_]+)",
RegexOptions.Compiled )]
[GeneratedRegex(@"\s*END_RULE\s*;\s*--\s*(?<RuleName>[A-Za-z0-9_]+)", RegexOptions.Compiled)]
private static partial Regex GetRuleDefineEnd();
[GeneratedRegex( @"\s*SCHEMA\s*(?<namespace>[A-Za-z0-9_]+)\s?;" )]
[GeneratedRegex(@"\s*SCHEMA\s*(?<namespace>[A-Za-z0-9_]+)\s?;")]
private static partial Regex GetSchemaBegin();
[GeneratedRegex( @"END_SCHEMA;\s*--\s*(?<namespace>[A-Za-z0-9_]+)", RegexOptions.Compiled )]
[GeneratedRegex(@"END_SCHEMA;\s*--\s*(?<namespace>[A-Za-z0-9_]+)", RegexOptions.Compiled)]
private static partial Regex GetSchemaEnd();
[GeneratedRegex(
@"\s*TYPE\s+(?<TypeName>[A-Za-z0-9_]+)\s*=\s*(?<Remaining>[A-Z]+)",
RegexOptions.Compiled )]
[GeneratedRegex(@"\s*TYPE\s+(?<TypeName>[A-Za-z0-9_]+)\s*=\s*(?<Remaining>[A-Z]+)", RegexOptions.Compiled)]
private static partial Regex GetTypeDefineBegin();
[GeneratedRegex(
@"\s*END_TYPE\s*;\s*--\s*(?<TypeName>[a-zA-Z0-9_]+)",
RegexOptions.Compiled )]
[GeneratedRegex(@"\s*END_TYPE\s*;\s*--\s*(?<TypeName>[a-zA-Z0-9_]+)", RegexOptions.Compiled)]
private static partial Regex GetTypeDefineEnd();
private bool TryReadConst(
string firstLine,
ExpFileSource reader,
out IExpElementSource source )
private bool TryReadConst(string firstLine, ExpFileSource reader, out IExpElementSource source)
{
Match match = _constDefineBegin.Match( firstLine );
if( match.Success )
Match match = _constDefineBegin.Match(firstLine);
if (match.Success)
{
ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter(
"END_CONSTANT", reader.Location );
ExpConstantCollectionSource _source = new ExpConstantCollectionSource( transmitter );
"END_CONSTANT", reader.Location);
ExpConstantCollectionSource _source = new ExpConstantCollectionSource(transmitter);
string line = reader.ReadLine();
while( !_constDefineEnd.IsMatch( line ) )
while (!_constDefineEnd.IsMatch(line))
{
transmitter.WriteLine( line );
transmitter.WriteLine(line);
line = reader.ReadLine();
}
transmitter.WriteLine( "END_CONSTANT" );
transmitter.WriteLine("END_CONSTANT");
source = _source;
return true;
}
@@ -224,31 +203,28 @@ namespace StgSharp.Script.Express
return false;
}
private bool TryReadEntity(
string firstLine,
ExpFileSource reader,
out IExpElementSource source )
private bool TryReadEntity(string firstLine, ExpFileSource reader, out IExpElementSource source)
{
Match match = _entityDefineBegin.Match( firstLine );
if( match.Success )
Match match = _entityDefineBegin.Match(firstLine);
if (match.Success)
{
ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter(
"END_ENTITY", reader.Location );
"END_ENTITY", reader.Location);
ExpEntitySource _source = new ExpEntitySource(
match.Groups[ "TypeName" ].ToString(), transmitter );
match.Groups["TypeName"].ToString(), transmitter);
string line = reader.ReadLine();
match = _entityDefineEnd.Match( line );
while( !match.Success )
match = _entityDefineEnd.Match(line);
while (!match.Success)
{
transmitter.WriteLine( line );
transmitter.WriteLine(line);
line = reader.ReadLine();
match = _entityDefineEnd.Match( line );
match = _entityDefineEnd.Match(line);
}
string endedName = match.Groups[ "TypeName" ].ToString();
if( !string.Equals( endedName, _source.Name ) ) {
throw new ExpInvalidElementDeclareEndingExceptions( _source.Name, endedName );
string endedName = match.Groups["TypeName"].ToString();
if (!string.Equals(endedName, _source.Name)) {
throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName);
}
transmitter.WriteLine( "END_ENTITY" );
transmitter.WriteLine("END_ENTITY");
source = _source;
return true;
}
@@ -256,32 +232,29 @@ namespace StgSharp.Script.Express
return false;
}
private bool TryReadFunction(
string firstLine,
ExpFileSource reader,
out IExpElementSource source )
private bool TryReadFunction(string firstLine, ExpFileSource reader, out IExpElementSource source)
{
Match match = _functionDefineBegin.Match( firstLine );
if( match.Success )
Match match = _functionDefineBegin.Match(firstLine);
if (match.Success)
{
ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter(
"END_FUNCTION", reader.Location );
"END_FUNCTION", reader.Location);
ExpFunctionSource _source = new ExpFunctionSource(
match.Groups[ "FunctionName" ].ToString(), transmitter );
transmitter.WriteLine( match.Groups[ "Remaining" ].ToString() );
match.Groups["FunctionName"].ToString(), transmitter);
transmitter.WriteLine(match.Groups["Remaining"].ToString());
string line = reader.ReadLine();
match = _functionDefineEnd.Match( line );
while( !match.Success )
match = _functionDefineEnd.Match(line);
while (!match.Success)
{
transmitter.WriteLine( line );
transmitter.WriteLine(line);
line = reader.ReadLine();
match = _functionDefineEnd.Match( line );
match = _functionDefineEnd.Match(line);
}
string endedName = match.Groups[ "FunctionName" ].ToString();
if( !string.Equals( endedName, _source.Name ) ) {
throw new ExpInvalidElementDeclareEndingExceptions( _source.Name, endedName );
string endedName = match.Groups["FunctionName"].ToString();
if (!string.Equals(endedName, _source.Name)) {
throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName);
}
transmitter.WriteLine( "END_FUNCTION" );
transmitter.WriteLine("END_FUNCTION");
source = _source;
return true;
}
@@ -289,35 +262,32 @@ namespace StgSharp.Script.Express
return false;
}
private bool TryReadRule(
string firstLine,
ExpFileSource reader,
out IExpElementSource source )
private bool TryReadRule(string firstLine, ExpFileSource reader, out IExpElementSource source)
{
Match match = _ruleDefineBegin.Match( firstLine );
if( match.Success )
Match match = _ruleDefineBegin.Match(firstLine);
if (match.Success)
{
ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter(
"END_RULE", reader.Location );
"END_RULE", reader.Location);
ExpRuleSource _source = new ExpRuleSource(
match.Groups[ "RuleName" ].ToString(), transmitter );
string target = match.Groups[ "Target" ].ToString();
if( !string.IsNullOrEmpty( target ) ) {
transmitter.WriteLine( target );
match.Groups["RuleName"].ToString(), transmitter);
string target = match.Groups["Target"].ToString();
if (!string.IsNullOrEmpty(target)) {
transmitter.WriteLine(target);
}
string line = reader.ReadLine();
match = _ruleDefineEnd.Match( line );
while( !match.Success )
match = _ruleDefineEnd.Match(line);
while (!match.Success)
{
transmitter.WriteLine( line );
transmitter.WriteLine(line);
line = reader.ReadLine();
match = _ruleDefineEnd.Match( line );
match = _ruleDefineEnd.Match(line);
}
string endedName = match.Groups[ "RuleName" ].ToString();
if( !string.Equals( endedName, _source.Name ) ) {
throw new ExpInvalidElementDeclareEndingExceptions( _source.Name, endedName );
string endedName = match.Groups["RuleName"].ToString();
if (!string.Equals(endedName, _source.Name)) {
throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName);
}
transmitter.WriteLine( "END_RULE" );
transmitter.WriteLine("END_RULE");
source = _source;
return true;
}
@@ -325,32 +295,29 @@ namespace StgSharp.Script.Express
return false;
}
private bool TryReadType(
string firstLine,
ExpFileSource reader,
out IExpElementSource source )
private bool TryReadType(string firstLine, ExpFileSource reader, out IExpElementSource source)
{
Match match = _typeDefineBegin.Match( firstLine );
if( match.Success )
Match match = _typeDefineBegin.Match(firstLine);
if (match.Success)
{
ScriptSourceTransmitter transmitter = new ScriptSourceTransmitter(
"END_ENTITY", reader.Location );
"END_ENTITY", reader.Location);
ExpTypeSource _source = new ExpTypeSource(
match.Groups[ "TypeName" ].ToString(), transmitter );
transmitter.WriteLine( match.Groups[ "Remaining" ].ToString() );
match.Groups["TypeName"].ToString(), transmitter);
transmitter.WriteLine(match.Groups["Remaining"].ToString());
string line = reader.ReadLine();
match = _typeDefineEnd.Match( line );
while( !match.Success )
match = _typeDefineEnd.Match(line);
while (!match.Success)
{
transmitter.WriteLine( line );
transmitter.WriteLine(line);
line = reader.ReadLine();
match = _typeDefineEnd.Match( line );
match = _typeDefineEnd.Match(line);
}
string endedName = match.Groups[ "TypeName" ].ToString();
if( !string.Equals( endedName, _source.Name ) ) {
throw new ExpInvalidElementDeclareEndingExceptions( _source.Name, endedName );
string endedName = match.Groups["TypeName"].ToString();
if (!string.Equals(endedName, _source.Name)) {
throw new ExpInvalidElementDeclareEndingExceptions(_source.Name, endedName);
}
transmitter.WriteLine( "END_ENTITY" );
transmitter.WriteLine("END_ENTITY");
source = _source;
return true;
}
+40 -44
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSource.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSource"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
@@ -46,21 +43,20 @@ namespace StgSharp.Script.Express
private MemoryMappedFile _expMemoryMappedFile;
private MemoryMappedViewStream _expMemoryMappedStream;
private SemaphoreSlim readLineSemaphore = new SemaphoreSlim( 1, 1 );
private SemaphoreSlim readLineSemaphore = new SemaphoreSlim(1, 1);
private StreamReader _memoryReader;
public ExpFileSource( string path )
public ExpFileSource(string path)
{
if( !File.Exists( path ) ) {
if (!File.Exists(path)) {
throw new FileNotFoundException();
}
_expFileStream = new FileStream( path, FileMode.Open, FileAccess.Read );
_expFileStream = new FileStream(path, FileMode.Open, FileAccess.Read);
_expMemoryMappedFile = MemoryMappedFile.CreateFromFile(
_expFileStream, null, 0, MemoryMappedFileAccess.Read, HandleInheritability.None,
true );
_expFileStream, null, 0, MemoryMappedFileAccess.Read, HandleInheritability.None, true);
_expMemoryMappedStream = _expMemoryMappedFile.CreateViewStream(
offset: 0, size: 0, access: MemoryMappedFileAccess.Read );
_memoryReader = new StreamReader( _expMemoryMappedStream );
offset:0, size:0, access:MemoryMappedFileAccess.Read);
_memoryReader = new StreamReader(_expMemoryMappedStream);
}
public bool IsEmpty => _memoryReader.EndOfStream;
@@ -69,13 +65,13 @@ namespace StgSharp.Script.Express
// ~ExpFileSource()
// {
// Dispose(disposing: false);
// Dispose(disposing: false);
// }
public void Dispose()
{
Dispose( disposing: true );
GC.SuppressFinalize( this );
Dispose(disposing:true);
GC.SuppressFinalize(this);
}
public void EndWriting() { }
@@ -89,7 +85,7 @@ namespace StgSharp.Script.Express
return line;
}
public string ReadLine( out int position )
public string ReadLine(out int position)
{
throw new NotImplementedException();
}
@@ -97,16 +93,16 @@ namespace StgSharp.Script.Express
public void ResetToBegin()
{
readLineSemaphore.Wait();
_expMemoryMappedStream.Seek( 0, SeekOrigin.Begin );
_expMemoryMappedStream.Seek(0, SeekOrigin.Begin);
_location = 0;
readLineSemaphore.Release();
}
protected virtual void Dispose( bool disposing )
protected virtual void Dispose(bool disposing)
{
if( !disposedValue )
if (!disposedValue)
{
if( disposing )
if (disposing)
{
_expFileStream.Dispose();
_expMemoryMappedFile.Dispose();
@@ -117,7 +113,7 @@ namespace StgSharp.Script.Express
}
}
IScriptSourceProvider IScriptSourceProvider.Slice( int location, int count )
IScriptSourceProvider IScriptSourceProvider.Slice(int location, int count)
{
throw new NotSupportedException();
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.CaseOf.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.CaseOf"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Diagnostics;
@@ -42,38 +39,37 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
private bool AppendToken_CaseOf( Token t )
private bool AppendToken_CaseOf(Token t)
{
Token op;
ExpSyntaxNode root;
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Case:
CaseOfStateCache state = new CaseOfStateCache( t );
CaseOfStateCache state = new CaseOfStateCache(t);
_cache.CurrentDepthMark.StateCache = state;
state.CurrentState = t.Value;
return true;
case ExpKeyword.Of:
state = _cache.StateOfCurrentDepth<CaseOfStateCache>();
while( _cache.TryPopOperator( out op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out root );
_cache.PopOperand(out _, out root);
state.CaseExpression = root;
state.CurrentState = t.Value;
return true;
case ":":
state = _cache.StateOfCurrentDepth<CaseOfStateCache>();
if( state.CurrentState != ExpKeyword.Of &&
state.CurrentState != ExpKeyword.Otherwise )
if (state.CurrentState != ExpKeyword.Of && state.CurrentState != ExpKeyword.Otherwise)
{
root = _cache.PackAllStatements();
state.CloseCurrentCase( root );
state.CloseCurrentCase(root);
}
while( _cache.TryPopOperator( out op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out op)) {
ConvertAndPushOneOperator(op);
}
if( !_cache.PopOperand( out _, out root ) )
if (!_cache.PopOperand(out _, out root))
{
// sth wrong, case expression cannot generate;
}
@@ -82,20 +78,20 @@ namespace StgSharp.Script.Express
case ExpKeyword.Otherwise:
state = _cache.StateOfCurrentDepth<CaseOfStateCache>();
root = _cache.PackAllStatements();
state.CloseCurrentCase( root );
state.CloseCurrentCase(root);
state.CurrentState = t.Value;
return true;
case ExpKeyword.EndCase:
state = _cache.StateOfCurrentDepth<CaseOfStateCache>();
root = _cache.PackAllStatements();
state.CloseCurrentCase( root );
state.CloseCurrentCase(root);
root = new ExpSwitchNode(
state.Begin, state.CaseExpression, state.DefaultCase, state.Cases );
state.Begin, state.CaseExpression, state.DefaultCase, state.Cases);
_cache.DecreaseDepth();
_cache.StatementsInDepth.Push( root );
_cache.StatementsInDepth.Push(root);
return true;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
}
@@ -103,7 +99,7 @@ namespace StgSharp.Script.Express
private class CaseOfStateCache : ICompileDepthState
{
public CaseOfStateCache( Token t )
public CaseOfStateCache(Token t)
{
Begin = t;
}
@@ -121,9 +117,9 @@ namespace StgSharp.Script.Express
public Token Begin { get; init; }
public void CloseCurrentCase( ExpSyntaxNode root )
public void CloseCurrentCase(ExpSyntaxNode root)
{
Cases.Add( CurrentCase, root );
Cases.Add(CurrentCase, root);
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.Common.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.Common"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System;
@@ -45,7 +42,7 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
private bool IsSeparatorMatch( Token leftSperator, Token rightSeparator )
private bool IsSeparatorMatch(Token leftSperator, Token rightSeparator)
{
return leftSperator.Value switch
{
@@ -57,215 +54,215 @@ namespace StgSharp.Script.Express
};
}
private bool TryAppendIndexLeft( Token t )
private bool TryAppendIndexLeft(Token t)
{
if( t.Flag != TokenFlag.Index_Left ) {
if (t.Flag != TokenFlag.Index_Left) {
return false;
}
if( _cache.TryPeekOperand( out bool isNode, out _, out ExpSyntaxNode? node ) )
if (_cache.TryPeekOperand(out bool isNode, out _, out ExpSyntaxNode? node))
{
if( node.EqualityTypeConvert is not ExpCollectionBase ) {
ExpInvalidSyntaxException.ThrowNonCollectionIndex( t );
if (node.EqualityTypeConvert is not ExpCollectionBase) {
ExpInvalidSyntaxException.ThrowNonCollectionIndex(t);
}
}
_cache.PushOperator( t );
_cache.IncreaseDepth( ( int )ExpCompileStateCode.CollectionIndex );
_cache.PushOperator(t);
_cache.IncreaseDepth((int)ExpCompileStateCode.CollectionIndex);
return true;
}
private bool TryAppendIndexRight( Token t )
private bool TryAppendIndexRight(Token t)
{
if( t.Flag != TokenFlag.Index_Right ) {
if (t.Flag != TokenFlag.Index_Right) {
return false;
}
//reverse building
ClosePrefixReverse( t );
// reverse building
ClosePrefixReverse(t);
//make index node
_cache.PopOperand( out _, out ExpSyntaxNode? expNode );
if( !_cache.PopOperand( out Token colleToken, out ExpSyntaxNode? colleNode ) ) { }
// make index node
_cache.PopOperand(out _, out ExpSyntaxNode? expNode);
if (!_cache.PopOperand(out Token colleToken, out ExpSyntaxNode? colleNode)) { }
_cache.PushOperand(
ExpCollectionIndexNode.Create(
t, ( colleNode as ExpCollectionInstanceBase )!, expNode ) );
t, (colleNode as ExpCollectionInstanceBase)!, expNode));
return true;
}
private bool TryAppendMember( Token t )
private bool TryAppendMember(Token t)
{
if( t.Flag != TokenFlag.Member ) {
if (t.Flag != TokenFlag.Member) {
return false;
}
if( TryParseConstant( t ) ) {
if (TryParseConstant(t)) {
return true;
}
if( TryParseFunction( t ) ) {
if (TryParseFunction(t)) {
return true;
}
if( TryParseInstance( t ) ) {
if (TryParseInstance(t)) {
return true;
}
if( TryParseKeyword( t ) ) {
if (TryParseKeyword(t)) {
return true;
}
if( TryParseElementName( t ) ) {
if (TryParseElementName(t)) {
return true;
}
//Many thing miss here
_cache.PushOperand( ExpElementMemberNameNode.Create( t ) );
// Many thing miss here
_cache.PushOperand(ExpElementMemberNameNode.Create(t));
return true;
}
private bool TryAppendMiddleSeparator( Token t )
private bool TryAppendMiddleSeparator(Token t)
{
if( t.Flag != TokenFlag.Separator_Middle ) {
if (t.Flag != TokenFlag.Separator_Middle) {
return false;
}
while( _cache.OperatorAheadOfDepth > 0 )
while (_cache.OperatorAheadOfDepth > 0)
{
_cache.TryPopOperator( out Token op );
ExpSyntaxNode node = ConvertAndPushOneOperator( op );
_cache.TryPopOperator(out Token op);
ExpSyntaxNode node = ConvertAndPushOneOperator(op);
}
switch( _cache.OperandAheadOfDepth )
switch (_cache.OperandAheadOfDepth)
{
case 0:
if( t.Value == ";" ) {
if (t.Value == ";") {
return true;
}
_cache.StatementsInDepth.Push( ExpSyntaxNode.Empty );
_cache.StatementsInDepth.Push(ExpSyntaxNode.Empty);
goto case 1;
case 1:
_cache.PopOperand( out _, out ExpSyntaxNode? statement );
_cache.StatementsInDepth.Push( statement );
_cache.PopOperand(out _, out ExpSyntaxNode? statement);
_cache.StatementsInDepth.Push(statement);
return true;
default:
ExpInvalidSyntaxException.ThrowNoOperator( t );
ExpInvalidSyntaxException.ThrowNoOperator(t);
break;
}
return true;
}
private bool TryAppendNumAndStrLiteral( Token t )
private bool TryAppendNumAndStrLiteral(Token t)
{
if( ( t.Flag & ( TokenFlag.String | TokenFlag.Number ) ) == 0 ) {
if ((t.Flag & (TokenFlag.String | TokenFlag.Number)) == 0) {
return false;
}
_cache.PushOperand( ExpElementInstance.CreateLiteral( t ) );
_cache.PushOperand(ExpElementInstance.CreateLiteral(t));
return true;
}
private bool TryAppendPrefixSeparator( Token t )
private bool TryAppendPrefixSeparator(Token t)
{
if( t.Flag != TokenFlag.Separator_Left ) {
if (t.Flag != TokenFlag.Separator_Left) {
return false;
}
_cache.PushOperator( t );
_cache.IncreaseDepth( ( int )ExpCompileStateCode.Common );
_cache.PushOperator(t);
_cache.IncreaseDepth((int)ExpCompileStateCode.Common);
return true;
}
private bool TryAppendPrefixSeparatorEnd( Token t )
private bool TryAppendPrefixSeparatorEnd(Token t)
{
if( t.Flag != TokenFlag.Separator_Right ) {
if (t.Flag != TokenFlag.Separator_Right) {
return false;
}
ClosePrefixReverse( t );
ClosePrefixReverse(t);
return true;
}
private bool TryAppendSymbol( Token t )
private bool TryAppendSymbol(Token t)
{
if( ( t.Flag & ( TokenFlag.Symbol_Unary | TokenFlag.Symbol_Binary ) ) == 0 ) {
if ((t.Flag & (TokenFlag.Symbol_Unary | TokenFlag.Symbol_Binary)) == 0) {
return false;
}
int cmp = -1;
processPrecedence:
if( _cache.TryPeekOperator( out Token tmp ) )
if (_cache.TryPeekOperator(out Token tmp))
{
cmp = CompareOperatorPrecedence( t, tmp );
if( cmp >= 0 )
cmp = CompareOperatorPrecedence(t, tmp);
if (cmp >= 0)
{
_cache.PopOperator();
ExpSyntaxNode node = ConvertAndPushOneOperator( tmp );
ExpSyntaxNode node = ConvertAndPushOneOperator(tmp);
goto processPrecedence;
}
}
_cache.PushOperator( t );
_cache.PushOperator(t);
return true;
}
private bool TryParseConstant( Token t )
private bool TryParseConstant(Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.E:
_cache.PushOperand( new ExpRealNumberNode( t, MathF.E, true ) );
_cache.PushOperand(new ExpRealNumberNode(t, MathF.E, true));
return true;
case ExpKeyword.Pi:
_cache.PushOperand( new ExpRealNumberNode( t, MathF.PI, true ) );
_cache.PushOperand(new ExpRealNumberNode(t, MathF.PI, true));
return true;
default:
if( ExpElementInstance.TryCreateLiteral( t, out ExpElementInstance? node ) )
if (ExpElementInstance.TryCreateLiteral(t, out ExpElementInstance? node))
{
_cache.PushOperand( node );
_cache.PushOperand(node);
return true;
}
return false;
}
}
private bool TryParseElementName( Token t )
private bool TryParseElementName(Token t)
{
if( _context.TryGetType( t.Value, out ExpTypeSource? type ) )
if (_context.TryGetType(t.Value, out ExpTypeSource? type))
{
_cache.PushOperand( ExpMetaRefNode.RefType( t, type ) );
_cache.PushOperand(ExpMetaRefNode.RefType(t, type));
return true;
}
if( _context.TryGetEntity( t.Value, out ExpEntitySource? entity ) )
if (_context.TryGetEntity(t.Value, out ExpEntitySource? entity))
{
_cache.PushOperand( ExpMetaRefNode.RefEntity( t, entity ) );
_cache.PushOperand(ExpMetaRefNode.RefEntity(t, entity));
return true;
}
return false;
}
private bool TryParseFunction( Token t )
private bool TryParseFunction(Token t)
{
if( ExpKeyword.BuiltinFunctions.Contains( t.Value ) )
if (ExpKeyword.BuiltinFunctions.Contains(t.Value))
{
_cache.PushOperator( t );
_cache.PushOperator(t);
return true;
} else if( _context.TryGetFunction( t.Value, out ExpFunctionSource? f ) )
} else if (_context.TryGetFunction(t.Value, out ExpFunctionSource? f))
{
_cache.PushOperand( t );
_cache.PushOperand(t);
return true;
}
return false;
}
private bool TryParseInstance( Token t )
private bool TryParseInstance(Token t)
{
if( _local.TryGetMember( t.Value,
out ExpSyntaxNode? node ) &&
node is ExpElementInstance instance )
if (_local.TryGetMember(t.Value,
out ExpSyntaxNode? node) &&
node is ExpElementInstance instance)
{
_cache.PushOperand( ExpInstanceReferenceNode.MakeReferenceFrom( t, instance ) );
_cache.PushOperand(ExpInstanceReferenceNode.MakeReferenceFrom(t, instance));
return true;
} else if( _tempVariableInLoops.TryGetValue( t.Value, out instance! ) )
} else if (_tempVariableInLoops.TryGetValue(t.Value, out instance!))
{
_cache.PushOperand( ExpInstanceReferenceNode.MakeReferenceFrom( t, instance ) );
_cache.PushOperand(ExpInstanceReferenceNode.MakeReferenceFrom(t, instance));
return true;
} else if( _cache.IsLastAddedOperator )
} else if (_cache.IsLastAddedOperator)
{
if( _cache.PeekOperand( out _,
out ExpSyntaxNode? typenode ) &&
typenode is ExpMetaRefNode typeRef )
if (_cache.PeekOperand(out _,
out ExpSyntaxNode? typenode) &&
typenode is ExpMetaRefNode typeRef)
{
_cache.PopOperand( out _, out _ );
_local.AddMember( t.Value, typeRef.SourceRef.CreateInstanceNode( t ) );
_cache.PopOperand(out _, out _);
_local.AddMember(t.Value, typeRef.SourceRef.CreateInstanceNode(t));
} else
{
return false;
@@ -274,15 +271,15 @@ namespace StgSharp.Script.Express
return false;
}
private bool TryParseKeyword( Token t )
private bool TryParseKeyword(Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Return:
_cache.PushOperator( t );
_cache.PushOperator(t);
return true;
case ExpKeyword.Skip:
_cache.PushOperand( ExpProcedureControlNode.Skip( t ) );
_cache.PushOperand(ExpProcedureControlNode.Skip(t));
return true;
default:
return false;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.DepthEnter.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.DepthEnter"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.Diagnostics;
using System;
@@ -43,21 +40,21 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
internal void AttemptEnterNewDepth( Token t )
internal void AttemptEnterNewDepth(Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.If:
_cache.IncreaseDepth( ( int )ExpCompileStateCode.IfBranch );
_cache.IncreaseDepth((int)ExpCompileStateCode.IfBranch);
return;
case ExpKeyword.Case:
_cache.IncreaseDepth( ( int )ExpCompileStateCode.CaseBranch );
_cache.IncreaseDepth((int)ExpCompileStateCode.CaseBranch);
return;
case ExpKeyword.Repeat:
_cache.IncreaseDepth( ( int )ExpCompileStateCode.RepeatLoop );
_cache.IncreaseDepth((int)ExpCompileStateCode.RepeatLoop);
return;
case ExpKeyword.While:
_cache.IncreaseDepth( ( int )ExpCompileStateCode.UntilLoop );
_cache.IncreaseDepth((int)ExpCompileStateCode.UntilLoop);
return;
default:
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.ErrorProcess.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.ErrorProcess"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -39,9 +36,9 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
public void ThrowCompileException( int errorCode )
public void ThrowCompileException(int errorCode)
{
switch( errorCode )
switch (errorCode)
{
case 0 or 1:
return;
+39 -42
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.If.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.If"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -42,9 +39,9 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
private bool AppendToken_IfBranch( Token t )
private bool AppendToken_IfBranch(Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.If:
IfBranchStateCache state = new IfBranchStateCache();
@@ -53,23 +50,23 @@ namespace StgSharp.Script.Express
return true;
case ExpKeyword.Then:
state = _cache.StateOfCurrentDepth<IfBranchStateCache>();
if( state.CurrentState == ExpKeyword.If )
if (state.CurrentState == ExpKeyword.If)
{
while( _cache.TryPopOperator( out Token op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out Token op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out ExpSyntaxNode? node );
_cache.PopOperand(out _, out ExpSyntaxNode? node);
state.CurrentState = t.Value;
state.BoolExpression = node;
} else
{
throw new ExpCompileException(
t, $"Keyword {t.Value} should be after keyword {ExpKeyword.Then}" );
t, $"Keyword {t.Value} should be after keyword {ExpKeyword.Then}");
}
return true;
case ExpKeyword.Else:
state = _cache.StateOfCurrentDepth<IfBranchStateCache>();
if( state.CurrentState == ExpKeyword.Then )
if (state.CurrentState == ExpKeyword.Then)
{
ExpSyntaxNode node = _cache.PackAllStatements();
state.CurrentState = t.Value;
@@ -77,19 +74,19 @@ namespace StgSharp.Script.Express
} else
{
throw new ExpCompileException(
t, $"Keyword {t.Value} should be after keyword {ExpKeyword.Then}" );
t, $"Keyword {t.Value} should be after keyword {ExpKeyword.Then}");
}
return true;
case ExpKeyword.EndIf:
state = _cache.StateOfCurrentDepth<IfBranchStateCache>();
if( state.CurrentState == ExpKeyword.Then )
if (state.CurrentState == ExpKeyword.Then)
{
ExpSyntaxNode trueNode = _cache.PackAllStatements();
state.CurrentState = t.Value;
state.ExpressionIfTrue = trueNode;
state.ExpressionIfFalse = ExpSyntaxNode.Empty;
} else if( state.CurrentState == ExpKeyword.Else )
} else if (state.CurrentState == ExpKeyword.Else)
{
ExpSyntaxNode falseNode = _cache.PackAllStatements();
state.CurrentState = t.Value;
@@ -98,16 +95,16 @@ namespace StgSharp.Script.Express
{
throw new ExpCompileException(
t,
$"Keyword {t.Value} should be after keyword {ExpKeyword.Then} or {ExpKeyword.Else}" );
$"Keyword {t.Value} should be after keyword {ExpKeyword.Then} or {ExpKeyword.Else}");
}
ExpIfNode ifNode = new ExpIfNode(
state.Begin, state.BoolExpression, state.ExpressionIfTrue,
state.ExpressionIfFalse );
state.ExpressionIfFalse);
_cache.DecreaseDepth();
_cache.StatementsInDepth.Push( ifNode );
_cache.StatementsInDepth.Push(ifNode);
return true;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.OperatorParser.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.OperatorParser"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -41,26 +38,26 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
public int CompareOperatorPrecedence( Token left, Token right )
public int CompareOperatorPrecedence(Token left, Token right)
{
ExpressCompile.TryGetOperatorPrecedence( left.Value, out int leftPrecedence );
ExpressCompile.TryGetOperatorPrecedence( right.Value, out int rightPrecedence );
ExpressCompile.TryGetOperatorPrecedence(left.Value, out int leftPrecedence);
ExpressCompile.TryGetOperatorPrecedence(right.Value, out int rightPrecedence);
return leftPrecedence - rightPrecedence;
}
public bool TryGenerateUnaryNode( Token t, out ExpSyntaxNode node )
public bool TryGenerateUnaryNode(Token t, out ExpSyntaxNode node)
{
ExpSyntaxNode operand = GetNextOperandCache();
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.UnaryPlus:
node = ExpUnaryOperatorNode.UnaryPlus( t, operand );
node = ExpUnaryOperatorNode.UnaryPlus(t, operand);
return true;
case ExpKeyword.UnaryMinus:
node = ExpUnaryOperatorNode.UnaryMinus( t, operand );
node = ExpUnaryOperatorNode.UnaryMinus(t, operand);
return true;
case ExpKeyword.Not:
node = ExpUnaryOperatorNode.UnaryNot( t, operand );
node = ExpUnaryOperatorNode.UnaryNot(t, operand);
return true;
default:
node = ExpSyntaxNode.Empty;
@@ -72,104 +69,104 @@ namespace StgSharp.Script.Express
/// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING
/// SYMBOLS.
/// </summary>
private ExpSyntaxNode ConvertAndPushOneOperator( Token op )
private ExpSyntaxNode ConvertAndPushOneOperator(Token op)
{
switch( op.Flag )
switch (op.Flag)
{
case TokenFlag.Symbol_Unary:
TryGenerateUnaryNode( op, out ExpSyntaxNode? node );
_cache.PushOperand( node );
TryGenerateUnaryNode(op, out ExpSyntaxNode? node);
_cache.PushOperand(node);
return node;
case TokenFlag.Symbol_Binary:
TryGenerateBinaryNode( op, out node );
_cache.PushOperand( node );
TryGenerateBinaryNode(op, out node);
_cache.PushOperand(node);
return node;
case TokenFlag.Member:
if( _context.TryGetFunction( op.Value, out ExpFunctionSource? f ) )
if (_context.TryGetFunction(op.Value, out ExpFunctionSource? f))
{
if( !_cache.PopOperand( out Token t, out ExpSyntaxNode? p ) )
if (!_cache.PopOperand(out Token t, out ExpSyntaxNode? p))
{
node = ExpFunctionCallingNode.CallFunction( op, f, p );
node = ExpFunctionCallingNode.CallFunction(op, f, p);
return node;
} else
{
throw new ExpCompileException(
t,
"An ExpNode for function calling is needed, but a token was popped" );
"An ExpNode for function calling is needed, but a token was popped");
}
} else if( _context.TryGetProcedure( op.Value, out ExpProcedureSource? p ) )
} else if (_context.TryGetProcedure(op.Value, out ExpProcedureSource? p))
{
if( !_cache.PopOperand( out Token t, out ExpSyntaxNode? param ) )
if (!_cache.PopOperand(out Token t, out ExpSyntaxNode? param))
{
node = ExpProcedureCallingNode.CallProcedure( op, p, param );
node = ExpProcedureCallingNode.CallProcedure(op, p, param);
return node;
} else
{
throw new ExpCompileException(
t,
"An ExpNode for function calling is needed, but a token was popped" );
"An ExpNode for function calling is needed, but a token was popped");
}
} else if( ExpSchema.BuiltinSchema.TryGetFunction( op.Value, out f ) )
} else if (ExpSchema.BuiltinSchema.TryGetFunction(op.Value, out f))
{
if( !_cache.PopOperand( out Token t, out ExpSyntaxNode? param ) )
if (!_cache.PopOperand(out Token t, out ExpSyntaxNode? param))
{
node = ExpFunctionCallingNode.CallFunction( op, f, param );
node = ExpFunctionCallingNode.CallFunction(op, f, param);
return node;
} else
{
throw new ExpCompileException(
t,
"An ExpNode for function calling is needed, but a token was popped" );
"An ExpNode for function calling is needed, but a token was popped");
}
} else
{
throw new NotImplementedException();
//uncertain case here
// uncertain case here
}
default:
throw new NotImplementedException();
}
}
private bool TryGenerateBinaryNode( Token t, out ExpSyntaxNode node )
private bool TryGenerateBinaryNode(Token t, out ExpSyntaxNode node)
{
ExpSyntaxNode right = GetNextOperandCache();
ExpSyntaxNode left = GetNextOperandCache();
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Add:
node = ExpBinaryOperatorNode.Add( t, left, right );
node = ExpBinaryOperatorNode.Add(t, left, right);
return true;
case ExpKeyword.Sub:
node = ExpBinaryOperatorNode.Sub( t, left, right );
node = ExpBinaryOperatorNode.Sub(t, left, right);
return true;
case ExpKeyword.Mul:
node = ExpBinaryOperatorNode.Mul( t, left, right );
node = ExpBinaryOperatorNode.Mul(t, left, right);
return true;
case ExpKeyword.Div:
node = ExpBinaryOperatorNode.Div( t, left, right );
node = ExpBinaryOperatorNode.Div(t, left, right);
return true;
case ExpKeyword.Equal:
node = ExpBinaryOperatorNode.EqualTo( t, left, right );
node = ExpBinaryOperatorNode.EqualTo(t, left, right);
return true;
case ExpKeyword.NotEqual:
node = ExpBinaryOperatorNode.NotEqualTo( t, left, right );
node = ExpBinaryOperatorNode.NotEqualTo(t, left, right);
return true;
case ExpKeyword.GreaterThan:
node = ExpBinaryOperatorNode.GreaterThan( t, left, right );
node = ExpBinaryOperatorNode.GreaterThan(t, left, right);
return true;
case ExpKeyword.LessThan:
node = ExpBinaryOperatorNode.LessThan( t, left, right );
node = ExpBinaryOperatorNode.LessThan(t, left, right);
return true;
case ExpKeyword.Assignment:
node = ExpBinaryOperatorNode.Assign( t, left, right );
node = ExpBinaryOperatorNode.Assign(t, left, right);
return true;
case ExpKeyword.InstanceEqual:
node = ExpBinaryOperatorNode.CompareInstanceEqual( t, left, right );
node = ExpBinaryOperatorNode.CompareInstanceEqual(t, left, right);
return true;
case ExpKeyword.InstanceNotEqual:
node = ExpBinaryOperatorNode.CompareInstanceNotEqual( t, left, right );
node = ExpBinaryOperatorNode.CompareInstanceNotEqual(t, left, right);
return true;
default:
node = ExpSyntaxNode.Empty;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.RangeAndIndex.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.RangeAndIndex"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.Operations;
using System;
@@ -43,10 +40,10 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
private void AppendToken_RangeAndIndex( Token t )
private void AppendToken_RangeAndIndex(Token t)
{
ExpSyntaxNode root;
switch( t.Value )
switch (t.Value)
{
case "[":
RangeAndIndexState state = new RangeAndIndexState();
@@ -56,56 +53,56 @@ namespace StgSharp.Script.Express
case "]":
state = _cache.StateOfCurrentDepth<RangeAndIndexState>();
//Generate range or index object
if( _cache.StatementsInDepth.Count != 0 )
// Generate range or index object
if (_cache.StatementsInDepth.Count != 0)
{
throw new ExpInvalidSyntaxException(
"Range and index syntax error: expected one statement to define range beginning." );
"Range and index syntax error: expected one statement to define range beginning.");
}
ReverseAnalyzeStatement();
root = _cache.StatementsInDepth.Pop();
if( ExpNodeFlag.BuiltinType_Int.IsNotInFlag( root.NodeFlag ) ) {
if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(root.NodeFlag)) {
throw new ExpInvalidTypeException(
root, "integer", root.EqualityTypeConvert?.Name ?? string.Empty );
root, "integer", root.EqualityTypeConvert?.Name ?? string.Empty);
}
if( state.CurrentState == "[" ) { } else { }
if (state.CurrentState == "[") { } else { }
break;
case ":":
state = _cache.StateOfCurrentDepth<RangeAndIndexState>();
if( state.CurrentState != "[" ) {
if (state.CurrentState != "[") {
throw new ExpInvalidSyntaxException(
"Range and index syntax error: wrong position of :" );
"Range and index syntax error: wrong position of :");
}
if( _cache.StatementsInDepth.Count != 0 ) {
if (_cache.StatementsInDepth.Count != 0) {
throw new ExpInvalidSyntaxException(
"Range and index syntax error: expected one statement to define range beginning." );
"Range and index syntax error: expected one statement to define range beginning.");
}
ReverseAnalyzeStatement();
root = _cache.StatementsInDepth.Pop();
if( ExpNodeFlag.BuiltinType_Int.IsNotInFlag( root.NodeFlag ) ) {
if (ExpNodeFlag.BuiltinType_Int.IsNotInFlag(root.NodeFlag)) {
throw new ExpInvalidTypeException(
root, "integer", root.EqualityTypeConvert?.Name ?? string.Empty );
root, "integer", root.EqualityTypeConvert?.Name ?? string.Empty);
}
state.RangeStart = root;
break;
default:
state = _cache.StateOfCurrentDepth<RangeAndIndexState>();
if( t.Value == "?" )
if (t.Value == "?")
{
switch( state.CurrentState )
switch (state.CurrentState)
{
case ":":
_cache.PushOperand( new ExpIntNode( t, int.MaxValue, true ) );
_cache.PushOperand(new ExpIntNode(t, int.MaxValue, true));
break;
case "[":
_cache.PushOperand( new ExpIntNode( t, int.MaxValue, true ) );
_cache.PushOperand(new ExpIntNode(t, int.MaxValue, true));
break;
default:
throw new ExpInvalidSyntaxException(
"Range and index syntax error: \"?\" can only be used in range or index" );
"Range and index syntax error: \"?\" can only be used in range or index");
}
}
AppendToken_Common( t );
AppendToken_Common(t);
break;
}
}
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.RepeatLoop.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.RepeatLoop"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System;
@@ -49,83 +46,81 @@ namespace StgSharp.Script.Express
private Dictionary<string, ExpElementInstance> _tempVariableInLoops { get; }
= new Dictionary<string, ExpElementInstance>();
private bool AppendToken_RepeatLoop( Token t )
private bool AppendToken_RepeatLoop(Token t)
{
RepeatLoopState state = _cache.StateOfCurrentDepth<RepeatLoopState>();
if( state == null )
if (state == null)
{
state = new RepeatLoopState( t );
state = new RepeatLoopState(t);
_cache.CurrentDepthMark.StateCache = state;
state.CurrentState = t.Value;
return true;
}
switch( state.CurrentState )
switch (state.CurrentState)
{
case ExpKeyword.Repeat:
return TryParseRepeatVariable( state, t );
return TryParseRepeatVariable(state, t);
case ExpKeyword.To:
return TryParseRepeatEnding( state, t );
return TryParseRepeatEnding(state, t);
case ExpKeyword.By:
return TryParseRepeatVariable( state, t );
return TryParseRepeatVariable(state, t);
case ExpKeyword.Until:
return TryParseRepeatUntilRegulation( state, t );
return TryParseRepeatUntilRegulation(state, t);
case ExpKeyword.Assignment:
return TryParseRepeatBeginning( state, t );
return TryParseRepeatBeginning(state, t);
case ExpKeyword.While:
return TryParseRepeatWhileRegulation( state, t );
return TryParseRepeatWhileRegulation(state, t);
case ExpKeyword.Semicolon:
if( t.Value != ExpKeyword.EndRepeat )
if (t.Value != ExpKeyword.EndRepeat)
{
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
break;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return false;
}
ExpSyntaxNode root = _cache.PackAllStatements();
state.Body = root;
_cache.DecreaseDepth();
if( ExpTypeSource.IsNullOrVoid( state.IncrementVariableType ) )
if (ExpTypeSource.IsNullOrVoid(state.IncrementVariableType))
{
root = ExpRepeatNode.Create(
state.Position, state.IncrementVariable, state.Begin, state.End,
state.IncrementVariable, state.Body, state.UntilExpression,
state.WhileExpression );
state.Position, state.IncrementVariable, state.Begin, state.End, state.IncrementVariable,
state.Body, state.UntilExpression, state.WhileExpression);
} else
{
root = ExpRepeatNode.Create(
state.Position, state.IncrementVariable.OriginObject, state.Begin, state.End,
state.IncrementVariable, state.Body, state.UntilExpression,
state.WhileExpression );
state.IncrementVariable, state.Body, state.UntilExpression, state.WhileExpression);
}
_cache.StatementsInDepth.Push( root );
_tempVariableInLoops.Remove( state.IncrementVariable.CodeConvertTemplate );
_cache.StatementsInDepth.Push(root);
_tempVariableInLoops.Remove(state.IncrementVariable.CodeConvertTemplate);
return true;
}
private bool TryParseRepeatBeginning( RepeatLoopState state, Token t )
private bool TryParseRepeatBeginning(RepeatLoopState state, Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.To:
state.CurrentState = ExpKeyword.To;
while( _cache.TryPopOperator( out Token op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out Token op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out ExpSyntaxNode? root );
_cache.PopOperand(out _, out ExpSyntaxNode? root);
state.Begin = root;
return true;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
}
private bool TryParseRepeatEnding( RepeatLoopState state, Token t )
private bool TryParseRepeatEnding(RepeatLoopState state, Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.By:
state.CurrentState = ExpKeyword.By;
@@ -137,20 +132,20 @@ namespace StgSharp.Script.Express
state.CurrentState = ExpKeyword.While;
break;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
while( _cache.TryPopOperator( out Token op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out Token op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out ExpSyntaxNode? root );
_cache.PopOperand(out _, out ExpSyntaxNode? root);
state.End = root;
return true;
}
private bool TryParseRepeatIncrement( RepeatLoopState state, Token t )
private bool TryParseRepeatIncrement(RepeatLoopState state, Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Semicolon:
state.CurrentState = ExpKeyword.Semicolon;
@@ -162,39 +157,39 @@ namespace StgSharp.Script.Express
state.CurrentState = ExpKeyword.While;
break;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
while( _cache.TryPopOperator( out Token op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out Token op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out ExpSyntaxNode? root );
_cache.PopOperand(out _, out ExpSyntaxNode? root);
state.StepIncrement = root;
return true;
}
private bool TryParseRepeatUntilRegulation( RepeatLoopState state, Token t )
private bool TryParseRepeatUntilRegulation(RepeatLoopState state, Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Semicolon:
state.CurrentState = ExpKeyword.Semicolon;
break;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
while( _cache.TryPopOperator( out Token op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out Token op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out ExpSyntaxNode? root );
_cache.PopOperand(out _, out ExpSyntaxNode? root);
state.UntilExpression = root;
return true;
}
private bool TryParseRepeatVariable( RepeatLoopState state, Token t )
private bool TryParseRepeatVariable(RepeatLoopState state, Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Integer:
state.IncrementVariableType = ExpressCompile.ExpInt;
@@ -207,48 +202,47 @@ namespace StgSharp.Script.Express
state.CurrentState = ExpKeyword.Assignment;
return true;
default:
if( ExpTypeSource.IsNullOrVoid( state.IncrementVariableType ) )
if (ExpTypeSource.IsNullOrVoid(state.IncrementVariableType))
{
if( ( _local.TryGetMember( t.Value,
out ExpSyntaxNode? node ) &&
node is ExpElementInstance instance ) ||
_tempVariableInLoops.TryGetValue( t.Value, out instance ) )
if ((_local.TryGetMember(t.Value,
out ExpSyntaxNode? node) &&
node is ExpElementInstance instance) ||
_tempVariableInLoops.TryGetValue(t.Value, out instance))
{
state.IncrementVariable = ExpInstanceReferenceNode.MakeReferenceFrom(
t, instance );
t, instance);
return true;
} else
{
throw new ExpInvalidSyntaxException(
$"Variable {t.Value} is not declared or initialized." );
$"Variable {t.Value} is not declared or initialized.");
}
} else
{
ExpElementInstance variable = state.IncrementVariableType
.CreateInstanceNode( t );
_tempVariableInLoops.Add( t.Value, variable );
ExpElementInstance variable = state.IncrementVariableType.CreateInstanceNode(t);
_tempVariableInLoops.Add(t.Value, variable);
state.IncrementVariable = ExpInstanceReferenceNode.MakeReferenceFrom(
t, variable );
t, variable);
return true;
}
}
}
private bool TryParseRepeatWhileRegulation( RepeatLoopState state, Token t )
private bool TryParseRepeatWhileRegulation(RepeatLoopState state, Token t)
{
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Until:
state.CurrentState = ExpKeyword.Until;
break;
default:
AppendToken_Common( t );
AppendToken_Common(t);
return true;
}
while( _cache.TryPopOperator( out Token op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out Token op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out ExpSyntaxNode? root );
_cache.PopOperand(out _, out ExpSyntaxNode? root);
state.WhileExpression = root;
return true;
}
@@ -256,7 +250,7 @@ namespace StgSharp.Script.Express
private class RepeatLoopState : ICompileDepthState
{
public RepeatLoopState( Token t )
public RepeatLoopState(Token t)
{
Position = t;
UntilExpression = ExpSyntaxNode.Empty;
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.ReverseAnalysing.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.ReverseAnalysing"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@@ -42,51 +39,51 @@ namespace StgSharp.Script.Express
public partial class ExpSyntaxAnalyzer
{
private void ClosePrefixReverse( Token rightSeparator )
private void ClosePrefixReverse(Token rightSeparator)
{
ExpSyntaxNode root;
ReverseAnalyzeStatement();
root = _cache.PackAllStatements();
if( rightSeparator.Value == ")" ) {
root = ExpTupleNode.Pack( root );
if (rightSeparator.Value == ")") {
root = ExpTupleNode.Pack(root);
}
_cache.DecreaseDepth();
if( IsSeparatorMatch( _cache.PeekOperator(), rightSeparator ) )
if (IsSeparatorMatch(_cache.PeekOperator(), rightSeparator))
{
_cache.PopOperator();
_cache.PushOperand( root );
_cache.PushOperand(root);
} else
{
throw new ExpCompileException(
rightSeparator, "Ending of block does not match its begging" );
rightSeparator, "Ending of block does not match its begging");
}
}
private void ReverseAnalyzeStatement()
{
ExpSyntaxNode root;
if( _cache.OperatorAheadOfDepth == 0 )
if (_cache.OperatorAheadOfDepth == 0)
{
switch( _cache.OperandAheadOfDepth )
switch (_cache.OperandAheadOfDepth)
{
case 1:
_cache.PopOperand( out _, out ExpSyntaxNode? statement );
_cache.StatementsInDepth.Push( statement );
_cache.PopOperand(out _, out ExpSyntaxNode? statement);
_cache.StatementsInDepth.Push(statement);
break;
case 0:
_cache.StatementsInDepth.Push( ExpSyntaxNode.Empty );
_cache.StatementsInDepth.Push(ExpSyntaxNode.Empty);
break;
default:
throw new ExpInvalidSyntaxException(
"More than one operand but no operator provided." );
"More than one operand but no operator provided.");
}
} else
{
while( _cache.TryPopOperator( out Token op ) ) {
ConvertAndPushOneOperator( op );
while (_cache.TryPopOperator(out Token op)) {
ConvertAndPushOneOperator(op);
}
_cache.PopOperand( out _, out root );
_cache.StatementsInDepth.Push( root );
_cache.PopOperand(out _, out root);
_cache.StatementsInDepth.Push(root);
}
}
+52 -55
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpSyntaxAnalyzer"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using Microsoft.CodeAnalysis.CSharp.Syntax;
using StgSharp.Threading;
@@ -61,43 +58,43 @@ namespace StgSharp.Script.Express
_cache = new CompileStack<ExpSyntaxNode, IExpElementSource>();
}
public ExpSyntaxAnalyzer( ExpSchema context, IExpElementSource local )
public ExpSyntaxAnalyzer(ExpSchema context, IExpElementSource local)
{
_cache = new CompileStack<ExpSyntaxNode, IExpElementSource>();
ArgumentNullException.ThrowIfNull( context );
if( context is not ExpSchema_Builtin )
ArgumentNullException.ThrowIfNull(context);
if (context is not ExpSchema_Builtin)
{
_context = context;
} else
{
throw new InvalidCastException( "Not a valid Schema type" );
throw new InvalidCastException("Not a valid Schema type");
}
_local = local;
}
/**/
public void AppendToken( Token expToken )
public void AppendToken(Token expToken)
{
switch( ( ExpCompileStateCode )TryEnterBranch( expToken ).Usage )
switch ((ExpCompileStateCode)TryEnterBranch(expToken).Usage)
{
case ExpCompileStateCode.IfBranch:
AppendToken_IfBranch( expToken );
AppendToken_IfBranch(expToken);
break;
case ExpCompileStateCode.CaseBranch:
AppendToken_CaseOf( expToken );
AppendToken_CaseOf(expToken);
break;
case ExpCompileStateCode.RepeatLoop:
AppendToken_RepeatLoop( expToken );
AppendToken_RepeatLoop(expToken);
break;
default:
AppendToken_Common( expToken );
AppendToken_Common(expToken);
break;
}
}
public ExpSyntaxNode GetNextOperandCache()
{
if( _cache.PopOperand( out Token t, out ExpSyntaxNode? n ) )
if (_cache.PopOperand(out Token t, out ExpSyntaxNode? n))
{
return n;
} else
@@ -112,53 +109,53 @@ namespace StgSharp.Script.Express
/// Append a token to top of cache. This method will automatically convert token to node
/// if meets separators or operators.
/// </summary>
private void AppendToken_Common( Token expToken )
private void AppendToken_Common(Token expToken)
{
switch( expToken.Flag )
switch (expToken.Flag)
{
case TokenFlag.Symbol_Unary or TokenFlag.Symbol_Binary:
TryAppendSymbol( expToken );
TryAppendSymbol(expToken);
break;
case TokenFlag.Number or TokenFlag.String:
ExpElementInstance node = ExpElementInstance.CreateLiteral( expToken );
_cache.PushOperand( node );
ExpElementInstance node = ExpElementInstance.CreateLiteral(expToken);
_cache.PushOperand(node);
break;
case TokenFlag.Separator_Left:
TryAppendPrefixSeparator( expToken );
TryAppendPrefixSeparator(expToken);
break;
case TokenFlag.Separator_Right:
TryAppendPrefixSeparatorEnd( expToken );
TryAppendPrefixSeparatorEnd(expToken);
break;
case TokenFlag.Separator_Middle:
TryAppendMiddleSeparator( expToken );
TryAppendMiddleSeparator(expToken);
break;
case TokenFlag.Index_Left:
TryAppendIndexLeft( expToken );
TryAppendIndexLeft(expToken);
break;
case TokenFlag.Index_Right:
TryAppendIndexRight( expToken );
TryAppendIndexRight(expToken);
break;
case TokenFlag.Member:
TryAppendMember( expToken );
TryAppendMember(expToken);
break;
default:
break;
}
}
private CompileDepthMark TryEnterBranch( Token t )
private CompileDepthMark TryEnterBranch(Token t)
{
if( t.Flag == TokenFlag.String ) {
if (t.Flag == TokenFlag.String) {
return _cache.CurrentDepthMark;
}
switch( t.Value )
switch (t.Value)
{
case ExpKeyword.Case:
return _cache.IncreaseDepth( ( int )ExpCompileStateCode.CaseBranch );
return _cache.IncreaseDepth((int)ExpCompileStateCode.CaseBranch);
case ExpKeyword.If:
return _cache.IncreaseDepth( ( int )ExpCompileStateCode.IfBranch );
return _cache.IncreaseDepth((int)ExpCompileStateCode.IfBranch);
case ExpKeyword.Repeat:
return _cache.IncreaseDepth( ( int )ExpCompileStateCode.RepeatLoop );
return _cache.IncreaseDepth((int)ExpCompileStateCode.RepeatLoop);
default:
return _cache.CurrentDepthMark;
}
+145 -157
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="ExpTokenReader.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="ExpTokenReader"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using CommunityToolkit.HighPerformance;
using StgSharp.HighPerformance;
@@ -43,12 +40,12 @@ namespace StgSharp.Script.Express
public static ExpTokenReaderPreProcessor Default { get; } = new DefaultProcessor();
public abstract bool Process( string codeLine, int line, ref int current, out Token t );
public abstract bool Process(string codeLine, int line, ref int current, out Token t);
private class DefaultProcessor : ExpTokenReaderPreProcessor
{
public override bool Process( string codeLine, int line, ref int current, out Token t )
public override bool Process(string codeLine, int line, ref int current, out Token t)
{
t = Token.Empty;
return false;
@@ -80,7 +77,7 @@ namespace StgSharp.Script.Express
private string _lineCache;
private Token _last;
public ExpTokenReader( IScriptSourceProvider provider )
public ExpTokenReader(IScriptSourceProvider provider)
{
_provider = provider;
_current = 0;
@@ -90,8 +87,7 @@ namespace StgSharp.Script.Express
public bool IsEmpty
{
get => ( ( string.IsNullOrEmpty( _lineCache ) || _current >= _lineCache.Length ) ) &&
_provider.IsEmpty;
get => ((string.IsNullOrEmpty(_lineCache) || _current >= _lineCache.Length)) && _provider.IsEmpty;
}
public ExpTokenReaderPreProcessor TokenReaderPreProcessor { get; set; } = ExpTokenReaderPreProcessor.Default;
@@ -103,28 +99,28 @@ namespace StgSharp.Script.Express
public unsafe ReadOnlySpan<char> ReadLine()
{
bool lineOver = string.IsNullOrEmpty( _lineCache ) || _current >= _lineCache.Length;
while( lineOver || _isReadingMultiLineComment )
bool lineOver = string.IsNullOrEmpty(_lineCache) || _current >= _lineCache.Length;
while (lineOver || _isReadingMultiLineComment)
{
if( IsEmpty ) {
if (IsEmpty) {
return ReadOnlySpan<char>.Empty;
}
if( lineOver )
if (lineOver)
{
do
{
_lineCache = _provider.ReadLine( out _lineNum );
} while (string.IsNullOrEmpty( _lineCache ) && !_provider.IsEmpty);
_lineCache = _provider.ReadLine(out _lineNum);
} while (string.IsNullOrEmpty(_lineCache) && !_provider.IsEmpty);
_current = 0;
}
if( _isReadingMultiLineComment )
if (_isReadingMultiLineComment)
{
int index;
fixed( char* cPtr = _lineCache.AsSpan( _current ) ) {
fixed (char* cPtr = _lineCache.AsSpan(_current)) {
index = UnsafeCompute.IndexOfCharPair(
cPtr, MultiLineEnd, _lineCache.Length );
cPtr, MultiLineEnd, _lineCache.Length);
}
if( index == -1 )
if (index == -1)
{
_lineCache = string.Empty;
} else
@@ -133,9 +129,9 @@ namespace StgSharp.Script.Express
_current += index + 2;
}
}
lineOver = string.IsNullOrEmpty( _lineCache ) || _current >= _lineCache.Length;
lineOver = string.IsNullOrEmpty(_lineCache) || _current >= _lineCache.Length;
}
return _lineCache.AsSpan().Slice( _current );
return _lineCache.AsSpan().Slice(_current);
}
public unsafe Token ReadToken()
@@ -143,95 +139,95 @@ namespace StgSharp.Script.Express
int begin, end, rest;
readLine:
ReadOnlySpan<char> source;
if( !TryReadLine( out source ) ) {
if (!TryReadLine(out source)) {
return Token.Empty;
}
if( TokenReaderPreProcessor.Process( _lineCache, LineNumber, ref _current,
out Token t ) ) {
if (TokenReaderPreProcessor.Process(_lineCache, LineNumber, ref _current,
out Token t)) {
return t;
}
char c = source[ 0 ];
if( char.IsLetter( c ) )
char c = source[0];
if (char.IsLetter(c))
{
Match match = _nextWordTokenPattern.Match( _lineCache, _current );
if( match.Success )
Match match = _nextWordTokenPattern.Match(_lineCache, _current);
if (match.Success)
{
begin = match.Groups[ TokenMark ].Index;
end = match.Groups[ EndMark ].Index;
rest = match.Groups[ RestMark ].Index;
begin = match.Groups[TokenMark].Index;
end = match.Groups[EndMark].Index;
rest = match.Groups[RestMark].Index;
_current = rest;
_last = new(
ExpressCompile.PoolString( source[ ..( end - begin ) ] ), _lineNum, begin,
TokenFlag.Member );
ExpressCompile.PoolString(source[..(end - begin)]), _lineNum, begin,
TokenFlag.Member);
return _last;
} else
{
throw new ExpInvalidCharException( _current );
throw new ExpInvalidCharException(_current);
}
} else if( char.IsPunctuation( c ) || char.IsSymbol( c ) )
} else if (char.IsPunctuation(c) || char.IsSymbol(c))
{
Match match;
switch( c )
switch (c)
{
case '\'':
char cNext = source[ 1 ];
if( cNext == '\'' ) //empty string
char cNext = source[1];
if (cNext == '\'') //empty string
{
begin = _current;
_current += 2;
return new( string.Empty, _lineNum, begin, TokenFlag.String );
return new(string.Empty, _lineNum, begin, TokenFlag.String);
}
match = _nextStringLiteralPatternWithSingle.Match( _lineCache, _current );
if( match.Success )
match = _nextStringLiteralPatternWithSingle.Match(_lineCache, _current);
if (match.Success)
{
begin = match.Groups[ "token" ].Index;
end = match.Groups[ "end" ].Index;
rest = match.Groups[ "rest" ].Index;
begin = match.Groups["token"].Index;
end = match.Groups["end"].Index;
rest = match.Groups["rest"].Index;
_current = rest;
_last = new(
ExpressCompile.PoolString( source[ 1..( end - begin ) ] ), _lineNum,
begin, TokenFlag.String );
ExpressCompile.PoolString(source[1..(end - begin)]), _lineNum,
begin, TokenFlag.String);
return _last;
} else
{
throw new ExpInvalidCharException( '\"' );
throw new ExpInvalidCharException('\"');
}
case '"':
cNext = source[ 1 ];
if( cNext == '\"' ) //empty string
cNext = source[1];
if (cNext == '\"') //empty string
{
begin = _current;
_current += 2;
return new( string.Empty, _lineNum, begin, TokenFlag.String );
return new(string.Empty, _lineNum, begin, TokenFlag.String);
}
match = _nextStringLiteralPattern.Match( _lineCache, _current );
if( match.Success )
match = _nextStringLiteralPattern.Match(_lineCache, _current);
if (match.Success)
{
begin = match.Groups[ "token" ].Index;
end = match.Groups[ "end" ].Index;
rest = match.Groups[ "rest" ].Index;
begin = match.Groups["token"].Index;
end = match.Groups["end"].Index;
rest = match.Groups["rest"].Index;
_current = rest;
_last = new(
ExpressCompile.PoolString( source[ 1..( end - begin ) ] ), _lineNum,
begin, TokenFlag.String );
ExpressCompile.PoolString(source[1..(end - begin)]), _lineNum,
begin, TokenFlag.String);
return _last;
} else
{
throw new ExpInvalidCharException( '\"' );
throw new ExpInvalidCharException('\"');
}
case '(':
begin = _current;
_current++;
_last = new(
ExpressCompile.PoolString( source[ ..1 ] ), _lineNum, begin,
TokenFlag.Separator_Left );
ExpressCompile.PoolString(source[..1]), _lineNum, begin,
TokenFlag.Separator_Left);
return _last;
case ')' or '}':
begin = _current;
_current++;
_last = new Token(
ExpressCompile.PoolString( source[ ..1 ] ), _lineNum, begin,
TokenFlag.Separator_Right );
ExpressCompile.PoolString(source[..1]), _lineNum, begin,
TokenFlag.Separator_Right);
return _last;
case '-':
@@ -239,24 +235,24 @@ namespace StgSharp.Script.Express
// 2. -- comment
// 3. - number type param(UNARY)
// 4. param - param(BINARY)
cNext = source[ 1 ];
if( char.IsNumber( cNext ) )
cNext = source[1];
if (char.IsNumber(cNext))
{
match = _nextNumberLiteralPattern.Match( _lineCache, _current );
if( match.Success )
match = _nextNumberLiteralPattern.Match(_lineCache, _current);
if (match.Success)
{
begin = match.Groups[ TokenMark ].Index;
end = match.Groups[ EndMark ].Index;
rest = match.Groups[ RestMark ].Index;
begin = match.Groups[TokenMark].Index;
end = match.Groups[EndMark].Index;
rest = match.Groups[RestMark].Index;
_current = rest;
return new(
ExpressCompile.PoolString( source[ ..( end - begin ) ] ),
_lineNum, begin, TokenFlag.Number );
ExpressCompile.PoolString(source[..(end - begin)]),
_lineNum, begin, TokenFlag.Number);
} else
{
throw new ExpInvalidCharException( _current );
throw new ExpInvalidCharException(_current);
}
} else if( cNext == '-' )
} else if (cNext == '-')
{
_lineCache = string.Empty;
_current = 0;
@@ -265,18 +261,18 @@ namespace StgSharp.Script.Express
{
begin = _current;
_current++;
if( _last.Flag == TokenFlag.Member ||
if (_last.Flag == TokenFlag.Member ||
_last.Flag == TokenFlag.Index_Right ||
_last.Flag == TokenFlag.Separator_Right )
_last.Flag == TokenFlag.Separator_Right)
{
_last = new(
ExpressCompile.PoolString( source[ ..1 ] ), _lineNum, begin,
TokenFlag.Symbol_Binary );
ExpressCompile.PoolString(source[..1]), _lineNum, begin,
TokenFlag.Symbol_Binary);
} else
{
_last = new(
ExpressCompile.PoolString( source[ ..1 ] ), _lineNum, begin,
TokenFlag.Symbol_Unary );
ExpressCompile.PoolString(source[..1]), _lineNum, begin,
TokenFlag.Symbol_Unary);
}
return _last;
}
@@ -284,139 +280,131 @@ namespace StgSharp.Script.Express
begin = _current;
_current++;
_last = new Token(
ExpressCompile.PoolString( "{" ), _lineNum, begin,
TokenFlag.Separator_Left );
ExpressCompile.PoolString("{"), _lineNum, begin,
TokenFlag.Separator_Left);
return _last;
case '[':
begin = _current;
_current++;
_last = new Token(
ExpressCompile.PoolString( "[" ), _lineNum, begin,
TokenFlag.Index_Left );
ExpressCompile.PoolString("["), _lineNum, begin,
TokenFlag.Index_Left);
return _last;
case ']':
begin = _current;
_current++;
_last = new Token(
ExpressCompile.PoolString( "]" ), _lineNum, begin,
TokenFlag.Index_Right );
ExpressCompile.PoolString("]"), _lineNum, begin,
TokenFlag.Index_Right);
return _last;
case ';' or ',':
begin = _current;
_current++;
_last = new Token(
ExpressCompile.PoolString( source[ ..1 ] ), _lineNum, begin,
TokenFlag.Separator_Middle );
ExpressCompile.PoolString(source[..1]), _lineNum, begin,
TokenFlag.Separator_Middle);
return _last;
case ':':
match = _nextSymbolPattern.Match( _lineCache, _current );
begin = match.Groups[ TokenMark ].Index;
end = match.Groups[ EndMark ].Index;
rest = match.Groups[ RestMark ].Index;
match = _nextSymbolPattern.Match(_lineCache, _current);
begin = match.Groups[TokenMark].Index;
end = match.Groups[EndMark].Index;
rest = match.Groups[RestMark].Index;
_current = rest;
if( end - begin == 1 )
if (end - begin == 1)
{
_last = new Token(
ExpressCompile.Keyword.Colon, _lineNum, begin,
TokenFlag.Separator_Middle );
TokenFlag.Separator_Middle);
} else
{
_last = new Token(
ExpressCompile.PoolString( source[ ..( end - begin ) ] ), _lineNum,
begin, TokenFlag.Symbol_Binary );
ExpressCompile.PoolString(source[..(end - begin)]), _lineNum,
begin, TokenFlag.Symbol_Binary);
}
return _last;
case '+' or '/' or '\\' or '*' or '.':
match = _nextSymbolPattern.Match( _lineCache, _current );
begin = match.Groups[ TokenMark ].Index;
end = match.Groups[ EndMark ].Index;
rest = match.Groups[ RestMark ].Index;
match = _nextSymbolPattern.Match(_lineCache, _current);
begin = match.Groups[TokenMark].Index;
end = match.Groups[EndMark].Index;
rest = match.Groups[RestMark].Index;
_current = rest;
_last = new Token(
ExpressCompile.PoolString( source[ ..( end - begin ) ] ), _lineNum,
begin, TokenFlag.Symbol_Binary );
ExpressCompile.PoolString(source[..(end - begin)]), _lineNum,
begin, TokenFlag.Symbol_Binary);
return _last;
case '=':
begin = _current;
_current++;
_last = new Token(
ExpressCompile.Keyword.Equal, _lineNum, begin,
TokenFlag.Symbol_Binary );
TokenFlag.Symbol_Binary);
return _last;
default:
throw new ExpInvalidCharException( c );
throw new ExpInvalidCharException(c);
}
} else if( char.IsNumber( c ) )
} else if (char.IsNumber(c))
{
Match match = _nextNumberLiteralPattern.Match( _lineCache, _current );
if( match.Success )
Match match = _nextNumberLiteralPattern.Match(_lineCache, _current);
if (match.Success)
{
begin = match.Groups[ TokenMark ].Index;
end = match.Groups[ EndMark ].Index;
rest = match.Groups[ RestMark ].Index;
begin = match.Groups[TokenMark].Index;
end = match.Groups[EndMark].Index;
rest = match.Groups[RestMark].Index;
_current = rest;
string str = ExpressCompile.PoolString( source[ ..( end - begin ) ] );
return new( str, _lineNum, begin, TokenFlag.Number );
string str = ExpressCompile.PoolString(source[..(end - begin)]);
return new(str, _lineNum, begin, TokenFlag.Number);
} else
{
throw new ExpInvalidCharException( _current );
throw new ExpInvalidCharException(_current);
}
} else if( char.IsWhiteSpace( c ) )
} else if (char.IsWhiteSpace(c))
{
Match match = _skipBlankPattern.Match( _lineCache, _current );
if( match.Success )
Match match = _skipBlankPattern.Match(_lineCache, _current);
if (match.Success)
{
rest = match.Groups[ RestMark ].Index;
rest = match.Groups[RestMark].Index;
_current = rest;
goto readLine;
} else
{
throw new ExpInvalidCharException( _current );
throw new ExpInvalidCharException(_current);
}
} else
{
throw new ExpInvalidCharException( c );
throw new ExpInvalidCharException(c);
}
}
public bool TryReadLine( out ReadOnlySpan<char> line )
public bool TryReadLine(out ReadOnlySpan<char> line)
{
line = ReadLine();
return line != ReadOnlySpan<char>.Empty;
}
public bool TryReadToken( out Token t )
public bool TryReadToken(out Token t)
{
t = ReadToken();
return !IsEmpty;
}
[GeneratedRegex(
@"(?<token>[a-zA-Z][a-zA-Z0-9_]*)(?<end>\s*?)(?<rest>\S|$)",
RegexOptions.Singleline )]
[GeneratedRegex(@"(?<token>[a-zA-Z][a-zA-Z0-9_]*)(?<end>\s*?)(?<rest>\S|$)", RegexOptions.Singleline)]
private static partial Regex GetNextWordTokenPattern();
[GeneratedRegex(
@"(?<token>-?\s*?[0-9]+(?:\.[0-9]*)?E?(?:[+-]?[0-9]+)?)(?<end>\s*?)(?<rest>\S|$)",
RegexOptions.Singleline )]
RegexOptions.Singleline)]
private static partial Regex GetNumberLiteralPattern();
[GeneratedRegex( @"(?:\s+?)(?<rest>\S|$)", RegexOptions.Singleline )]
[GeneratedRegex(@"(?:\s+?)(?<rest>\S|$)", RegexOptions.Singleline)]
private static partial Regex GetSkipBlankPattern();
[GeneratedRegex(
@"(?<token>"")(?>\\\\|\\""|(?!')[^""])*(?<end>""|$)\s*?(?<rest>\S|$)",
RegexOptions.Singleline )]
[GeneratedRegex(@"(?<token>"")(?>\\\\|\\""|(?!')[^""])*(?<end>""|$)\s*?(?<rest>\S|$)", RegexOptions.Singleline)]
private static partial Regex GetStringLiteralPattern();
[GeneratedRegex(
@"(?<token>')(?>\\\\|\\'|''|(?!')[^'])*(?<end>')\s*?(?<rest>\S|$)",
RegexOptions.Singleline )]
[GeneratedRegex(@"(?<token>')(?>\\\\|\\'|''|(?!')[^'])*(?<end>')\s*?(?<rest>\S|$)", RegexOptions.Singleline)]
private static partial Regex GetStringLiteralPatternWithSingle();
[GeneratedRegex(
@"(?<token>[:<>=+\-*\/\.]+)(?<end>\s?)\s*?(?<rest>\S|$)",
RegexOptions.Singleline )]
[GeneratedRegex(@"(?<token>[:<>=+\-*\/\.]+)(?<end>\s?)\s*?(?<rest>\S|$)", RegexOptions.Singleline)]
private static partial Regex GetSymbolPattern();
}
+43 -46
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="GeneratedExpSchema.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="GeneratedExpSchema"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using CommunityToolkit.HighPerformance.Helpers;
using StgSharp.Collections;
@@ -49,64 +46,64 @@ namespace StgSharp.Script.Express
get => ExpSchema_Builtin.Only;
}
public ExpTypeSource GetExpType( string typeName )
public ExpTypeSource GetExpType(string typeName)
{
if( BuiltinSchema.TryGetType( typeName, out ExpTypeSource? ret ) ) {
if (BuiltinSchema.TryGetType(typeName, out ExpTypeSource? ret)) {
return ret;
}
if( TypeDict.TryGetValue( typeName, out ret ) ) {
if (TypeDict.TryGetValue(typeName, out ret)) {
return ret;
}
foreach( GeneratedExpSchema item in SchemaInclude.Values )
foreach (GeneratedExpSchema item in SchemaInclude.Values)
{
if( item.TypeDict.TryGetValue( typeName, out ret ) ) {
if (item.TypeDict.TryGetValue(typeName, out ret)) {
return ret;
}
}
throw new ExpElementLoadException( typeName, this );
throw new ExpElementLoadException(typeName, this);
}
public bool HasSchemaInclude( GeneratedExpSchema schema )
public bool HasSchemaInclude(GeneratedExpSchema schema)
{
return SchemaInclude.ContainsKey( schema.Name );
return SchemaInclude.ContainsKey(schema.Name);
}
public override void LoadFromSource( ExpSchemaSource source )
public override void LoadFromSource(ExpSchemaSource source)
{
throw new NotImplementedException();
}
public override bool TryGetConst( string name, out ExpElementInstance c )
public override bool TryGetConst(string name, out ExpElementInstance c)
{
return ConstDict.TryGetValue( name, out c! );
return ConstDict.TryGetValue(name, out c!);
}
public override bool TryGetEntity( string name, out ExpEntitySource e )
public override bool TryGetEntity(string name, out ExpEntitySource e)
{
return EntityDict.TryGetValue( name, out e! );
return EntityDict.TryGetValue(name, out e!);
}
public override bool TryGetFunction( string name, out ExpFunctionSource f )
public override bool TryGetFunction(string name, out ExpFunctionSource f)
{
return FunctionDict.TryGetValue( name, out f! );
return FunctionDict.TryGetValue(name, out f!);
}
public override bool TryGetProcedure( string name, out ExpProcedureSource p )
public override bool TryGetProcedure(string name, out ExpProcedureSource p)
{
throw new NotImplementedException();
}
public override bool TryGetRule( string name, out ExpRuleSource r )
public override bool TryGetRule(string name, out ExpRuleSource r)
{
throw new NotImplementedException();
}
public override bool TryGetSchemaInclude( string name, out ExpSchema include )
public override bool TryGetSchemaInclude(string name, out ExpSchema include)
{
throw new NotImplementedException();
}
public override bool TryGetType( string name, out ExpTypeSource element )
public override bool TryGetType(string name, out ExpTypeSource element)
{
throw new NotImplementedException();
}
+43 -48
View File
@@ -1,33 +1,30 @@
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// file="IExpConvertableFrom.cs"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
// -----------------------------------------------------------------------
// file="IExpConvertableFrom"
// Project: StgSharp
// AuthorGroup: Nitload Space
// Copyright (c) Nitload Space. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person
// obtaining a copy of this software and associated documentation
// files (the “Software”), to deal in the Software without restriction,
// including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software,
// and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//
// The above copyright notice and
// this permission notice shall be included in all copies
// or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED “AS IS”,
// WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH
// THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
//-----------------------------------------------------------------------
//-----------------------------------------------------------------------
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
@@ -40,30 +37,28 @@ namespace StgSharp.Script.Express
public interface IExpConvertableFrom<T0> where T0: IExpConvertableFrom<T0>
{
void FromInstance( T0 entity );
void FromInstance(T0 entity);
bool IsConvertableTo( string entityTypeName );
bool IsConvertableTo(string entityTypeName);
}
// 2 generic parameters
public interface IExpConvertableFrom<T0, T1> : IExpConvertableFrom<T0>
where T0: IExpConvertableFrom<T0>
public interface IExpConvertableFrom<T0, T1> : IExpConvertableFrom<T0> where T0: IExpConvertableFrom<T0>
where T1: IExpConvertableFrom<T1>
{
void FromInstance( T1 entity );
void FromInstance(T1 entity);
}
// 3 generic parameters
public interface IExpConvertableFrom<T0, T1, T2> : IExpConvertableFrom<T0, T1>
where T0: IExpConvertableFrom<T0>
public interface IExpConvertableFrom<T0, T1, T2> : IExpConvertableFrom<T0, T1> where T0: IExpConvertableFrom<T0>
where T1: IExpConvertableFrom<T1>
where T2: IExpConvertableFrom<T2>
{
void FromInstance( T2 entity );
void FromInstance(T2 entity);
}
@@ -75,7 +70,7 @@ namespace StgSharp.Script.Express
where T3: IExpConvertableFrom<T3>
{
void FromInstance( T3 entity );
void FromInstance(T3 entity);
}
@@ -88,7 +83,7 @@ namespace StgSharp.Script.Express
where T4: IExpConvertableFrom<T4>
{
void FromInstance( T4 entity );
void FromInstance(T4 entity);
}
@@ -102,7 +97,7 @@ namespace StgSharp.Script.Express
where T5: IExpConvertableFrom<T5>
{
void FromInstance( T5 entity );
void FromInstance(T5 entity);
}
@@ -117,7 +112,7 @@ namespace StgSharp.Script.Express
where T6: IExpConvertableFrom<T6>
{
void FromInstance( T6 entity );
void FromInstance(T6 entity);
}
@@ -133,7 +128,7 @@ namespace StgSharp.Script.Express
where T7: IExpConvertableFrom<T7>
{
void FromInstance( T7 entity );
void FromInstance(T7 entity);
}
@@ -150,7 +145,7 @@ namespace StgSharp.Script.Express
where T8: IExpConvertableFrom<T8>
{
void FromInstance( T8 entity );
void FromInstance(T8 entity);
}
@@ -168,7 +163,7 @@ namespace StgSharp.Script.Express
where T9: IExpConvertableFrom<T9>
{
void FromInstance( T9 entity );
void FromInstance(T9 entity);
}
@@ -187,7 +182,7 @@ namespace StgSharp.Script.Express
where T10: IExpConvertableFrom<T10>
{
void FromInstance( T10 entity );
void FromInstance(T10 entity);
}
@@ -207,7 +202,7 @@ namespace StgSharp.Script.Express
where T11: IExpConvertableFrom<T11>
{
void FromInstance( T11 entity );
void FromInstance(T11 entity);
}
@@ -228,7 +223,7 @@ namespace StgSharp.Script.Express
where T12: IExpConvertableFrom<T12>
{
void FromInstance( T12 entity );
void FromInstance(T12 entity);
}
@@ -250,7 +245,7 @@ namespace StgSharp.Script.Express
where T13: IExpConvertableFrom<T13>
{
void FromInstance( T13 entity );
void FromInstance(T13 entity);
}
@@ -273,7 +268,7 @@ namespace StgSharp.Script.Express
where T14: IExpConvertableFrom<T14>
{
void FromInstance( T14 entity );
void FromInstance(T14 entity);
}
@@ -297,7 +292,7 @@ namespace StgSharp.Script.Express
where T15: IExpConvertableFrom<T15>
{
void FromInstance( T15 entity );
void FromInstance(T15 entity);
}
}