2021-02-11 01:23:48 +08:00
|
|
|
/*
|
2021-06-09 18:42:26 +08:00
|
|
|
* Copyright (c) 2020-2021 Thakee Nathees
|
|
|
|
* Distributed Under The MIT License
|
2021-02-11 01:23:48 +08:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef CORE_H
|
|
|
|
#define CORE_H
|
|
|
|
|
2021-06-09 18:42:26 +08:00
|
|
|
#include "pk_common.h"
|
|
|
|
#include "pk_var.h"
|
2021-02-12 01:35:43 +08:00
|
|
|
|
2021-05-15 17:29:44 +08:00
|
|
|
// Initialize core language, builtin function and core libs.
|
2021-05-09 18:28:00 +08:00
|
|
|
void initializeCore(PKVM* vm);
|
2021-02-12 01:35:43 +08:00
|
|
|
|
|
|
|
// Find the builtin function name and returns it's index in the builtins array
|
|
|
|
// if not found returns -1.
|
2021-06-04 09:28:42 +08:00
|
|
|
int findBuiltinFunction(const PKVM* vm, const char* name, uint32_t length);
|
2021-02-12 01:35:43 +08:00
|
|
|
|
2021-02-18 02:27:24 +08:00
|
|
|
// Returns the builtin function at index [index].
|
2021-06-04 09:28:42 +08:00
|
|
|
Function* getBuiltinFunction(const PKVM* vm, int index);
|
2021-02-12 01:35:43 +08:00
|
|
|
|
2021-02-18 02:27:24 +08:00
|
|
|
// Returns the builtin function's name at index [index].
|
2021-06-04 09:28:42 +08:00
|
|
|
const char* getBuiltinFunctionName(const PKVM* vm, int index);
|
2021-02-18 02:27:24 +08:00
|
|
|
|
2021-05-07 17:41:19 +08:00
|
|
|
// Return the core library with the [name] if exists in the core libs,
|
|
|
|
// otherwise returns NULL.
|
2021-06-04 09:28:42 +08:00
|
|
|
Script* getCoreLib(const PKVM* vm, String* name);
|
2021-05-07 17:41:19 +08:00
|
|
|
|
2021-06-02 20:14:17 +08:00
|
|
|
/*****************************************************************************/
|
|
|
|
/* OPERATORS */
|
|
|
|
/*****************************************************************************/
|
2021-02-11 01:23:48 +08:00
|
|
|
|
2021-06-03 04:44:01 +08:00
|
|
|
Var varAdd(PKVM* vm, Var v1, Var v2); // Returns v1 + v2.
|
|
|
|
Var varSubtract(PKVM* vm, Var v1, Var v2); // Returns v1 - v2.
|
|
|
|
Var varMultiply(PKVM* vm, Var v1, Var v2); // Returns v1 * v2.
|
2021-06-07 13:54:06 +08:00
|
|
|
Var varDivide(PKVM* vm, Var v1, Var v2); // Returns v1 / v2.
|
|
|
|
Var varModulo(PKVM* vm, Var v1, Var v2); // Returns v1 % v2.
|
2021-02-11 01:23:48 +08:00
|
|
|
|
2021-06-11 15:46:55 +08:00
|
|
|
Var varBitAnd(PKVM* vm, Var v1, Var v2); // Returns v1 & v2.
|
|
|
|
|
2021-06-03 04:44:01 +08:00
|
|
|
bool varGreater(Var v1, Var v2); // Returns v1 > v2.
|
2021-06-07 13:54:06 +08:00
|
|
|
bool varLesser(Var v1, Var v2); // Returns v1 < v2.
|
2021-02-16 02:51:00 +08:00
|
|
|
|
2021-06-03 04:44:01 +08:00
|
|
|
// Returns the attribute named [attrib] on the variable [on].
|
2021-05-09 18:28:00 +08:00
|
|
|
Var varGetAttrib(PKVM* vm, Var on, String* attrib);
|
2021-06-03 04:44:01 +08:00
|
|
|
|
2021-06-04 09:28:42 +08:00
|
|
|
// Set the attribute named [attrib] on the variable [on] with the given
|
|
|
|
// [value].
|
2021-05-09 18:28:00 +08:00
|
|
|
void varSetAttrib(PKVM* vm, Var on, String* name, Var value);
|
2021-02-16 02:51:00 +08:00
|
|
|
|
2021-06-03 04:44:01 +08:00
|
|
|
// Returns the subscript value (ie. on[key]).
|
2021-05-09 18:28:00 +08:00
|
|
|
Var varGetSubscript(PKVM* vm, Var on, Var key);
|
2021-06-03 04:44:01 +08:00
|
|
|
|
|
|
|
// Set subscript [value] with the [key] (ie. on[key] = value).
|
2021-05-09 18:28:00 +08:00
|
|
|
void varsetSubscript(PKVM* vm, Var on, Var key, Var value);
|
2021-02-15 20:49:19 +08:00
|
|
|
|
2021-02-11 01:23:48 +08:00
|
|
|
#endif // CORE_H
|