More type conversions #19
@@ -1126,6 +1126,38 @@ GroundValue interpretGroundInstruction(GroundInstruction inst, GroundScope* scop
|
|||||||
addVariable(scope->variables, in->args.args[1].value.refName, createDoubleGroundValue(atof(in->args.args[0].value.value.data.stringVal)));
|
addVariable(scope->variables, in->args.args[1].value.refName, createDoubleGroundValue(atof(in->args.args[0].value.value.data.stringVal)));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ITOC: {
|
||||||
|
if (in->args.length < 2) {
|
||||||
|
runtimeError(TOO_FEW_ARGS, "Expecting 2 args", in, currentInstruction);
|
||||||
|
}
|
||||||
|
if (in->args.length > 2) {
|
||||||
|
runtimeError(TOO_MANY_ARGS, "Expecting 2 args", in, currentInstruction);
|
||||||
|
}
|
||||||
|
if (in->args.args[0].type != VALUE || in->args.args[0].value.value.type != INT) {
|
||||||
|
runtimeError(ARG_TYPE_MISMATCH, "Expecting an Int for arg 1", in, currentInstruction);
|
||||||
|
}
|
||||||
|
if (in->args.args[1].type != DIRREF) {
|
||||||
|
runtimeError(ARG_TYPE_MISMATCH, "Expecting a DirectRef for arg 2", in, currentInstruction);
|
||||||
|
}
|
||||||
|
addVariable(scope->variables, in->args.args[1].value.refName, createCharGroundValue((char)in->args.args[0].value.value.data.intVal));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case CTOI: {
|
||||||
|
if (in->args.length < 2) {
|
||||||
|
runtimeError(TOO_FEW_ARGS, "Expecting 2 args", in, currentInstruction);
|
||||||
|
}
|
||||||
|
if (in->args.length > 2) {
|
||||||
|
runtimeError(TOO_MANY_ARGS, "Expecting 2 args", in, currentInstruction);
|
||||||
|
}
|
||||||
|
if (in->args.args[0].type != VALUE || in->args.args[0].value.value.type != CHAR) {
|
||||||
|
runtimeError(ARG_TYPE_MISMATCH, "Expecting a Char for arg 1", in, currentInstruction);
|
||||||
|
}
|
||||||
|
if (in->args.args[1].type != DIRREF) {
|
||||||
|
runtimeError(ARG_TYPE_MISMATCH, "Expecting a DirectRef for arg 2", in, currentInstruction);
|
||||||
|
}
|
||||||
|
addVariable(scope->variables, in->args.args[1].value.refName, createIntGroundValue((int)in->args.args[0].value.value.data.charVal));
|
||||||
|
break;
|
||||||
|
}
|
||||||
case TOSTRING: {
|
case TOSTRING: {
|
||||||
if (in->args.length < 2) {
|
if (in->args.length < 2) {
|
||||||
runtimeError(TOO_FEW_ARGS, "Expecting 2 args", in, currentInstruction);
|
runtimeError(TOO_FEW_ARGS, "Expecting 2 args", in, currentInstruction);
|
||||||
|
|||||||
@@ -159,6 +159,8 @@ static GroundInstType getInstructionType(const char* inst) {
|
|||||||
if (strcmp(inst, "lesser") == 0) return LESSER;
|
if (strcmp(inst, "lesser") == 0) return LESSER;
|
||||||
if (strcmp(inst, "stoi") == 0) return STOI;
|
if (strcmp(inst, "stoi") == 0) return STOI;
|
||||||
if (strcmp(inst, "stod") == 0) return STOD;
|
if (strcmp(inst, "stod") == 0) return STOD;
|
||||||
|
if (strcmp(inst, "ctoi") == 0) return CTOI;
|
||||||
|
if (strcmp(inst, "itoc") == 0) return ITOC;
|
||||||
if (strcmp(inst, "tostring") == 0) return TOSTRING;
|
if (strcmp(inst, "tostring") == 0) return TOSTRING;
|
||||||
if (strcmp(inst, "fun") == 0) return FUN;
|
if (strcmp(inst, "fun") == 0) return FUN;
|
||||||
if (strcmp(inst, "return") == 0) return RETURN;
|
if (strcmp(inst, "return") == 0) return RETURN;
|
||||||
|
|||||||
@@ -413,6 +413,12 @@ void printGroundInstruction(GroundInstruction* gi) {
|
|||||||
case STOD:
|
case STOD:
|
||||||
printf("stod");
|
printf("stod");
|
||||||
break;
|
break;
|
||||||
|
case CTOI:
|
||||||
|
printf("ctoi");
|
||||||
|
break;
|
||||||
|
case ITOC:
|
||||||
|
printf("itoc");
|
||||||
|
break;
|
||||||
case TOSTRING:
|
case TOSTRING:
|
||||||
printf("tostring");
|
printf("tostring");
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
#include "include/uthash.h"
|
#include "include/uthash.h"
|
||||||
|
|
||||||
typedef enum GroundInstType {
|
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, TOSTRING, FUN, RETURN, ENDFUN, PUSHARG, CALL, STRUCT, ENDSTRUCT, INIT, GETFIELD, SETFIELD, USE, EXTERN, CREATELABEL, PAUSE, DROP, ERRORCMD
|
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;
|
} GroundInstType;
|
||||||
|
|
||||||
typedef enum GroundValueType {
|
typedef enum GroundValueType {
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
tostring 32 &str
|
tostring 32 &str
|
||||||
stoi "12" &int
|
stoi "12" &int
|
||||||
stod "3.14" &dou
|
stod "3.14" &dou
|
||||||
|
itoc 353 &chr
|
||||||
|
ctoi 'a' &it2
|
||||||
|
|
||||||
println $str
|
println $str
|
||||||
println $int
|
println $int
|
||||||
println $dou
|
println $dou
|
||||||
|
println $chr
|
||||||
|
println $it2
|
||||||
|
|||||||
Reference in New Issue
Block a user