testcases for instructions INSERT, INSERT2, SELECT and ASS
This commit is contained in:
+4
-5
@@ -497,8 +497,7 @@ static _Bool runInstruction(Runtime *runtime, Error *error)
|
|||||||
ASSERT(runtime != NULL);
|
ASSERT(runtime != NULL);
|
||||||
ASSERT(error->occurred == 0);
|
ASSERT(error->occurred == 0);
|
||||||
|
|
||||||
Stack *stack = Runtime_GetStack(runtime);
|
Heap *heap = Runtime_GetHeap(runtime);
|
||||||
Heap *heap = Runtime_GetHeap(runtime);
|
|
||||||
Executable *exe = Runtime_GetCurrentExecutable(runtime);
|
Executable *exe = Runtime_GetCurrentExecutable(runtime);
|
||||||
ASSERT(exe != NULL);
|
ASSERT(exe != NULL);
|
||||||
int index = Runtime_GetCurrentIndex(runtime);
|
int index = Runtime_GetCurrentIndex(runtime);
|
||||||
@@ -860,9 +859,9 @@ static _Bool runInstruction(Runtime *runtime, Error *error)
|
|||||||
{
|
{
|
||||||
ASSERT(opc == 0);
|
ASSERT(opc == 0);
|
||||||
|
|
||||||
Object *val = Stack_Top(stack, -2);
|
Object *val = Runtime_Top(runtime, -2);
|
||||||
Object *col = Stack_Top(stack, -1);
|
Object *col = Runtime_Top(runtime, -1);
|
||||||
Object *key = Stack_Top(stack, 0);
|
Object *key = Runtime_Top(runtime, 0);
|
||||||
if (val == NULL || col == NULL || key == NULL) {
|
if (val == NULL || col == NULL || key == NULL) {
|
||||||
Error_Report(error, ErrorType_INTERNAL, "Frame has not enough values on the stack to run INSERT2 instruction");
|
Error_Report(error, ErrorType_INTERNAL, "Frame has not enough values on the stack to run INSERT2 instruction");
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -35,7 +35,6 @@
|
|||||||
#include "timing.h"
|
#include "timing.h"
|
||||||
#include "executable.h"
|
#include "executable.h"
|
||||||
#include "utils/error.h"
|
#include "utils/error.h"
|
||||||
#include "utils/stack.h"
|
|
||||||
#include "objects/objects.h"
|
#include "objects/objects.h"
|
||||||
|
|
||||||
typedef struct xRuntime Runtime;
|
typedef struct xRuntime Runtime;
|
||||||
@@ -90,7 +89,6 @@ bool Runtime_CollectGarbage(Runtime *runtime, Error *error);
|
|||||||
void Runtime_PrintStackTrace(Runtime *runtime, FILE *stream);
|
void Runtime_PrintStackTrace(Runtime *runtime, FILE *stream);
|
||||||
void Runtime_Interrupt(Runtime *runtime);
|
void Runtime_Interrupt(Runtime *runtime);
|
||||||
Heap* Runtime_GetHeap(Runtime *runtime);
|
Heap* Runtime_GetHeap(Runtime *runtime);
|
||||||
Stack* Runtime_GetStack(Runtime *runtime);
|
|
||||||
int Runtime_GetCurrentIndex(Runtime *runtime);
|
int Runtime_GetCurrentIndex(Runtime *runtime);
|
||||||
Executable *Runtime_GetCurrentExecutable(Runtime *runtime);
|
Executable *Runtime_GetCurrentExecutable(Runtime *runtime);
|
||||||
Executable *Runtime_GetMostRecentExecutable(Runtime *runtime);
|
Executable *Runtime_GetMostRecentExecutable(Runtime *runtime);
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHNNE;
|
||||||
|
ASS "xyz";
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
PUSHVAR "xyz";
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [none]
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHNNE;
|
||||||
|
ASS "xyz";
|
||||||
|
POP 1;
|
||||||
|
PUSHVAR "xyz";
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
PUSHSTR "/";
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
PUSHINT 99;
|
||||||
|
ASS "xyz";
|
||||||
|
POP 1;
|
||||||
|
PUSHVAR "xyz";
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [none/99]
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHLST 3;
|
||||||
|
|
||||||
|
PUSHINT 0;
|
||||||
|
PUSHSTR "A";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
PUSHSTR "B";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 2;
|
||||||
|
PUSHSTR "C";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output {[A, B, C]}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHLST 2;
|
||||||
|
|
||||||
|
PUSHINT 0;
|
||||||
|
PUSHSTR "A";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
PUSHSTR "B";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 2;
|
||||||
|
PUSHSTR "C";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output {[A, B, C]}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHMAP 3;
|
||||||
|
|
||||||
|
PUSHINT 0;
|
||||||
|
PUSHSTR "A";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
PUSHSTR "B";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 2;
|
||||||
|
PUSHSTR "C";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [{0: A, 1: B, 2: C}]
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHMAP 2;
|
||||||
|
|
||||||
|
PUSHINT 0;
|
||||||
|
PUSHSTR "A";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
PUSHSTR "B";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 2;
|
||||||
|
PUSHSTR "C";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [{0: A, 1: B, 2: C}]
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHLST 3;
|
||||||
|
ASS "list";
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
PUSHSTR "A";
|
||||||
|
PUSHVAR "list";
|
||||||
|
PUSHINT 0;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "B";
|
||||||
|
PUSHVAR "list";
|
||||||
|
PUSHINT 1;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "C";
|
||||||
|
PUSHVAR "list";
|
||||||
|
PUSHINT 2;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHVAR "list";
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 4, 1;
|
||||||
|
POP 1;
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output {[A, B, C]CBA}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHLST 2;
|
||||||
|
ASS "list";
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
PUSHSTR "A";
|
||||||
|
PUSHVAR "list";
|
||||||
|
PUSHINT 0;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "B";
|
||||||
|
PUSHVAR "list";
|
||||||
|
PUSHINT 1;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "C";
|
||||||
|
PUSHVAR "list";
|
||||||
|
PUSHINT 2;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHVAR "list";
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 4, 1;
|
||||||
|
POP 1;
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output {[A, B, C]CBA}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHMAP 3;
|
||||||
|
ASS "map";
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
PUSHSTR "A";
|
||||||
|
PUSHVAR "map";
|
||||||
|
PUSHINT 0;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "B";
|
||||||
|
PUSHVAR "map";
|
||||||
|
PUSHINT 1;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "C";
|
||||||
|
PUSHVAR "map";
|
||||||
|
PUSHINT 2;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHVAR "map";
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 4, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [{0: A, 1: B, 2: C}CBA]
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHMAP 2;
|
||||||
|
ASS "map";
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
PUSHSTR "A";
|
||||||
|
PUSHVAR "map";
|
||||||
|
PUSHINT 0;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "B";
|
||||||
|
PUSHVAR "map";
|
||||||
|
PUSHINT 1;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHSTR "C";
|
||||||
|
PUSHVAR "map";
|
||||||
|
PUSHINT 2;
|
||||||
|
INSERT2;
|
||||||
|
|
||||||
|
PUSHVAR "map";
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 4, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [{0: A, 1: B, 2: C}CBA]
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHLST 3;
|
||||||
|
|
||||||
|
PUSHINT 0;
|
||||||
|
PUSHSTR "A";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
PUSHSTR "B";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 2;
|
||||||
|
PUSHSTR "C";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
SELECT;
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [B]
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHMAP 3;
|
||||||
|
|
||||||
|
PUSHINT 0;
|
||||||
|
PUSHSTR "A";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
PUSHSTR "B";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 2;
|
||||||
|
PUSHSTR "C";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
SELECT;
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [B]
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
@type [runtime]
|
||||||
|
|
||||||
|
@bytecode
|
||||||
|
|
||||||
|
PUSHMAP 3;
|
||||||
|
|
||||||
|
PUSHINT 0;
|
||||||
|
PUSHSTR "A";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 1;
|
||||||
|
PUSHSTR "B";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 2;
|
||||||
|
PUSHSTR "C";
|
||||||
|
INSERT;
|
||||||
|
|
||||||
|
PUSHINT 8;
|
||||||
|
SELECT;
|
||||||
|
|
||||||
|
PUSHVAR "print";
|
||||||
|
CALL 1, 1;
|
||||||
|
POP 1;
|
||||||
|
|
||||||
|
EXIT;
|
||||||
|
|
||||||
|
@output [none]
|
||||||
Reference in New Issue
Block a user