|
@@ -1,6 +1,5 @@
|
|
#include "__virtualmath.h"
|
|
#include "__virtualmath.h"
|
|
|
|
|
|
-
|
|
|
|
Value *makeObject(Inter *inter, VarList *object, VarList *out_var, FatherValue *father) {
|
|
Value *makeObject(Inter *inter, VarList *object, VarList *out_var, FatherValue *father) {
|
|
Value *tmp, *list_tmp = inter->base;
|
|
Value *tmp, *list_tmp = inter->base;
|
|
tmp = memCalloc(1, sizeof(Value));
|
|
tmp = memCalloc(1, sizeof(Value));
|
|
@@ -27,9 +26,28 @@ Value *makeObject(Inter *inter, VarList *object, VarList *out_var, FatherValue *
|
|
}
|
|
}
|
|
|
|
|
|
Value *makeNoneValue(Inter *inter) {
|
|
Value *makeNoneValue(Inter *inter) {
|
|
|
|
+ Value *tmp;
|
|
|
|
+ if (inter->base == NULL) {
|
|
|
|
+ tmp = makeObject(inter, NULL, NULL, NULL);
|
|
|
|
+ tmp->type = none;
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ tmp = inter->base;
|
|
|
|
+ return tmp;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+Value *makeBoolValue(bool bool_num, Inter *inter) {
|
|
Value *tmp;
|
|
Value *tmp;
|
|
tmp = makeObject(inter, NULL, NULL, NULL);
|
|
tmp = makeObject(inter, NULL, NULL, NULL);
|
|
- tmp->type = none;
|
|
|
|
|
|
+ tmp->type = bool_;
|
|
|
|
+ tmp->data.bool_.bool_ = bool_num;
|
|
|
|
+ return tmp;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+Value *makePassValue(Inter *inter){
|
|
|
|
+ Value *tmp;
|
|
|
|
+ tmp = makeObject(inter, NULL, NULL, NULL);
|
|
|
|
+ tmp->type = pass_;
|
|
return tmp;
|
|
return tmp;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -194,11 +212,10 @@ void setResult(Result *ru, Inter *inter, LinkValue *father) {
|
|
|
|
|
|
void setResultBase(Result *ru, Inter *inter, LinkValue *father) {
|
|
void setResultBase(Result *ru, Inter *inter, LinkValue *father) {
|
|
setResultCore(ru);
|
|
setResultCore(ru);
|
|
- ru->value = makeLinkValue(inter->base, father, inter);
|
|
|
|
|
|
+ ru->value = makeLinkValue(makeNoneValue(inter), father, inter);
|
|
gc_addTmpLink(&ru->value->gc_status);
|
|
gc_addTmpLink(&ru->value->gc_status);
|
|
}
|
|
}
|
|
|
|
|
|
-// TODO-szh findUseage调整为 setResultError
|
|
|
|
void setResultErrorSt(Result *ru, Inter *inter, char *error_type, char *error_message, Statement *st, LinkValue *father, bool new) {
|
|
void setResultErrorSt(Result *ru, Inter *inter, char *error_type, char *error_message, Statement *st, LinkValue *father, bool new) {
|
|
setResultError(ru, inter, error_type, error_message, st->line, st->code_file, father, new);
|
|
setResultError(ru, inter, error_type, error_message, st->line, st->code_file, father, new);
|
|
}
|
|
}
|
|
@@ -299,6 +316,15 @@ void printValue(Value *value, FILE *debug){
|
|
case object_:
|
|
case object_:
|
|
fprintf(debug, "object on <%p>", value);
|
|
fprintf(debug, "object on <%p>", value);
|
|
break;
|
|
break;
|
|
|
|
+ case bool_:
|
|
|
|
+ if (value->data.bool_.bool_)
|
|
|
|
+ fprintf(debug, "true");
|
|
|
|
+ else
|
|
|
|
+ fprintf(debug, "false");
|
|
|
|
+ break;
|
|
|
|
+ case pass_:
|
|
|
|
+ fprintf(debug, "...");
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
fprintf(debug, "default on <%p>", value);
|
|
fprintf(debug, "default on <%p>", value);
|
|
break;
|
|
break;
|