From 855d93ce673c3d941b65cb4ba24e318471d7d5ca Mon Sep 17 00:00:00 2001 From: Steve Sanderson Date: Mon, 29 Jan 2018 21:47:55 +0000 Subject: [PATCH] Improve TS annotations when calling readObjectField/readStructField --- .../src/Platform/Mono/MonoPlatform.ts | 8 ++++---- .../src/Platform/Platform.ts | 4 ++-- .../src/Rendering/RenderBatch.ts | 8 ++++---- .../src/Rendering/RenderTreeNode.ts | 1 - 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Mono/MonoPlatform.ts b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Mono/MonoPlatform.ts index 6f24cd086f..6b1a68a98e 100644 --- a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Mono/MonoPlatform.ts +++ b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Mono/MonoPlatform.ts @@ -116,8 +116,8 @@ export const monoPlatform: Platform = { return Module.getValue((baseAddress as any as number) + (fieldOffset || 0), 'i32'); }, - readObjectField: function readHeapObject(baseAddress: Pointer, fieldOffset?: number): System_Object { - return Module.getValue((baseAddress as any as number) + (fieldOffset || 0), 'i32') as any as System_Object; + readObjectField: function readHeapObject(baseAddress: Pointer, fieldOffset?: number): T { + return Module.getValue((baseAddress as any as number) + (fieldOffset || 0), 'i32') as any as T; }, readStringField: function readHeapObject(baseAddress: Pointer, fieldOffset?: number): string | null { @@ -125,8 +125,8 @@ export const monoPlatform: Platform = { return fieldValue === 0 ? null : monoPlatform.toJavaScriptString(fieldValue as any as System_String); }, - readStructField: function readStructField(baseAddress: Pointer, fieldOffset?: number): Pointer { - return ((baseAddress as any as number) + (fieldOffset || 0)) as any as Pointer; + readStructField: function readStructField(baseAddress: Pointer, fieldOffset?: number): T { + return ((baseAddress as any as number) + (fieldOffset || 0)) as any as T; }, }; diff --git a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Platform.ts b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Platform.ts index ddefea35da..d4e91644d4 100644 --- a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Platform.ts +++ b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Platform/Platform.ts @@ -13,9 +13,9 @@ getObjectFieldsBaseAddress(referenceTypedObject: System_Object): Pointer; readInt32Field(baseAddress: Pointer, fieldOffset?: number): number; - readObjectField(baseAddress: Pointer, fieldOffset?: number): System_Object; + readObjectField(baseAddress: Pointer, fieldOffset?: number): T; readStringField(baseAddress: Pointer, fieldOffset?: number): string | null; - readStructField(baseAddress: Pointer, fieldOffset?: number): Pointer; + readStructField(baseAddress: Pointer, fieldOffset?: number): T; } // We don't actually instantiate any of these at runtime. For perf it's preferable to diff --git a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderBatch.ts b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderBatch.ts index 8d99186863..0ceb94b389 100644 --- a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderBatch.ts +++ b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderBatch.ts @@ -4,20 +4,20 @@ import { platform } from '../Environment'; // Keep in sync with the structs in .NET code export const renderBatch = { - updatedComponents: (obj: RenderBatchPointer) => platform.readStructField(obj, 0) as ArrayRangePointer, + updatedComponents: (obj: RenderBatchPointer) => platform.readStructField(obj, 0), }; const arrayRangeStructLength = 8; export const arrayRange = { - array: (obj: ArrayRangePointer) => platform.readObjectField(obj, 0) as System_Array, + array: (obj: ArrayRangePointer) => platform.readObjectField(obj, 0), count: (obj: ArrayRangePointer) => platform.readInt32Field(obj, 4), }; export const renderTreeDiffStructLength = 4 + 2 * arrayRangeStructLength; export const renderTreeDiff = { componentId: (obj: RenderTreeDiffPointer) => platform.readInt32Field(obj, 0), - edits: (obj: RenderTreeDiffPointer) => platform.readStructField(obj, 4) as ArrayRangePointer, - currentState: (obj: RenderTreeDiffPointer) => platform.readStructField(obj, 4 + arrayRangeStructLength) as ArrayRangePointer, + edits: (obj: RenderTreeDiffPointer) => platform.readStructField(obj, 4), + currentState: (obj: RenderTreeDiffPointer) => platform.readStructField(obj, 4 + arrayRangeStructLength), }; // Nominal types to ensure only valid pointers are passed to the functions above. diff --git a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderTreeNode.ts b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderTreeNode.ts index a710373eb5..1d24728ef4 100644 --- a/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderTreeNode.ts +++ b/src/Microsoft.AspNetCore.Blazor.Browser.JS/src/Rendering/RenderTreeNode.ts @@ -19,7 +19,6 @@ export const renderTreeNode = { attributeName: (node: RenderTreeNodePointer) => platform.readStringField(node, 20), attributeValue: (node: RenderTreeNodePointer) => platform.readStringField(node, 24), componentId: (node: RenderTreeNodePointer) => platform.readInt32Field(node, 32), - component: (node: RenderTreeNodePointer) => platform.readObjectField(node, 36), }; export enum NodeType {