Skip to content

Commit 0576450

Browse files
committed
Merge remote-tracking branch 'origin/master-n3' into feat/reserved-prefix-collision
2 parents 4832495 + 6b2babe commit 0576450

11 files changed

Lines changed: 178 additions & 55 deletions

File tree

src/Neo.Compiler.CSharp/MethodConvert/Expression/ObjectCreationExpression.cs

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ private bool TryOptimizedObjectCreation(SemanticModel model, BaseObjectCreationE
100100
var members = type.GetAllMembers().Where(p => !p.IsStatic).ToArray();
101101
var fields = members.OfType<IFieldSymbol>().ToArray();
102102
Dictionary<int, ExpressionSyntax> indexToValue = new();
103+
List<(int Index, ExpressionSyntax Value)> initializerValues = new();
103104
foreach (ExpressionSyntax e in expression.Initializer.Expressions)
104105
{
105106
if (e is not AssignmentExpressionSyntax ae)
@@ -109,22 +110,44 @@ private bool TryOptimizedObjectCreation(SemanticModel model, BaseObjectCreationE
109110
return false;
110111
int index = GetInstanceFieldIndex(field);
111112
indexToValue.Add(index, ae.Right);
113+
initializerValues.Add((index, ae.Right));
112114
}
115+
if (!CanUseFieldOrderPackedInitializer(model, initializerValues))
116+
return false;
113117
var virtualMethods = members.OfType<IMethodSymbol>().Where(p => p.IsVirtualMethod()).ToArray();
114-
int needVirtualMethodTable = 0;
115-
if (!type.IsRecord && virtualMethods.Length > 0)
118+
bool needVirtualMethodTable = !type.IsRecord && virtualMethods.Length > 0;
119+
120+
// Build the packed slots in field-index order (initializer value or default), with the
121+
// optional virtual method table as the final slot. Routing through
122+
// EmitPackedItemsLeftToRight preserves left-to-right evaluation order when the
123+
// initializer values have side effects, instead of evaluating them in reverse (#1685).
124+
// The virtual method table load and field defaults are side-effect free, so the
125+
// all-constant case still emits the same instructions as before.
126+
var slots = new List<(Action Emit, bool CanDefer)>(fields.Length + (needVirtualMethodTable ? 1 : 0));
127+
for (int i = 0; i < fields.Length; i++)
116128
{
117-
needVirtualMethodTable += 1;
118-
byte vTableIndex = _context.AddVTable(type);
119-
AccessSlot(OpCode.LDSFLD, vTableIndex);
120-
}
121-
for (int i = fields.Length - 1; i >= 0; --i)
122129
if (indexToValue.TryGetValue(i, out ExpressionSyntax? right))
123-
ConvertExpression(model, right);
130+
{
131+
ExpressionSyntax value = right;
132+
slots.Add((() => ConvertExpression(model, value), CanDeferExpressionEmission(model, value)));
133+
}
124134
else
125-
PushDefault(fields[i].Type);
126-
Push(fields.Length + needVirtualMethodTable);
127-
AddInstruction(type.IsValueType || type.IsRecord ? OpCode.PACKSTRUCT : OpCode.PACK);
135+
{
136+
ITypeSymbol fieldType = fields[i].Type;
137+
slots.Add((() => PushDefault(fieldType), true));
138+
}
139+
}
140+
if (needVirtualMethodTable)
141+
{
142+
byte vTableIndex = _context.AddVTable(type);
143+
slots.Add((() => AccessSlot(OpCode.LDSFLD, vTableIndex), true));
144+
}
145+
146+
EmitPackedItemsLeftToRight(
147+
slots,
148+
slot => slot.Emit(),
149+
type.IsValueType || type.IsRecord ? OpCode.PACKSTRUCT : OpCode.PACK,
150+
slot => slot.CanDefer);
128151
return true;
129152
}
130153

@@ -192,10 +215,13 @@ private void ConvertObjectCreationExpressionInitializer(SemanticModel model, Ini
192215
}
193216
else
194217
{
195-
for (var i = initializer.Expressions.Count - 1; i >= 0; i--)
196-
ConvertExpression(model, initializer.Expressions[i]);
197-
Push(initializer.Expressions.Count);
198-
AddInstruction(OpCode.PACK);
218+
// Preserve left-to-right evaluation order of the elements when they have
219+
// side effects, instead of emitting them in reverse (see #1685).
220+
EmitPackedItemsLeftToRight(
221+
initializer.Expressions.ToArray(),
222+
expression => ConvertExpression(model, expression),
223+
OpCode.PACK,
224+
expression => CanDeferExpressionEmission(model, expression));
199225
}
200226
return;
201227
}
@@ -254,6 +280,19 @@ private void ConvertObjectCreationExpressionInitializer(SemanticModel model, Ini
254280
}
255281
}
256282

283+
private static bool CanUseFieldOrderPackedInitializer(SemanticModel model, IReadOnlyList<(int Index, ExpressionSyntax Value)> initializerValues)
284+
{
285+
bool hasSideEffects = initializerValues.Any(value => !CanDeferExpressionEmission(model, value.Value));
286+
if (!hasSideEffects)
287+
return true;
288+
289+
for (int i = 1; i < initializerValues.Count; i++)
290+
if (initializerValues[i].Index < initializerValues[i - 1].Index)
291+
return false;
292+
293+
return true;
294+
}
295+
257296
private void ConvertDelegateCreationExpression(SemanticModel model, BaseObjectCreationExpressionSyntax expression)
258297
{
259298
if (expression.ArgumentList!.Arguments.Count != 1)

tests/Neo.Compiler.CSharp.UnitTests/TestingArtifacts/Contract_ClassInit.cs

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public abstract class Contract_ClassInit(Neo.SmartContract.Testing.SmartContract
1818
/// <summary>
1919
/// Optimization: "All"
2020
/// </summary>
21-
public static Neo.SmartContract.NefFile Nef => Convert.FromBase64String(@"TkVGM1Rlc3RpbmdFbmdpbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoQEBK/QFcFAAsLCxAQCRbAEBASvwwBcxAQCRbAcGhoFc5QEsBKccpyEHMiG2lrznRsEM4JlzlsEc4QlzlsEs4QlzlrnHNrajDlaBPODAFzlzloFc4Tztg5aBTOEM4QlzloFM4RzhCXOWhAh4kyCg==").AsSerializable<Neo.SmartContract.NefFile>();
21+
public static Neo.SmartContract.NefFile Nef => Convert.FromBase64String(@"TkVGM1Rlc3RpbmdFbmdpbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwQEBK/QFcFAAkQEAwBcxAQEr8LCwsQEAkWwBZVFsBwaGgVzlASwEpxynIQcyIbaWvOdGwQzgmXOWwRzhCXOWwSzhCXOWucc2tqMOVoE84MAXOXOWgVzhPO2DloFM4QzhCXOWgUzhHOEJc5aECF9lVj").AsSerializable<Neo.SmartContract.NefFile>();
2222

2323
#endregion
2424

@@ -28,26 +28,28 @@ public abstract class Contract_ClassInit(Neo.SmartContract.Testing.SmartContract
2828
/// Unsafe method
2929
/// </summary>
3030
/// <remarks>
31-
/// Script: VwUACwsLEBAJFsAQEBK/DAFzEBAJFsBwaGgVzlASwEpxynIQcyIbaWvOdGwQzgmXOWwRzhCXOWwSzhCXOWucc2tqMOVoE84MAXOXOWgVzhPO2DloFM4QzhCXOWgUzhHOEJc5aEA=
31+
/// Script: VwUACRAQDAFzEBASvwsLCxAQCRbAFlUWwHBoaBXOUBLASnHKchBzIhtpa850bBDOCZc5bBHOEJc5bBLOEJc5a5xza2ow5WgTzgwBc5c5aBXOE87YOWgUzhDOEJc5aBTOEc4QlzloQA==
3232
/// INITSLOT 0500 [64 datoshi]
33-
/// PUSHNULL [1 datoshi]
34-
/// PUSHNULL [1 datoshi]
35-
/// PUSHNULL [1 datoshi]
33+
/// PUSHF [1 datoshi]
3634
/// PUSH0 [1 datoshi]
3735
/// PUSH0 [1 datoshi]
38-
/// PUSHF [1 datoshi]
39-
/// PUSH6 [1 datoshi]
40-
/// PACK [2048 datoshi]
36+
/// PUSHDATA1 73 's' [8 datoshi]
4137
/// PUSH0 [1 datoshi]
4238
/// PUSH0 [1 datoshi]
4339
/// PUSH2 [1 datoshi]
4440
/// PACKSTRUCT [2048 datoshi]
45-
/// PUSHDATA1 73 's' [8 datoshi]
41+
/// PUSHNULL [1 datoshi]
42+
/// PUSHNULL [1 datoshi]
43+
/// PUSHNULL [1 datoshi]
4644
/// PUSH0 [1 datoshi]
4745
/// PUSH0 [1 datoshi]
4846
/// PUSHF [1 datoshi]
4947
/// PUSH6 [1 datoshi]
5048
/// PACK [2048 datoshi]
49+
/// PUSH6 [1 datoshi]
50+
/// REVERSEN [16 datoshi]
51+
/// PUSH6 [1 datoshi]
52+
/// PACK [2048 datoshi]
5153
/// STLOC0 [2 datoshi]
5254
/// LDLOC0 [2 datoshi]
5355
/// LDLOC0 [2 datoshi]

tests/Neo.Compiler.CSharp.UnitTests/TestingArtifacts/Contract_Initializer.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ public abstract class Contract_Initializer(Neo.SmartContract.Testing.SmartContra
1313
{
1414
#region Compiled data
1515

16-
public static Neo.SmartContract.Manifest.ContractManifest Manifest => Neo.SmartContract.Manifest.ContractManifest.Parse(@"{""name"":""Contract_Initializer"",""groups"":[],""features"":{},""supportedstandards"":[],""abi"":{""methods"":[{""name"":""sum"",""parameters"":[],""returntype"":""Integer"",""offset"":0,""safe"":false},{""name"":""sum1"",""parameters"":[{""name"":""a"",""type"":""Integer""},{""name"":""b"",""type"":""Integer""}],""returntype"":""Integer"",""offset"":49,""safe"":false},{""name"":""sum2"",""parameters"":[{""name"":""a"",""type"":""Integer""},{""name"":""b"",""type"":""Integer""}],""returntype"":""Integer"",""offset"":98,""safe"":false},{""name"":""anonymousObjectCreation"",""parameters"":[],""returntype"":""Void"",""offset"":157,""safe"":false}],""events"":[]},""permissions"":[],""trusts"":[],""extra"":{""Version"":""3.10.0"",""nef"":{""optimization"":""All""}}}");
16+
public static Neo.SmartContract.Manifest.ContractManifest Manifest => Neo.SmartContract.Manifest.ContractManifest.Parse(@"{""name"":""Contract_Initializer"",""groups"":[],""features"":{},""supportedstandards"":[],""abi"":{""methods"":[{""name"":""sum"",""parameters"":[],""returntype"":""Integer"",""offset"":0,""safe"":false},{""name"":""sum1"",""parameters"":[{""name"":""a"",""type"":""Integer""},{""name"":""b"",""type"":""Integer""}],""returntype"":""Integer"",""offset"":49,""safe"":false},{""name"":""sum2"",""parameters"":[{""name"":""a"",""type"":""Integer""},{""name"":""b"",""type"":""Integer""}],""returntype"":""Integer"",""offset"":99,""safe"":false},{""name"":""anonymousObjectCreation"",""parameters"":[],""returntype"":""Void"",""offset"":158,""safe"":false}],""events"":[]},""permissions"":[],""trusts"":[],""extra"":{""Version"":""3.10.0"",""nef"":{""optimization"":""All""}}}");
1717

1818
/// <summary>
1919
/// Optimization: "All"
2020
/// </summary>
21-
public static Neo.SmartContract.NefFile Nef => Convert.FromBase64String(@"TkVGM1Rlc3RpbmdFbmdpbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAORXAQASERLAcGgQzmgRzp5KyhQyHgP/////AAAAAJFKAv///38yDAMAAAAAAQAAAJ9AVwECeXgSwHBoEM5oEc6eSsoUMh4D/////wAAAACRSgL///9/MgwDAAAAAAEAAACfQFcBAhIREsBweGgQUdB5aBFR0GgQzmgRzp5KyhQyHgP/////AAAAAJFKAv///38yDAMAAAAAAQAAAJ9AVwIADAVIZWxsbwBsEsBwaDQpQc/nR5YRDAVncmFwZRLAFAwFYXBwbGUSwBLAcWkQzjQPQc/nR5ZAVwABeBHOQFcAAXgQzkA2eQUT").AsSerializable<Neo.SmartContract.NefFile>();
21+
public static Neo.SmartContract.NefFile Nef => Convert.FromBase64String(@"TkVGM1Rlc3RpbmdFbmdpbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOVXAQASERLAcGgQzmgRzp5KyhQyHgP/////AAAAAJFKAv///38yDAMAAAAAAQAAAJ9AVwECeHlQEsBwaBDOaBHOnkrKFDIeA/////8AAAAAkUoC////fzIMAwAAAAABAAAAn0BXAQISERLAcHhoEFHQeWgRUdBoEM5oEc6eSsoUMh4D/////wAAAACRSgL///9/MgwDAAAAAAEAAACfQFcCAAwFSGVsbG8AbBLAcGg0KUHP50eWEQwFZ3JhcGUSwBQMBWFwcGxlEsASwHFpEM40D0HP50eWQFcAAXgRzkBXAAF4EM5AVMxK3A==").AsSerializable<Neo.SmartContract.NefFile>();
2222

2323
#endregion
2424

@@ -97,10 +97,11 @@ public abstract class Contract_Initializer(Neo.SmartContract.Testing.SmartContra
9797
/// Unsafe method
9898
/// </summary>
9999
/// <remarks>
100-
/// Script: VwECeXgSwHBoEM5oEc6eSsoUMh4D/////wAAAACRSgL///9/MgwDAAAAAAEAAACfQA==
100+
/// Script: VwECeHlQEsBwaBDOaBHOnkrKFDIeA/////8AAAAAkUoC////fzIMAwAAAAABAAAAn0A=
101101
/// INITSLOT 0102 [64 datoshi]
102-
/// LDARG1 [2 datoshi]
103102
/// LDARG0 [2 datoshi]
103+
/// LDARG1 [2 datoshi]
104+
/// SWAP [2 datoshi]
104105
/// PUSH2 [1 datoshi]
105106
/// PACK [2048 datoshi]
106107
/// STLOC0 [2 datoshi]

tests/Neo.Compiler.CSharp.UnitTests/TestingArtifacts/Contract_NULL.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ public abstract class Contract_NULL(Neo.SmartContract.Testing.SmartContractIniti
1313
{
1414
#region Compiled data
1515

16-
public static Neo.SmartContract.Manifest.ContractManifest Manifest => Neo.SmartContract.Manifest.ContractManifest.Parse(@"{""name"":""Contract_NULL"",""groups"":[],""features"":{},""supportedstandards"":[],""abi"":{""methods"":[{""name"":""isNull"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":0,""safe"":false},{""name"":""equalNullA"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":8,""safe"":false},{""name"":""equalNullB"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":15,""safe"":false},{""name"":""equalNotNullA"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":21,""safe"":false},{""name"":""equalNotNullB"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":28,""safe"":false},{""name"":""nullCoalescing"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""String"",""offset"":35,""safe"":false},{""name"":""nullCollation"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""String"",""offset"":51,""safe"":false},{""name"":""nullPropertyGT"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":70,""safe"":false},{""name"":""nullPropertyLT"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":82,""safe"":false},{""name"":""nullPropertyGE"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":94,""safe"":false},{""name"":""nullPropertyLE"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":106,""safe"":false},{""name"":""nullProperty"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":118,""safe"":false},{""name"":""ifNull"",""parameters"":[{""name"":""obj"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":130,""safe"":false},{""name"":""nullCollationAndCollation"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""Any"",""offset"":140,""safe"":false},{""name"":""nullCollationAndCollation2"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""Any"",""offset"":165,""safe"":false},{""name"":""nullType"",""parameters"":[],""returntype"":""Void"",""offset"":202,""safe"":false},{""name"":""nullCoalescingAssignment"",""parameters"":[{""name"":""nullableArg"",""type"":""Integer""}],""returntype"":""Void"",""offset"":215,""safe"":false},{""name"":""staticNullableCoalesceAssignment"",""parameters"":[],""returntype"":""Void"",""offset"":466,""safe"":false},{""name"":""_initialize"",""parameters"":[],""returntype"":""Void"",""offset"":607,""safe"":false}],""events"":[]},""permissions"":[],""trusts"":[],""extra"":{""Version"":""3.10.0"",""nef"":{""optimization"":""All""}}}");
16+
public static Neo.SmartContract.Manifest.ContractManifest Manifest => Neo.SmartContract.Manifest.ContractManifest.Parse(@"{""name"":""Contract_NULL"",""groups"":[],""features"":{},""supportedstandards"":[],""abi"":{""methods"":[{""name"":""isNull"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":0,""safe"":false},{""name"":""equalNullA"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":8,""safe"":false},{""name"":""equalNullB"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":15,""safe"":false},{""name"":""equalNotNullA"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":21,""safe"":false},{""name"":""equalNotNullB"",""parameters"":[{""name"":""value"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":28,""safe"":false},{""name"":""nullCoalescing"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""String"",""offset"":35,""safe"":false},{""name"":""nullCollation"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""String"",""offset"":51,""safe"":false},{""name"":""nullPropertyGT"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":70,""safe"":false},{""name"":""nullPropertyLT"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":82,""safe"":false},{""name"":""nullPropertyGE"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":94,""safe"":false},{""name"":""nullPropertyLE"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":106,""safe"":false},{""name"":""nullProperty"",""parameters"":[{""name"":""a"",""type"":""String""}],""returntype"":""Boolean"",""offset"":118,""safe"":false},{""name"":""ifNull"",""parameters"":[{""name"":""obj"",""type"":""Any""}],""returntype"":""Boolean"",""offset"":130,""safe"":false},{""name"":""nullCollationAndCollation"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""Any"",""offset"":140,""safe"":false},{""name"":""nullCollationAndCollation2"",""parameters"":[{""name"":""code"",""type"":""String""}],""returntype"":""Any"",""offset"":165,""safe"":false},{""name"":""nullType"",""parameters"":[],""returntype"":""Void"",""offset"":202,""safe"":false},{""name"":""nullCoalescingAssignment"",""parameters"":[{""name"":""nullableArg"",""type"":""Integer""}],""returntype"":""Void"",""offset"":215,""safe"":false},{""name"":""staticNullableCoalesceAssignment"",""parameters"":[],""returntype"":""Void"",""offset"":467,""safe"":false},{""name"":""_initialize"",""parameters"":[],""returntype"":""Void"",""offset"":608,""safe"":false}],""events"":[]},""permissions"":[],""trusts"":[],""extra"":{""Version"":""3.10.0"",""nef"":{""optimization"":""All""}}}");
1717

1818
/// <summary>
1919
/// Optimization: "All"
2020
/// </summary>
21-
public static Neo.SmartContract.NefFile Nef => Convert.FromBase64String(@"TkVGM1Rlc3RpbmdFbmdpbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP1mAlcBAXhwaNhAVwABC3iXQFcAAXjYQFcAAQt4mEBXAAF42KpAVwEBeErYJAcREozbKHBoQFcBAXhK2CYKRQwFbGludXhwaEBXAAF4StgkA8oQt0BXAAF4StgkA8oQtUBXAAF4StgkA8oQuEBXAAF4StgkA8oQtkBXAAF4StgkA8oQmEBXAAF4JgQIQAlAVwEBQZv2Z85weGhBkl3oMUrYJgZFDAF7QFcBAUGb9mfOcAwDMTExeGhB5j8YhHhoQZJd6DFK2CYGRQwBe0BXAQALcGhK2CQDQEVAVwEBeNgkBXgiBRFKgEULeBLAcGgQzhGXOQtoEFHQaBHO2DloShHOStgkBUYiE0UQCxITaBDOFVUVwE5QEVHQRQsRwGg1kQAAAEVoEc4Qzmg1mAAAAEVoEM4QlzloEEtLztgkBc4iC2gRzhHOSlRT0EVoEM4QlzloEc4RS0vO2CQFziIHEUpUU9BFaBHOEc4RlzloEc4RS0vO2CQFziIHEkpUU9BFaBHOEc4RlzloEc4RS0vOSlRTnAH/AJHQRWgRzhHOEpc5CxHAaBFR0GgRzhDO2DlAVwACeBHOStgmCkV4eU5QEVHQQFcAAngQS0vO2CQEzkB5SlRT0EBY2CQFWCIFC0pgRVgIlzkLYFjYJAVYIgUJSmAJlzlZStgmBkULSmFFWRCXOQthWUrYJgZFEUphEZc5WUqcSsoUMh4D/////wAAAACRSgL///9/MgwDAAAAAAEAAACfYUVZEpc5WZ1KyhQyHgP/////AAAAAJFKAv///38yDAMAAAAAAQAAAJ9hWRGXOUBWAghgEGFA30JuZA==").AsSerializable<Neo.SmartContract.NefFile>();
21+
public static Neo.SmartContract.NefFile Nef => Convert.FromBase64String(@"TkVGM1Rlc3RpbmdFbmdpbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP1nAlcBAXhwaNhAVwABC3iXQFcAAXjYQFcAAQt4mEBXAAF42KpAVwEBeErYJAcREozbKHBoQFcBAXhK2CYKRQwFbGludXhwaEBXAAF4StgkA8oQt0BXAAF4StgkA8oQtUBXAAF4StgkA8oQuEBXAAF4StgkA8oQtkBXAAF4StgkA8oQmEBXAAF4JgQIQAlAVwEBQZv2Z85weGhBkl3oMUrYJgZFDAF7QFcBAUGb9mfOcAwDMTExeGhB5j8YhHhoQZJd6DFK2CYGRQwBe0BXAQALcGhK2CQDQEVAVwEBeNgkBXgiBRFKgEV4C1ASwHBoEM4RlzkLaBBR0GgRztg5aEoRzkrYJAVGIhNFEAsSE2gQzhVVFcBOUBFR0EULEcBoNZEAAABFaBHOEM5oNZgAAABFaBDOEJc5aBBLS87YJAXOIgtoEc4RzkpUU9BFaBDOEJc5aBHOEUtLztgkBc4iBxFKVFPQRWgRzhHOEZc5aBHOEUtLztgkBc4iBxJKVFPQRWgRzhHOEZc5aBHOEUtLzkpUU5wB/wCR0EVoEc4RzhKXOQsRwGgRUdBoEc4Qztg5QFcAAngRzkrYJgpFeHlOUBFR0EBXAAJ4EEtLztgkBM5AeUpUU9BAWNgkBVgiBQtKYEVYCJc5C2BY2CQFWCIFCUpgCZc5WUrYJgZFC0phRVkQlzkLYVlK2CYGRRFKYRGXOVlKnErKFDIeA/////8AAAAAkUoC////fzIMAwAAAAABAAAAn2FFWRKXOVmdSsoUMh4D/////wAAAACRSgL///9/MgwDAAAAAAEAAACfYVkRlzlAVgIIYBBhQDUYMQ0=").AsSerializable<Neo.SmartContract.NefFile>();
2222

2323
#endregion
2424

@@ -135,7 +135,7 @@ public abstract class Contract_NULL(Neo.SmartContract.Testing.SmartContractIniti
135135
/// Unsafe method
136136
/// </summary>
137137
/// <remarks>
138-
/// Script: VwEBeNgkBXgiBRFKgEULeBLAcGgQzhGXOQtoEFHQaBHO2DloShHOStgkBUYiE0UQCxITaBDOFVUVwE5QEVHQRQsRwGg1kQAAAEVoEc4Qzmg1mAAAAEVoEM4QlzloEEtLztgkBc4iC2gRzhHOSlRT0EVoEM4QlzloEc4RS0vO2CQFziIHEUpUU9BFaBHOEc4RlzloEc4RS0vO2CQFziIHEkpUU9BFaBHOEc4RlzloEc4RS0vOSlRTnAH/AJHQRWgRzhHOEpc5CxHAaBFR0GgRzhDO2DlA
138+
/// Script: VwEBeNgkBXgiBRFKgEV4C1ASwHBoEM4RlzkLaBBR0GgRztg5aEoRzkrYJAVGIhNFEAsSE2gQzhVVFcBOUBFR0EULEcBoNZEAAABFaBHOEM5oNZgAAABFaBDOEJc5aBBLS87YJAXOIgtoEc4RzkpUU9BFaBDOEJc5aBHOEUtLztgkBc4iBxFKVFPQRWgRzhHOEZc5aBHOEUtLztgkBc4iBxJKVFPQRWgRzhHOEZc5aBHOEUtLzkpUU5wB/wCR0EVoEc4RzhKXOQsRwGgRUdBoEc4Qztg5QA==
139139
/// INITSLOT 0101 [64 datoshi]
140140
/// LDARG0 [2 datoshi]
141141
/// ISNULL [2 datoshi]
@@ -146,8 +146,9 @@ public abstract class Contract_NULL(Neo.SmartContract.Testing.SmartContractIniti
146146
/// DUP [2 datoshi]
147147
/// STARG0 [2 datoshi]
148148
/// DROP [2 datoshi]
149-
/// PUSHNULL [1 datoshi]
150149
/// LDARG0 [2 datoshi]
150+
/// PUSHNULL [1 datoshi]
151+
/// SWAP [2 datoshi]
151152
/// PUSH2 [1 datoshi]
152153
/// PACK [2048 datoshi]
153154
/// STLOC0 [2 datoshi]

0 commit comments

Comments
 (0)