Native Function Loader

Implemented in path ./src/vm_core/native, the native functions allow C0VM to do many interesting and useful things (like printing to stdout!).

This documentation will provide detailed explanation on how we transcribe C Native Functions works into TypeScript. We will also show the native functions we planned to implement and our progress on them.

Native Functions

Native functions are lower-level functions that is hard to implement using the C0 code itself / is more efficient if implemented using native code.

In C0VM, there are several categories of the native functions, listed as below:

Status Code:

🟢 Supported

🟡 Not Implemented Yet

🔴 No Plan to Implement

Category NameExplanationStatus

Command Line Argument

Receive CLI argument, Parse CLI argument

🟡

Standard I/O

Print content to STDOUT and Receives STDIN

🟢

Cursor

Cursor related utility

🔴

Double Arithmetic

double number arithmetic operation

🔴

File I/O

File read/write operations

🔴

Float Arithmetic

float number arithmetic operation

🔴

Image

Image reading, operation and saving

🔴

Parse String

Convert string to data (int, char or boolean)

🟢

String Operation

String-related operation like concat etc.

🟢

Native Function Implementation

type C0Native = {
    numArgs: number;
    readonly functionType: C0NativeFuncType,
    readonly f: (
        hooks: ReactUIHook,
        mem: C0HeapAllocator,
        ...args: C0Value<C0TypeClass>[]
    ) => C0Value<C0TypeClass>;
};

The native function object is defined as above.

The numArgs represent the number of argument the native function will receive.

The functionType stores the name of native function

The f stores the actual native function, which receives a ReactUIHook, a HeapAllocator and several C0Values.

Native Function Loading

Defined in ./src/vm_core/native/native_interface.ts, the function nativeFuncLoader receives an index and returns the corresponding C0Native object.

To call the corresponding native function, use syntax like

const native: C0Native = nativeFuncLoader(index);
// to call this native
const retval:C0Value<C0TypeClass> = native.f(hooks, mem, arg1, arg2);

Last updated