forked from ground/ground
Closures in Ground
This commit is contained in:
26
src/types.h
26
src/types.h
@@ -8,6 +8,8 @@
|
||||
#include <string.h>
|
||||
#include "include/uthash.h"
|
||||
|
||||
#define MAX_ID_LEN 64
|
||||
|
||||
typedef enum GroundInstType {
|
||||
IF, JUMP, END, INPUT, PRINT, PRINTLN, SET, GETTYPE, EXISTS, SETLIST, SETLISTAT, GETLISTAT, GETLISTSIZE, LISTAPPEND, GETSTRSIZE, GETSTRCHARAT, ADD, SUBTRACT, MULTIPLY, DIVIDE, EQUAL, INEQUAL, NOT, GREATER, LESSER, STOI, STOD, ITOC, CTOI, TOSTRING, FUN, RETURN, ENDFUN, PUSHARG, CALL, STRUCT, ENDSTRUCT, INIT, GETFIELD, SETFIELD, USE, EXTERN, CREATELABEL, PAUSE, DROP, ERRORCMD
|
||||
} GroundInstType;
|
||||
@@ -77,6 +79,24 @@ typedef struct GroundValue {
|
||||
} data;
|
||||
} GroundValue;
|
||||
|
||||
typedef struct GroundLabel {
|
||||
char id[MAX_ID_LEN];
|
||||
int lineNum;
|
||||
UT_hash_handle hh;
|
||||
} GroundLabel;
|
||||
|
||||
typedef struct GroundVariable {
|
||||
char id[MAX_ID_LEN];
|
||||
GroundValue value;
|
||||
UT_hash_handle hh;
|
||||
} GroundVariable;
|
||||
|
||||
typedef struct GroundScope {
|
||||
GroundLabel** labels;
|
||||
GroundVariable** variables;
|
||||
bool isMainScope;
|
||||
} GroundScope;
|
||||
|
||||
/*
|
||||
* Indicates status when accessing a list.
|
||||
* Associated functions:
|
||||
@@ -145,6 +165,7 @@ typedef struct GroundFunction {
|
||||
GroundProgram program;
|
||||
size_t startLine;
|
||||
bool isNative;
|
||||
GroundScope closure;
|
||||
NativeGroundFunction nativeFn;
|
||||
} GroundFunction;
|
||||
|
||||
@@ -284,5 +305,10 @@ bool checkFnTypes(GroundValue* left, GroundFunctionArgs* arg);
|
||||
// Compares types of two values.
|
||||
bool checkTypes(GroundValue* left, GroundValue* right);
|
||||
|
||||
// Adds variable to GroundScope
|
||||
void addVariable(GroundVariable **head, const char *id, GroundValue data);
|
||||
|
||||
// Deep copies a GroundScope
|
||||
GroundScope copyGroundScope(GroundScope* scope);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user