Daily update on 20250320-081135 by Nitload Youmu. Additional Message : Compiler Framework rebuild compelte, working on reverse converter
Signed-off-by: Nitload <YoumuLiu_NSI@whv0t.onmicrosoft.com>
This commit is contained in:
@@ -14,7 +14,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.Model")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.Model")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("StgSharp.Model")]
|
[assembly: System.Reflection.AssemblyProductAttribute("StgSharp.Model")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.Model")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.Model")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}}
|
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}}
|
||||||
@@ -172,7 +172,6 @@ namespace StgSharp.Script
|
|||||||
}
|
}
|
||||||
_operatorArray[ _operatorCount ] = token;
|
_operatorArray[ _operatorCount ] = token;
|
||||||
_operatorCount++;
|
_operatorCount++;
|
||||||
_isNode.Push( false );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool TryPeekOperand( out bool isNode, out Token t, out TNode n )
|
public bool TryPeekOperand( out bool isNode, out Token t, out TNode n )
|
||||||
@@ -223,7 +222,7 @@ namespace StgSharp.Script
|
|||||||
t = _tokenArray[ --_tokenCount ];
|
t = _tokenArray[ --_tokenCount ];
|
||||||
n = TNode.Empty;
|
n = TNode.Empty;
|
||||||
isNode = false;
|
isNode = false;
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace StgSharp.Script
|
|||||||
Number = 3,
|
Number = 3,
|
||||||
String = 4,
|
String = 4,
|
||||||
Member = 5,
|
Member = 5,
|
||||||
Separator_Single = 6,
|
Separator_Middle = 6,
|
||||||
Separator_Left = 7,
|
Separator_Left = 7,
|
||||||
Separator_Right = 8,
|
Separator_Right = 8,
|
||||||
Index_Left = 9,
|
Index_Left = 9,
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ namespace StgSharp.Script.Express
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public override ExpElementInstanceNode CreateInstanceNode()
|
public override ExpElementInstanceBase CreateInstanceNode()
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,10 +43,10 @@ namespace StgSharp.Script.Express
|
|||||||
|
|
||||||
private ExpNode _parameter;
|
private ExpNode _parameter;
|
||||||
|
|
||||||
public ExpFunctionCallingNode(
|
private ExpFunctionCallingNode(
|
||||||
Token source,
|
Token source,
|
||||||
ExpFunctionSource function,
|
ExpFunctionSource function,
|
||||||
ExpNode firstParameter )
|
ExpNode firstParameter )
|
||||||
: base( source )
|
: base( source )
|
||||||
{
|
{
|
||||||
_function = function;
|
_function = function;
|
||||||
@@ -65,5 +65,13 @@ namespace StgSharp.Script.Express
|
|||||||
_parameter.AppendNode( parameter );
|
_parameter.AppendNode( parameter );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static ExpFunctionCallingNode CallFunction(
|
||||||
|
Token source,
|
||||||
|
ExpFunctionSource function,
|
||||||
|
ExpNode param )
|
||||||
|
{
|
||||||
|
return new ExpFunctionCallingNode( source, function, param );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,17 +40,26 @@ namespace StgSharp.Script.Express
|
|||||||
public class ExpInstanceReferenceNode : ExpNode
|
public class ExpInstanceReferenceNode : ExpNode
|
||||||
{
|
{
|
||||||
|
|
||||||
private ExpElementInstanceNode _instance;
|
private ExpElementInstanceBase _instance;
|
||||||
|
|
||||||
internal ExpInstanceReferenceNode(
|
internal ExpInstanceReferenceNode(
|
||||||
Token source,
|
Token source,
|
||||||
ExpElementInstanceNode instance )
|
ExpElementInstanceBase instance )
|
||||||
: base( source )
|
: base( source )
|
||||||
{
|
{
|
||||||
_instance = instance;
|
_instance = instance;
|
||||||
_nodeFlag = ( _instance._nodeFlag | ( ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any ) );
|
_nodeFlag = ( _instance._nodeFlag | ( ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal ExpInstanceReferenceNode(
|
||||||
|
Token source,
|
||||||
|
ExpInstanceReferenceNode reference )
|
||||||
|
: base( source )
|
||||||
|
{
|
||||||
|
_instance = reference._instance;
|
||||||
|
_nodeFlag = ( _instance._nodeFlag | ( ExpNodeFlag.Name_Any | ExpNodeFlag.Collection_Any ) );
|
||||||
|
}
|
||||||
|
|
||||||
public override ExpNode Left => Empty;
|
public override ExpNode Left => Empty;
|
||||||
|
|
||||||
public override ExpNode Right => Empty;
|
public override ExpNode Right => Empty;
|
||||||
@@ -60,7 +69,7 @@ namespace StgSharp.Script.Express
|
|||||||
[MethodImpl( MethodImplOptions.AggressiveInlining )]
|
[MethodImpl( MethodImplOptions.AggressiveInlining )]
|
||||||
public static ExpInstanceReferenceNode Create(
|
public static ExpInstanceReferenceNode Create(
|
||||||
Token source,
|
Token source,
|
||||||
ExpElementInstanceNode instance )
|
ExpElementInstanceBase instance )
|
||||||
{
|
{
|
||||||
return new ExpInstanceReferenceNode( source, instance );
|
return new ExpInstanceReferenceNode( source, instance );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ using System.ComponentModel;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
|
using System.Security.Cryptography.X509Certificates;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
|
||||||
namespace StgSharp.Script.Express
|
namespace StgSharp.Script.Express
|
||||||
@@ -57,6 +58,25 @@ namespace StgSharp.Script.Express
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ExpInvalidSyntaxException : Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
public ExpInvalidSyntaxException( string message ) : base( message ) { }
|
||||||
|
|
||||||
|
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}" );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ThrowNoOperator( Token t )
|
||||||
|
{
|
||||||
|
throw new ExpInvalidSyntaxException(
|
||||||
|
$"No operator but more than one operand before line {t.Line} column {t.Column}" );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public class ExpInvalidElementDeclareEndingExceptions : Exception
|
public class ExpInvalidElementDeclareEndingExceptions : Exception
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -136,4 +156,13 @@ namespace StgSharp.Script.Express
|
|||||||
"Attempt to compile an EXPRESS script before the init of compiler." ) { }
|
"Attempt to compile an EXPRESS script before the init of compiler." ) { }
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ExpCompileException : Exception
|
||||||
|
{
|
||||||
|
|
||||||
|
public ExpCompileException( Token pos, string message )
|
||||||
|
: base(
|
||||||
|
$"Compiler exception occour when processing token at line {pos.Line}, column {pos.Column}. Detailed message:{Environment.NewLine}{message} " ) { }
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord;
|
using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord;
|
||||||
|
|
||||||
namespace StgSharp.Script.Express
|
namespace StgSharp.Script.Express
|
||||||
{
|
{
|
||||||
@@ -43,15 +43,15 @@ namespace StgSharp.Script.Express
|
|||||||
|
|
||||||
private bool TryParseBranch( Token t )
|
private bool TryParseBranch( Token t )
|
||||||
{
|
{
|
||||||
if( t.Value == ExpKeyWord.Case ) {
|
if( t.Value == ExpKeyword.Case ) {
|
||||||
_cache.PushOperator( t );
|
_cache.PushOperator( t );
|
||||||
_cache.IncreaseDepth( ( int )ExpCompileStateCode.CaseBranch );
|
_cache.IncreaseDepth( ( int )ExpCompileStateCode.CaseBranch );
|
||||||
return true;
|
return true;
|
||||||
} else if( t.Value == ExpKeyWord.If ) {
|
} else if( t.Value == ExpKeyword.If ) {
|
||||||
_cache.PushOperator( t );
|
_cache.PushOperator( t );
|
||||||
_cache.IncreaseDepth( ( int )ExpCompileStateCode.IfBranch );
|
_cache.IncreaseDepth( ( int )ExpCompileStateCode.IfBranch );
|
||||||
return true;
|
return true;
|
||||||
} else if( t.Value == ExpKeyWord.Repeat ) {
|
} else if( t.Value == ExpKeyword.Repeat ) {
|
||||||
_cache.PushOperator( t );
|
_cache.PushOperator( t );
|
||||||
_cache.IncreaseDepth( ( int )ExpCompileStateCode.RepeatLoop );
|
_cache.IncreaseDepth( ( int )ExpCompileStateCode.RepeatLoop );
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord;
|
using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord;
|
||||||
|
|
||||||
namespace StgSharp.Script.Express
|
namespace StgSharp.Script.Express
|
||||||
{
|
{
|
||||||
@@ -55,28 +55,28 @@ namespace StgSharp.Script.Express
|
|||||||
ExpNode left = GetNextOperandCache();
|
ExpNode left = GetNextOperandCache();
|
||||||
ExpNode right = GetNextOperandCache();
|
ExpNode right = GetNextOperandCache();
|
||||||
switch( t.Value ) {
|
switch( t.Value ) {
|
||||||
case ExpKeyWord.Add:
|
case ExpKeyword.Add:
|
||||||
node = ExpBinaryOperatorNode.Add( t, left, right );
|
node = ExpBinaryOperatorNode.Add( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.Sub:
|
case ExpKeyword.Sub:
|
||||||
node = ExpBinaryOperatorNode.Sub( t, left, right );
|
node = ExpBinaryOperatorNode.Sub( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.Mul:
|
case ExpKeyword.Mul:
|
||||||
node = ExpBinaryOperatorNode.Mul( t, left, right );
|
node = ExpBinaryOperatorNode.Mul( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.Div:
|
case ExpKeyword.Div:
|
||||||
node = ExpBinaryOperatorNode.Div( t, left, right );
|
node = ExpBinaryOperatorNode.Div( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.Equal:
|
case ExpKeyword.Equal:
|
||||||
node = ExpBinaryOperatorNode.EqualTo( t, left, right );
|
node = ExpBinaryOperatorNode.EqualTo( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.NotEqual:
|
case ExpKeyword.NotEqual:
|
||||||
node = ExpBinaryOperatorNode.NotEqualTo( t, left, right );
|
node = ExpBinaryOperatorNode.NotEqualTo( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.GreaterThan:
|
case ExpKeyword.GreaterThan:
|
||||||
node = ExpBinaryOperatorNode.GreaterThan( t, left, right );
|
node = ExpBinaryOperatorNode.GreaterThan( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.LessThan:
|
case ExpKeyword.LessThan:
|
||||||
node = ExpBinaryOperatorNode.LessThan( t, left, right );
|
node = ExpBinaryOperatorNode.LessThan( t, left, right );
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
@@ -89,13 +89,13 @@ namespace StgSharp.Script.Express
|
|||||||
{
|
{
|
||||||
ExpNode operand = GetNextOperandCache();
|
ExpNode operand = GetNextOperandCache();
|
||||||
switch( t.Value ) {
|
switch( t.Value ) {
|
||||||
case ExpKeyWord.UnaryPlus:
|
case ExpKeyword.UnaryPlus:
|
||||||
node = ExpUnaryOperatorNode.UnaryPlus( t, operand );
|
node = ExpUnaryOperatorNode.UnaryPlus( t, operand );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.UnaryMinus:
|
case ExpKeyword.UnaryMinus:
|
||||||
node = ExpUnaryOperatorNode.UnaryMinus( t, operand );
|
node = ExpUnaryOperatorNode.UnaryMinus( t, operand );
|
||||||
return true;
|
return true;
|
||||||
case ExpKeyWord.Not:
|
case ExpKeyword.Not:
|
||||||
node = ExpUnaryOperatorNode.UnaryNot( t, operand );
|
node = ExpUnaryOperatorNode.UnaryNot( t, operand );
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
@@ -104,5 +104,52 @@ namespace StgSharp.Script.Express
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING
|
||||||
|
/// SYMBOLS.
|
||||||
|
/// </summary>
|
||||||
|
private void ConvertOneOperator()
|
||||||
|
{
|
||||||
|
Token @operator = _cache.PopOperator();
|
||||||
|
|
||||||
|
switch( @operator.Flag ) {
|
||||||
|
case TokenFlag.Symbol_Unary:
|
||||||
|
TryGenerateUnaryNode( @operator, out ExpNode? node );
|
||||||
|
_cache.PushOperand( node );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Symbol_Binary:
|
||||||
|
TryGenerateBinaryNode( @operator, out node );
|
||||||
|
_cache.PushOperand( node );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Member:
|
||||||
|
if( _context.TryGetFunction(
|
||||||
|
@operator.Value, out ExpFunctionSource? f ) ) {
|
||||||
|
if( !_cache.PopOperand( out Token t,
|
||||||
|
out ExpNode? p ) ) {
|
||||||
|
ExpFunctionCallingNode.CallFunction(
|
||||||
|
@operator, f, p );
|
||||||
|
} else {
|
||||||
|
throw new ExpCompileException(
|
||||||
|
t,
|
||||||
|
"An ExpNode for function calling is needed, but a token was popped" );
|
||||||
|
}
|
||||||
|
} else if( ExpSchema.BuiltinSchema
|
||||||
|
.TryGetFunction( @operator.Value, out f ) ) {
|
||||||
|
if( !_cache.PopOperand( out Token t,
|
||||||
|
out ExpNode? p ) ) {
|
||||||
|
ExpFunctionCallingNode.CallFunction(
|
||||||
|
@operator, f, p );
|
||||||
|
} else {
|
||||||
|
throw new ExpCompileException(
|
||||||
|
t,
|
||||||
|
"An ExpNode for function calling is needed, but a token was popped" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,92 +34,54 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord;
|
using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord;
|
||||||
|
|
||||||
namespace StgSharp.Script.Express
|
namespace StgSharp.Script.Express
|
||||||
{
|
{
|
||||||
public partial class ExpNodeGenerator
|
public partial class ExpNodeGenerator
|
||||||
{
|
{
|
||||||
|
|
||||||
private void AppendToken_Common( Token t )
|
|
||||||
{
|
|
||||||
switch( t.Flag ) {
|
|
||||||
// instance ref, make ref and push
|
|
||||||
// function call, push as operator
|
|
||||||
// keyword, call TryParseConstant method to process
|
|
||||||
// name of member in instance, parse as MemberNameNode
|
|
||||||
case TokenFlag.Member:
|
|
||||||
if( _context.TryGetFunction( t.Value, out _ ) ) {
|
|
||||||
_cache.PushOperator( t );
|
|
||||||
} else if( _local.TryGetMember( t.Value,
|
|
||||||
out ExpNode? node ) ) {
|
|
||||||
if( node is ExpElementInstanceBase instance ) {
|
|
||||||
_cache.PushOperand( instance.MakeReference( t ) );
|
|
||||||
return;// ref of an instance
|
|
||||||
}
|
|
||||||
} else if( TryParseConstant( t ) ) {
|
|
||||||
return;
|
|
||||||
} else if( TryParseFunction( t ) ) {
|
|
||||||
return;
|
|
||||||
} else if( TryParseBranch( t ) ) {
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
_cache.PushOperand( t );
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case TokenFlag.Separator_Single: //a , ; found
|
|
||||||
// if operator stack is not empty, convert all operators to node until meet a same separator
|
|
||||||
// or OperandAheadOfSeparator property is less than certain value
|
|
||||||
_cache.PushOperator( t );
|
|
||||||
break;
|
|
||||||
case TokenFlag.Separator_Left: //a ( [ { found
|
|
||||||
// check if the last token is a function name, loop block or branch
|
|
||||||
_cache.PushOperator( t );
|
|
||||||
break;
|
|
||||||
case TokenFlag.Separator_Right: //a } ] ) found
|
|
||||||
//Convert operator until meet a matched separator
|
|
||||||
while( _cache.TryPopOperator( out Token op ) ) {
|
|
||||||
if( IsSeparatorMatch( t, op ) ) {
|
|
||||||
if( _cache.OperatorAheadOfDepth == 0 ) {
|
|
||||||
_cache.TryPeekOperand(
|
|
||||||
out _, out Token tOperand,
|
|
||||||
out ExpNode nOperand );
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
|
||||||
case TokenFlag.Index_Left: // a [ found
|
|
||||||
_cache.PushOperand( t );
|
|
||||||
return;
|
|
||||||
case TokenFlag.Index_Right: // a ] found
|
|
||||||
while( _cache.TryPopOperator( out Token op ) ) {
|
|
||||||
if( op.Value == ExpKeyWord.IndexOf ) { } else { }
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsSeparatorMatch( Token source, Token target )
|
private bool IsSeparatorMatch( Token source, Token target )
|
||||||
{
|
{
|
||||||
return source.Value switch
|
return source.Value switch
|
||||||
{
|
{
|
||||||
ExpKeyWord.LeftBrace => target.Value == ExpKeyWord.RightBrace,
|
ExpKeyword.LeftBrace => target.Value == ExpKeyword.RightBrace,
|
||||||
ExpKeyWord.LeftParen => target.Value == ExpKeyWord.RightParen,
|
ExpKeyword.LeftParen => target.Value == ExpKeyword.RightParen,
|
||||||
ExpKeyWord.Comma => target.Value == ExpKeyWord.Comma,
|
ExpKeyword.Comma => target.Value == ExpKeyword.Comma,
|
||||||
ExpKeyWord.Semicolon => target.Value == ExpKeyWord.Semicolon,
|
ExpKeyword.Semicolon => target.Value == ExpKeyword.Semicolon,
|
||||||
_ => false
|
_ => false
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool TryAppendIndexLeft( Token t )
|
||||||
|
{
|
||||||
|
if( t.Flag != TokenFlag.Index_Left ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if( _cache.TryPeekOperand(
|
||||||
|
out bool isNode, out _, out ExpNode? node ) ) {
|
||||||
|
if( node.EqualityTypeConvert is not ExpCollectionBase ) {
|
||||||
|
ExpInvalidSyntaxException.ThrowNonCollectionIndex( t );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_cache.PushOperator( t );
|
||||||
|
_cache.IncreaseDepth( ( int )ExpCompileStateCode.CollectionIndex );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private bool TryAppendIndexRight( Token t )
|
||||||
|
{
|
||||||
|
if( t.Flag != TokenFlag.Index_Right ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//reverse building
|
||||||
|
|
||||||
|
//make index node
|
||||||
|
_cache.PushOperand( ExpCollectionIndexNode.Create( t ) );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private bool TryAppendMember( Token t )
|
private bool TryAppendMember( Token t )
|
||||||
{
|
{
|
||||||
if( t.Flag != TokenFlag.Member ) {
|
if( t.Flag != TokenFlag.Member ) {
|
||||||
@@ -142,6 +104,37 @@ namespace StgSharp.Script.Express
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool TryAppendMiddleSeparator( Token t )
|
||||||
|
{
|
||||||
|
if( t.Flag != TokenFlag.Separator_Middle ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if( _cache.OperatorAheadOfDepth == 0 ) {
|
||||||
|
if( _cache.OperandAheadOfDepth == 1 ) {
|
||||||
|
_cache.PushOperand( t );
|
||||||
|
_cache.PushOperator( t );
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
ExpInvalidSyntaxException.ThrowNoOperator( t );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Token op;
|
||||||
|
processOperator:
|
||||||
|
if( _cache.TryPopOperator( out op ) ) {
|
||||||
|
if( op.Value == t.Value ) {
|
||||||
|
_cache.PopOperand( out _, out ExpNode? node );
|
||||||
|
|
||||||
|
//append node to tail
|
||||||
|
_cache.PushOperand( t );
|
||||||
|
_cache.PushOperator( t );
|
||||||
|
} else {
|
||||||
|
ConvertOneOperator();
|
||||||
|
goto processOperator;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 ) {
|
||||||
@@ -160,6 +153,17 @@ namespace StgSharp.Script.Express
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool TryAppendPrefixSeparatorEnd( Token t )
|
||||||
|
{
|
||||||
|
if( t.Flag != TokenFlag.Separator_Right ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//convert all operator to node until meet a prefix separator
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
private bool TryAppendSymbol( Token t )
|
private bool TryAppendSymbol( Token t )
|
||||||
{
|
{
|
||||||
if( ( t.Flag & ( TokenFlag.Symbol_Unary | TokenFlag.Symbol_Binary ) ) ==
|
if( ( t.Flag & ( TokenFlag.Symbol_Unary | TokenFlag.Symbol_Binary ) ) ==
|
||||||
@@ -181,10 +185,10 @@ namespace StgSharp.Script.Express
|
|||||||
|
|
||||||
private bool TryParseConstant( Token t )
|
private bool TryParseConstant( Token t )
|
||||||
{
|
{
|
||||||
if( t.Value == ExpKeyWord.True ) {
|
if( t.Value == ExpKeyword.True ) {
|
||||||
_cache.PushOperand( new ExpBoolNode( t, true ) );
|
_cache.PushOperand( new ExpBoolNode( t, true ) );
|
||||||
return true;
|
return true;
|
||||||
} else if( t.Value == ExpKeyWord.False ) {
|
} else if( t.Value == ExpKeyword.False ) {
|
||||||
_cache.PushOperand( new ExpBoolNode( t, false ) );
|
_cache.PushOperand( new ExpBoolNode( t, false ) );
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -193,7 +197,7 @@ namespace StgSharp.Script.Express
|
|||||||
|
|
||||||
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;
|
return true;
|
||||||
} else if( _context.TryGetFunction(
|
} else if( _context.TryGetFunction(
|
||||||
@@ -207,7 +211,7 @@ namespace StgSharp.Script.Express
|
|||||||
private bool TryParseInstance( Token t )
|
private bool TryParseInstance( Token t )
|
||||||
{
|
{
|
||||||
if( _local.TryGetMember( t.Value,
|
if( _local.TryGetMember( t.Value,
|
||||||
out ExpNode? node ) && node is ExpElementInstanceNode instance ) {
|
out ExpNode? node ) && node is ExpElementInstanceBase instance ) {
|
||||||
_cache.PushOperand(
|
_cache.PushOperand(
|
||||||
ExpInstanceReferenceNode.Create( t, instance ) );
|
ExpInstanceReferenceNode.Create( t, instance ) );
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -28,16 +28,19 @@
|
|||||||
//
|
//
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
//-----------------------------------------------------------------------
|
//-----------------------------------------------------------------------
|
||||||
|
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||||
|
|
||||||
using StgSharp.Threading;
|
using StgSharp.Threading;
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
|
using System.IO.Pipes;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
using ExpKeyWord = StgSharp.Script.Express.ExpCompile.KeyWord;
|
using ExpKeyword = StgSharp.Script.Express.ExpCompile.KeyWord;
|
||||||
|
|
||||||
namespace StgSharp.Script.Express
|
namespace StgSharp.Script.Express
|
||||||
{
|
{
|
||||||
@@ -68,7 +71,28 @@ namespace StgSharp.Script.Express
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void AppendToken( Token expToken )
|
public void AppendToken( Token expToken )
|
||||||
{
|
{
|
||||||
switch( _cache.CurrentDepthMark.State ) {
|
switch( expToken.Flag ) {
|
||||||
|
case TokenFlag.Symbol_Unary or TokenFlag.Symbol_Binary:
|
||||||
|
TryAppendSymbol( expToken );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Member:
|
||||||
|
TryAppendMember( expToken );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Separator_Left:
|
||||||
|
TryAppendPrefixSeparator( expToken );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Separator_Right:
|
||||||
|
TryAppendPrefixSeparatorEnd( expToken );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Separator_Middle:
|
||||||
|
TryAppendMiddleSeparator( expToken );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Index_Left:
|
||||||
|
TryAppendIndexLeft( expToken );
|
||||||
|
break;
|
||||||
|
case TokenFlag.Index_Right:
|
||||||
|
TryAppendIndexRight( expToken );
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -83,28 +107,6 @@ namespace StgSharp.Script.Express
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// WARNING: This method cannot process INDEXOF, FUNCTION CALLING, LOOP and any ENDING
|
|
||||||
/// SYMBOLS.
|
|
||||||
/// </summary>
|
|
||||||
private void ConvertOneOperator()
|
|
||||||
{
|
|
||||||
Token @operator = _cache.PopOperator();
|
|
||||||
|
|
||||||
switch( @operator.Flag ) {
|
|
||||||
case TokenFlag.Symbol_Unary:
|
|
||||||
TryGenerateUnaryNode( @operator, out ExpNode? node );
|
|
||||||
_cache.PushOperand( node );
|
|
||||||
break;
|
|
||||||
case TokenFlag.Symbol_Binary:
|
|
||||||
TryGenerateBinaryNode( @operator, out node );
|
|
||||||
_cache.PushOperand( node );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**/
|
/**/
|
||||||
|
|
||||||
public enum ExpCompileStateCode
|
public enum ExpCompileStateCode
|
||||||
@@ -118,6 +120,7 @@ namespace StgSharp.Script.Express
|
|||||||
CaseBranch,
|
CaseBranch,
|
||||||
PrefixSeparator,
|
PrefixSeparator,
|
||||||
MiddleSeparator,
|
MiddleSeparator,
|
||||||
|
CollectionIndex,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -77,10 +77,10 @@ namespace StgSharp.Script.Express
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// <para>Read code until end of a line. Lines in multi-line comment will be ignored. Line
|
/// <para> Read code until end of a line. Lines in multi-line comment will be ignored. Line
|
||||||
/// begins with part of multi-line comment will automatically remove the comment part, but
|
/// begins with part of multi-line comment will automatically remove the comment part, but
|
||||||
/// beginning with a full multi-line comment will not causing removing.</para> <para> (*Just
|
/// beginning with a full multi-line comment will not causing removing. </para> <para>(*Just
|
||||||
/// Like The Comment Here*) Will Not Be Removed </para>
|
/// Like The Comment Here*) Will Not Be Removed</para>
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public unsafe ReadOnlySpan<char> ReadLine()
|
public unsafe ReadOnlySpan<char> ReadLine()
|
||||||
@@ -246,7 +246,7 @@ namespace StgSharp.Script.Express
|
|||||||
_current++;
|
_current++;
|
||||||
return new Token(
|
return new Token(
|
||||||
ExpCompile.PoolString( source[ ..1 ] ), _lineNum,
|
ExpCompile.PoolString( source[ ..1 ] ), _lineNum,
|
||||||
begin, TokenFlag.Separator_Single );
|
begin, TokenFlag.Separator_Middle );
|
||||||
case ':' or '+' or '/' or '\\' or '*' or '.':
|
case ':' or '+' or '/' or '\\' or '*' or '.':
|
||||||
begin = _current;
|
begin = _current;
|
||||||
_current++;
|
_current++;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.Script")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.Script")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("StgSharp.Script")]
|
[assembly: System.Reflection.AssemblyProductAttribute("StgSharp.Script")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.Script")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.Script")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}}
|
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}}
|
||||||
@@ -14,7 +14,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.TerminalDialogue")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharp.TerminalDialogue")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("StgSharp.TerminalDialogue")]
|
[assembly: System.Reflection.AssemblyProductAttribute("StgSharp.TerminalDialogue")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.TerminalDialogue")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharp.TerminalDialogue")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}}
|
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}}
|
||||||
+26
-33
@@ -49,7 +49,7 @@ using System.Xml.XPath;
|
|||||||
|
|
||||||
namespace StgSharp
|
namespace StgSharp
|
||||||
{
|
{
|
||||||
internal static class Program
|
internal static partial class Program
|
||||||
{
|
{
|
||||||
|
|
||||||
private static string testExpPath = @"D:\Programmer\stepcode\data\ap203\ap203.exp";
|
private static string testExpPath = @"D:\Programmer\stepcode\data\ap203\ap203.exp";
|
||||||
@@ -59,42 +59,35 @@ namespace StgSharp
|
|||||||
try {
|
try {
|
||||||
StgSharp.Init();
|
StgSharp.Init();
|
||||||
|
|
||||||
/**/
|
CompileStack<ExpNode, IExpElementSource> stack = new CompileStack<ExpNode, IExpElementSource>(
|
||||||
ExpCompile.InitCompile();
|
);
|
||||||
ExpFileSource reader = new ExpFileSource( testExpPath );
|
|
||||||
ExpSchemaSource schemaSource = new ExpSchemaSource();
|
|
||||||
schemaSource.ReadSchema( reader );
|
|
||||||
|
|
||||||
ExpSchema schema = schemaSource.Compile(
|
for( int i = 0; i < 10; i++ ) {
|
||||||
ExpressCompileOption.Translate );
|
stack.PushOperand(
|
||||||
|
new Token( $"{i}", 0, 0, TokenFlag.Number ) );
|
||||||
|
}
|
||||||
|
for( int i = 0; i < 10; i++ ) {
|
||||||
|
stack.PushOperator(
|
||||||
|
new Token( $"op_{i}", 0, 0, TokenFlag.Member ) );
|
||||||
|
}
|
||||||
|
stack.IncreaseDepth( 0 );
|
||||||
|
|
||||||
/**/
|
for( int i = 0; i < 10; i++ ) {
|
||||||
/*
|
stack.PushOperand(
|
||||||
|
new Token( $"{i}", 0, 0, TokenFlag.Number ) );
|
||||||
StgSharp.InitGL( 4, 6 );
|
}
|
||||||
StgSharp.GlobalSetting.VSyncActivated = false;
|
for( int i = 0; i < 10; i++ ) {
|
||||||
|
stack.PushOperator(
|
||||||
ViewPort vp = new ViewPort(
|
new Token( $"op_{i}", 0, 0, TokenFlag.Member ) );
|
||||||
800, 600, "Hello StgSharp!", IntPtr.Zero );
|
|
||||||
|
|
||||||
//throw new NotImplementedException();
|
|
||||||
|
|
||||||
StringHashMultiplexer mul = new StringHashMultiplexer();
|
|
||||||
IEqualityComparer<string> com = mul;
|
|
||||||
string str = "1234567012345670";
|
|
||||||
for( int i = 1; i < 100; i++ ) {
|
|
||||||
str += $"{(i%8)}";
|
|
||||||
int hash = mul.ForceComputeHash( str );
|
|
||||||
Thread.Sleep( 20 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ViewModelBase mainModel = new ViewModelMain( vp );
|
while( stack.TryPopOperand(
|
||||||
mainModel.CreateAndBindView<ViewMain>( "MainView", (1, 1, 1) );
|
out bool isNode, out Token t, out ExpNode n ) ) {
|
||||||
|
Console.WriteLine( t.Value );
|
||||||
mainModel.UseViewModel( "MainView" );
|
}
|
||||||
|
while( stack.TryPopOperator( out Token op ) ) {
|
||||||
StgSharp.Terminate();
|
Console.WriteLine( op.Value );
|
||||||
/**/
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
//-----------------------------------------------------------------------
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// file="TestFileRead.cs"
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
using StgSharp.Script.Express;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StgSharp
|
||||||
|
{
|
||||||
|
internal static partial class Program
|
||||||
|
{
|
||||||
|
|
||||||
|
private static void TestFileRead()
|
||||||
|
{
|
||||||
|
ExpCompile.InitCompile();
|
||||||
|
ExpFileSource reader = new ExpFileSource( testExpPath );
|
||||||
|
ExpSchemaSource schemaSource = new ExpSchemaSource();
|
||||||
|
schemaSource.ReadSchema( reader );
|
||||||
|
|
||||||
|
ExpSchema schema = schemaSource.Compile(
|
||||||
|
ExpressCompileOption.Translate );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
//-----------------------------------------------------------------------
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
// file="TestRender.cs"
|
||||||
|
// 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.
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
using StgSharp.Collections;
|
||||||
|
using StgSharp.MVVM;
|
||||||
|
using StgSharp.MVVM.ViewModel;
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace StgSharp
|
||||||
|
{
|
||||||
|
internal static partial class Program
|
||||||
|
{
|
||||||
|
|
||||||
|
public static void TestRender()
|
||||||
|
{
|
||||||
|
StgSharp.InitGL( 4, 6 );
|
||||||
|
StgSharp.GlobalSetting.VSyncActivated = false;
|
||||||
|
|
||||||
|
ViewPort vp = new ViewPort(
|
||||||
|
800, 600, "Hello StgSharp!", IntPtr.Zero );
|
||||||
|
|
||||||
|
//throw new NotImplementedException();
|
||||||
|
|
||||||
|
StringHashMultiplexer mul = new StringHashMultiplexer();
|
||||||
|
IEqualityComparer<string> com = mul;
|
||||||
|
string str = "1234567012345670";
|
||||||
|
for( int i = 1; i < 100; i++ ) {
|
||||||
|
str += $"{(i % 8)}";
|
||||||
|
int hash = mul.ForceComputeHash( str );
|
||||||
|
Thread.Sleep( 20 );
|
||||||
|
}
|
||||||
|
|
||||||
|
ViewModelBase mainModel = new ViewModelMain( vp );
|
||||||
|
mainModel.CreateAndBindView<ViewMain>( "MainView", (1, 1, 1) );
|
||||||
|
|
||||||
|
mainModel.UseViewModel( "MainView" );
|
||||||
|
|
||||||
|
StgSharp.Terminate( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,7 +14,7 @@ using System.Reflection;
|
|||||||
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharpDebug")]
|
[assembly: System.Reflection.AssemblyCompanyAttribute("StgSharpDebug")]
|
||||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+e3741687a706609a1d0055c3fd11f41945838a70")]
|
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+6788bc4a0065508d7afa5f740da1b4ca6dd1efef")]
|
||||||
[assembly: System.Reflection.AssemblyProductAttribute("StgSharpDebug")]
|
[assembly: System.Reflection.AssemblyProductAttribute("StgSharpDebug")]
|
||||||
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharpDebug")]
|
[assembly: System.Reflection.AssemblyTitleAttribute("StgSharpDebug")]
|
||||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/e3741687a706609a1d0055c3fd11f41945838a70/*"}}
|
{"documents":{"D:\\NitloadIndustry\\研究项目\\1-Flagship\\TH2020\\ProjectFile\\内核源代码\\*":"https://raw.githubusercontent.com/Nitload-NSI/CCD_Github/6788bc4a0065508d7afa5f740da1b4ca6dd1efef/*"}}
|
||||||
Reference in New Issue
Block a user