public override void Deserialize(IUnrealStream stream) { if (NativeTable == null) { NativeTable = new NativeTableItem { Type = FunctionType.Function, Name = "UnresolvedNativeFunction_" + RepresentToken, ByteToken = RepresentToken }; } switch (NativeTable.Type) { case FunctionType.Function: DeserializeCall(); break; case FunctionType.PreOperator: case FunctionType.PostOperator: DeserializeUnaryOperator(); break; case FunctionType.Operator: DeserializeBinaryOperator(); break; default: DeserializeCall(); break; } }
private NativeFunctionToken FindNativeTable( int nativeIndex ) { var nativeFuncToken = new NativeFunctionToken(); try { var nativeTableItem = _Container.Package.NTLPackage != null ? _Container.Package.NTLPackage.FindTableItem( nativeIndex ) : null; if( nativeTableItem != null ) { nativeFuncToken.NativeTable = nativeTableItem; } else { // TODO: Rewrite as FindChild( lambda ) var table = _Container.Package.Exports.Find( e => (e.ClassName == "Function" && ((UFunction)(e.Object)).NativeToken == nativeIndex) ); if( table != null ) { var func = table.Object as UFunction; if( func != null ) { nativeTableItem = new NativeTableItem( func ); nativeFuncToken.NativeTable = nativeTableItem; } } } } catch( ArgumentOutOfRangeException ) { // ... } return nativeFuncToken; }
public override void Deserialize( IUnrealStream stream ) { if( NativeTable == null ) { NativeTable = new NativeTableItem { Type = FunctionType.Function, Name = "UnresolvedNativeFunction_" + RepresentToken, ByteToken = RepresentToken }; } switch( NativeTable.Type ) { case FunctionType.Function: DeserializeCall(); break; case FunctionType.PreOperator: case FunctionType.PostOperator: DeserializeUnaryOperator(); break; case FunctionType.Operator: DeserializeBinaryOperator(); break; default: DeserializeCall(); break; } }