فهرست منبع

Better comments on output

mingodad 7 سال پیش
والد
کامیت
13ef55b18d
1فایلهای تغییر یافته به همراه77 افزوده شده و 55 حذف شده
  1. 77 55
      SquiLu/squirrel/sqobject.cpp

+ 77 - 55
SquiLu/squirrel/sqobject.cpp

@@ -702,9 +702,9 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 	}
     SafeWriteFmt(v,write,up,"\t],\n");
 
-	SafeWriteFmt(v,write,up,"\tlocalvarinfos = [\n\t\t//[pos, name, start_op, end_op, scope, type],\n");
+	SafeWriteFmt(v,write,up,"\tlocalvarinfos = [\n\t\t//[pos, name, start_op, end_op, scope, type, type_name, dtype_name],\n");
 	for(i=0;i<nlocalvarinfos;i++){
-	    SQLocalVarInfo &lvi=_localvarinfos[i];
+	    SQLocalVarInfo &lvi=_localvarinfos[nlocalvarinfos-1-i];
 		SafeWriteFmt(v,write,up,"\t\t/*%d*/ [", i);
 		SafeWriteFmt(v,write,up,"%d, ", lvi._pos);
 		_CHECK_IO(WriteObjectAsCode(v,up,write,lvi._name));
@@ -712,14 +712,15 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
 		SafeWriteFmt(v,write,up,", %d", lvi._end_op);
 		SafeWriteFmt(v,write,up,", %d", lvi._scope);
 		const char* type_name = (sq_type(lvi._type_name) == OT_STRING) ? _stringval(lvi._type_name) : "";
-		SafeWriteFmt(v,write,up,", %d], //%s : %s\n", lvi._type, SQGetVarTypeName(lvi._type), type_name);
+		SafeWriteFmt(v,write,up,", %d, \"%s\", \"%s\"],\n", lvi._type, SQGetVarTypeName(lvi._type), type_name);
 	}
     SafeWriteFmt(v,write,up,"\t],\n");
 
 	SafeWriteFmt(v,write,up,"\tlineinfos = [\n\t\t//[op, line],\n");
 	for(i=0;i<nlineinfos;i++){
 	    SQLineInfo &li=_lineinfos[i];
-		SafeWriteFmt(v,write,up,"\t\t/*%d*/ [%d, %d], /*%s*/\n", i, li._op, li._line, SQGetOpName(li._op));
+		SafeWriteFmt(v,write,up,"\t\t/*%d*/ [%d, %d], /*%s*/\n", i, li._op, li._line,
+            SQGetOpName(_instructions[li._op].op));
 	}
     SafeWriteFmt(v,write,up,"\t],\n");
 
@@ -745,7 +746,8 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
                 if(lidx >= 0xFFFFFFFF) SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- null */", inst._arg0);
                 else
                 {
-                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- literals[%d] */", inst._arg0, lidx);
+                    const SQChar *str_name = sq_isstring(_literals[lidx]) ? _stringval(_literals[lidx]) : "?";
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- literals[%d](\"%s\") */", inst._arg0, lidx, str_name);
                     //_CHECK_IO(WriteObjectAsCode(v,up,write,_literals[lidx], false));
                     //SafeWriteFmt(v,write,up," */");
                 }
@@ -762,118 +764,138 @@ bool SQFunctionProto::SaveAsSource(SQVM *v,SQUserPointer up,SQWRITEFUNC write)
             break;
             case _OP_GET:
                     SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] = stk_at_arg1[%d].get(stk_at_arg2(%d)) */",
-                                 inst._arg0, inst._arg1, inst._arg2);
+                                inst._arg0, inst._arg1, inst._arg2);
             break;
             case _OP_SET:
                     SafeWriteFmt(v,write,up,"\t/* stk_at_arg1[%d].set(stk_at_arg2(%d), stk_at_arg3(%d)) */",
-                                 inst._arg1, inst._arg2, inst._arg3);
+                                inst._arg1, inst._arg2, inst._arg3);
             break;
             case _OP_PREPCALLK:
             case _OP_PREPCALL:
                     SafeWriteFmt(v,write,up,"\t/* closure_at_stk[%d], stk[%d].get(%s[%d]) -> stk[%d] */",
-                                 inst._arg0, inst._arg2, inst.op == _OP_PREPCALLK ? "literals" : "stk", inst._arg1, inst._arg3);
+                                inst._arg0, inst._arg2, inst.op == _OP_PREPCALLK ? "literals" : "stk", inst._arg1, inst._arg3);
             break;
             case _OP_LOADFLOAT:
                     SafeWriteFmt(v,write,up,"\t/* %f */", *((SQFloat32*)&inst._arg1));
             break;
             case _OP_GETOUTER:
-                        SafeWriteFmt(v,write,up,"\t/* stk[%d] <- outervalues[%d] == (%s) */",
-                                     inst._arg0, inst._arg1, _stringval(_outervalues[inst._arg1]._name));
+                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- outervalues[%d] == (%s) */",
+                                inst._arg0, inst._arg1, _stringval(_outervalues[inst._arg1]._name));
             break;
             case _OP_CALL:
-                        SafeWriteFmt(v,write,up,"\t\t/* target[%d], closure_at_stk[%d], stackbase(%d), nargs(%d) */",
-                                     inst._arg0, inst._arg1, inst._arg2, inst._arg3);
+            {
+                    SQLocalVarInfo &lvi=_localvarinfos[nlocalvarinfos-1-inst._arg1];
+                    const SQChar *str_name =  sq_isstring(lvi._name) ? _stringval(lvi._name) : "?";
+                    SafeWriteFmt(v,write,up,"\t\t/* target[%d], lvi[%d](\"%s\"), stackbase(%d), nargs(%d) */",
+                                inst._arg0, inst._arg1, str_name, inst._arg2, inst._arg3);
+            }
             break;
             case _OP_MOVE:
-                        SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- stk[%d] */", inst._arg0, inst._arg1);
+            {
+                    SQLocalVarInfo &lvi=_localvarinfos[nlocalvarinfos-1-inst._arg1];
+                    const SQChar *str_name =  sq_isstring(lvi._name) ? _stringval(lvi._name) : "?";
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] <- lvi[%d](\"%s\") */", inst._arg0, inst._arg1, str_name);
+            }
             break;
             case _OP_DMOVE:
-                        SafeWriteFmt(v,write,up,"\t/* stk[%d] <- stk[%d], stk[%d] <- stk[%d] */",
-                                     inst._arg0, inst._arg1, inst._arg2, inst._arg3);
+            {
+                    SQLocalVarInfo &lvi1=_localvarinfos[nlocalvarinfos-1-inst._arg1];
+                    const SQChar *str_name1 =  sq_isstring(lvi1._name) ? _stringval(lvi1._name) : "?";
+                    SQLocalVarInfo &lvi2=_localvarinfos[nlocalvarinfos-1-inst._arg3];
+                    const SQChar *str_name2 =  sq_isstring(lvi2._name) ? _stringval(lvi2._name) : "?";
+                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- lvi[%d](\"%s\"), stk[%d] <- lvi[%d](\"%s\") */",
+                                inst._arg0, inst._arg1, str_name1, inst._arg2, inst._arg3, str_name2);
+            }
             break;
             case _OP_LOADINT:
-                        SafeWriteFmt(v,write,up,"\t/* stk[%d] <- arg1(%d) */", inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- arg1(%d) */", inst._arg0, inst._arg1);
             break;
             case _OP_EQ:
-                        SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[%d] = stk_at_arg2[%d] == (arg3(%d) !=0 ? literals_at_arg1[%d] : stk_at_arg1[%d]) */",
-                                     inst._arg0, inst._arg2, inst._arg3, inst._arg1, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[%d] = stk_at_arg2[%d] == (arg3(%d) !=0 ? literals_at_arg1[%d] : stk_at_arg1[%d]) */",
+                                inst._arg0, inst._arg2, inst._arg3, inst._arg1, inst._arg1);
             break;
             case _OP_NOT:
-                        SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[%d] = IsFalse(stk_at_arg1[%d]) */",
-                                     inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk_at_arg0[%d] = IsFalse(stk_at_arg1[%d]) */",
+                                inst._arg0, inst._arg1);
             break;
             case _OP_AND:
             case _OP_OR:
-                        SafeWriteFmt(v,write,up,"\t\t/* %s(stk_at_arg2[%d]) {stk_at_arg0[%d] = stk[%d]; goto[%d]} */",
-                                     ((inst.op == _OP_OR) ? "IsTrue" : "IsFalse"),
-                                     inst._arg2, inst._arg0, inst._arg2, i + inst._arg1 + 1);
+                    SafeWriteFmt(v,write,up,"\t\t/* %s(stk_at_arg2[%d]) {stk_at_arg0[%d] = stk[%d]; goto[%d]} */",
+                                ((inst.op == _OP_OR) ? "IsTrue" : "IsFalse"),
+                                inst._arg2, inst._arg0, inst._arg2, i + inst._arg1 + 1);
             break;
             case _OP_JZ:
-                        SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(%d) (ci->_ip+=(%d) -> goto[%d]) */",
-                                     inst._arg0, inst._arg1, i + inst._arg1 + 1);
+                    SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(%d) (ci->_ip+=(%d) -> goto[%d]) */",
+                                inst._arg0, inst._arg1, i + inst._arg1 + 1);
             break;
             case _OP_JCMP:
-                        SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(%d) %s STK(%d)) (ci->_ip+=(%d) -> goto[%d]) */",
-                                     inst._arg2, SQGetCmpOpName(inst._arg3), inst._arg0, inst._arg1, i + inst._arg1 + 1);
+                    SafeWriteFmt(v,write,up,"\t\t/* IsFalse(STK(%d) %s STK(%d)) (ci->_ip+=(%d) -> goto[%d]) */",
+                                inst._arg2, SQGetCmpOpName(inst._arg3), inst._arg0, inst._arg1, i + inst._arg1 + 1);
             break;
             case _OP_JMP:
-                        SafeWriteFmt(v,write,up,"\t\t/* (ci->_ip+=(%d)) -> goto[%d] */",
-                                     inst._arg1, i + inst._arg1 + 1);
+                    SafeWriteFmt(v,write,up,"\t\t/* (ci->_ip+=(%d)) -> goto[%d] */",
+                                inst._arg1, i + inst._arg1 + 1);
             break;
             case _OP_RETURN:
-                        SafeWriteFmt(v,write,up,"\t/* _arg0(%d) != 255 ? stk[%d] : null */",
-                                     inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t/* _arg0(%d) != 255 ? stk[%d] : null */",
+                                inst._arg0, inst._arg1);
             break;
             case _OP_NEWOBJ:
-                        SafeWriteFmt(v,write,up,"\t/* stk[%d], len(%d), %s(%d) */",
-                                     inst._arg0, inst._arg1, SQGetNewObjTypeName(inst._arg3), inst._arg3);
+                    SafeWriteFmt(v,write,up,"\t/* stk[%d], len(%d), %s(%d) */",
+                                inst._arg0, inst._arg1, SQGetNewObjTypeName(inst._arg3), inst._arg3);
             break;
             case _OP_APPENDARRAY:
-                        SafeWriteFmt(v,write,up,"\t/* array_at_stk(%d), %s(%d), sq_type(%d) */",
-                                     inst._arg0, SQGetArrayAppendTypeName(inst._arg2), inst._arg1, inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t/* array_at_stk(%d), %s(%d), sq_type(%d) */",
+                                inst._arg0, SQGetArrayAppendTypeName(inst._arg2), inst._arg1, inst._arg2);
             break;
             case _OP_NEWSLOT:
             case _OP_NEWSLOTA:
-                        SafeWriteFmt(v,write,up,"\t/* flags(%d), table_at_stk(%d),  key_at_stk(%d), val_at_stk(%d) */",
-                                     inst._arg0, inst._arg1, inst._arg2, inst._arg3);
+                    SafeWriteFmt(v,write,up,"\t/* flags(%d), table_at_stk(%d),  key_at_stk(%d), val_at_stk(%d) */",
+                                inst._arg0, inst._arg1, inst._arg2, inst._arg3);
             break;
             case _OP_LOADBOOL:
-                        SafeWriteFmt(v,write,up,"\t/* stk[%d] <- bool(%d) */",
-                                     inst._arg0, inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t/* stk[%d] <- bool(%d) */",
+                                inst._arg0, inst._arg2);
             break;
             case _OP_LOADNULLS:
-                        SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d .. (arg0 + arg1(%d))] = null */",
-                                     inst._arg0, inst._arg1);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d .. (arg0 + arg1(%d))] = null */",
+                                inst._arg0, inst._arg1);
             break;
             case _OP_LOADROOT:
-                        SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] <- roottable */",
-                                     inst._arg0);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] <- roottable */",
+                                inst._arg0);
             break;
             case _OP_CLOSURE:
-                        SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] <- functions[%d] == (",
-                                     inst._arg0, inst._arg1);
-                        _CHECK_IO(WriteObjectAsCode(v,up,write,_funcproto(_functions[inst._arg1])->_name));
-                        SafeWriteFmt(v,write,up,"), isLanbda(%d) */", inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t/* stk_at_arg0[%d] <- functions[%d](",
+                                inst._arg0, inst._arg1);
+                    _CHECK_IO(WriteObjectAsCode(v,up,write,_funcproto(_functions[inst._arg1])->_name));
+                    SafeWriteFmt(v,write,up,"), isLanbda(%d) */", inst._arg2);
             break;
             case _OP_ADD:
             case _OP_SUB:
             case _OP_DIV:
             case _OP_MUL:
             case _OP_MOD:
-                        SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d] %s stk[%d] */",
-                                     inst._arg0, inst._arg1, SQGetArithOpName(inst.op), inst._arg2);
+            {
+                    SQLocalVarInfo &lvi1=_localvarinfos[nlocalvarinfos-1-inst._arg1];
+                    const SQChar *str_name1 =  sq_isstring(lvi1._name) ? _stringval(lvi1._name) : "?";
+                    SQLocalVarInfo &lvi2=_localvarinfos[nlocalvarinfos-1-inst._arg2];
+                    const SQChar *str_name2 =  sq_isstring(lvi2._name) ? _stringval(lvi2._name) : "?";
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d](\"%s\") %s stk[%d](\"%s\") */",
+                                inst._arg0, inst._arg1, str_name1, SQGetArithOpName(inst.op), inst._arg2, str_name2);
+            }
             break;
             case _OP_INCL:
-                        SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d] + sarg3(%d) */",
-                                     inst._arg1, inst._arg1, ((char)inst._arg3));
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d] + sarg3(%d) */",
+                                inst._arg1, inst._arg1, ((char)inst._arg3));
             break;
             case _OP_PINCL:
-                        SafeWriteFmt(v,write,up,"\t\t/* target = stk(%d); stk[%d] = stk[%d] + sarg3(%d) */",
-                                     inst._arg1, inst._arg1, inst._arg1, ((char)inst._arg3));
+                    SafeWriteFmt(v,write,up,"\t\t/* target = stk(%d); stk[%d] = stk[%d] + sarg3(%d) */",
+                                inst._arg1, inst._arg1, inst._arg1, ((char)inst._arg3));
             break;
             case _OP_BITW:
-                        SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d] %s stk[%d] */",
-                                     inst._arg0, inst._arg1, SQGetBitwiseOpName(inst._arg3), inst._arg2);
+                    SafeWriteFmt(v,write,up,"\t\t/* stk[%d] = stk[%d] %s stk[%d] */",
+                                inst._arg0, inst._arg1, SQGetBitwiseOpName(inst._arg3), inst._arg2);
             break;
             //default:
         }