1
1
Fork 0
mirror of https://github.com/boxgaming/qbjs.git synced 2024-05-12 08:00:12 +00:00

Added support for new QB64 way of defining multiple variables of the same type on a line (#56)

This commit is contained in:
boxgaming 2024-01-16 14:34:39 -06:00
parent 708d5b02c4
commit 056bc141d1
2 changed files with 172 additions and 61 deletions

161
qb2js.js
View file

@ -278,14 +278,7 @@ if (QB.halted()) { return; }; firstLine = Math.round(firstLine); lastLine = Math
typeMode = False;
}
} else {
var tvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
tvar.typeId = currType;
tvar.name = QB.arrayValue(parts, [ 1]).value;
tvar.type = (QB.func_UCase( QB.arrayValue(parts, [ 3]).value));
if ( tvar.type == "_UNSIGNED" || tvar.type == "UNSIGNED" ) {
tvar.type = "_UNSIGNED " + (QB.func_UCase( QB.arrayValue(parts, [ 4]).value));
}
await sub_AddVariable( tvar, typeVars);
await sub_DeclareTypeVar( parts , currType, i);
}
} else {
if ( first == "CONST" ) {
@ -1441,6 +1434,66 @@ var FindParamChar = null;
FindParamChar = idx;
return FindParamChar;
}
async function sub_DeclareTypeVar(parts/*STRING*/,typeId/*INTEGER*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var vname = ''; /* STRING */
var vtype = ''; /* STRING */
vtype = "";
var vtypeIndex = 0; /* INTEGER */
vtypeIndex = 4;
var isGlobal = 0; /* INTEGER */
isGlobal = False;
var isArray = 0; /* INTEGER */
isArray = False;
var isStatic = 0; /* INTEGER */
isStatic = False;
var arraySize = ''; /* STRING */
var pstart = 0; /* INTEGER */
var bvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
var varnames = QB.initArray([{l:0,u:0}], ''); /* STRING */
var vnamecount = 0; /* INTEGER */
var findVar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
var asIdx = 0; /* INTEGER */
asIdx = 0;
bvar.typeId = typeId;
var i = 0; /* INTEGER */
var ___v2981654 = 0; for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v2981654++; if (___v2981654 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "AS" ) {
asIdx = i;
}
}
if ( asIdx == 1) {
bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 1]).value));
var nextIdx = 0; /* INTEGER */
nextIdx = asIdx + 2;
if ( bvar.type == "_UNSIGNED" || bvar.type == "UNSIGNED" ) {
bvar.type = (await func_NormalizeType( "_UNSIGNED " + (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 2]).value))));
nextIdx = asIdx + 3;
}
vnamecount = (await func_ListSplit( (await func_Join( parts , nextIdx, - 1, " ")) , varnames));
var ___v6226967 = 0; for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v6226967++; if (___v6226967 % 100 == 0) { await QB.autoLimit(); }
vname = (QB.func__Trim( QB.arrayValue(varnames, [ i]).value));
pstart = (QB.func_InStr( vname, "("));
if ( pstart > 0) {
bvar.isArray = True;
arraySize = (await func_ConvertExpression( (QB.func_Mid( vname, pstart + 1, (QB.func_Len( vname)) - pstart - 1)) , lineNumber));
bvar.name = (await func_RemoveSuffix( (QB.func_Left( vname, pstart - 1))));
} else {
bvar.isArray = False;
arraySize = "";
bvar.name = vname;
}
await sub_AddVariable( bvar, typeVars);
}
} else {
bvar.name = QB.arrayValue(parts, [ 1]).value;
bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ 3]).value));
if ( bvar.type == "_UNSIGNED" || bvar.type == "UNSIGNED" ) {
bvar.type = (await func_NormalizeType( "_UNSIGNED " + (QB.func_UCase( QB.arrayValue(parts, [ 4]).value))));
}
await sub_AddVariable( bvar, typeVars);
}
}
async function func_DeclareVar(parts/*STRING*/,lineNumber/*INTEGER*/) {
if (QB.halted()) { return; };
var DeclareVar = null;
@ -1485,7 +1538,7 @@ var DeclareVar = null;
return DeclareVar;
}
var i = 0; /* INTEGER */
var ___v2981654 = 0; for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v2981654++; if (___v2981654 % 100 == 0) { await QB.autoLimit(); }
var ___v6478212 = 0; for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v6478212++; if (___v6478212 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "AS" ) {
asIdx = i;
}
@ -1500,13 +1553,13 @@ var DeclareVar = null;
bvar.type = (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 1]).value));
var nextIdx = 0; /* INTEGER */
nextIdx = asIdx + 2;
if ( bvar.type == "_UNSIGNED" ) {
if ( bvar.type == "_UNSIGNED" || bvar.type == "UNSIGNED" ) {
bvar.type = bvar.type + " " + (QB.func_UCase( QB.arrayValue(parts, [ asIdx + 2]).value));
nextIdx = asIdx + 3;
}
bvar.typeId = (await func_FindTypeId( bvar.type));
vnamecount = (await func_ListSplit( (await func_Join( parts , nextIdx, - 1, " ")) , varnames));
var ___v6226967 = 0; for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v6226967++; if (___v6226967 % 100 == 0) { await QB.autoLimit(); }
var ___v2637929 = 0; for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v2637929++; if (___v2637929 % 100 == 0) { await QB.autoLimit(); }
vname = (QB.func__Trim( QB.arrayValue(varnames, [ i]).value));
pstart = (QB.func_InStr( vname, "("));
if ( pstart > 0) {
@ -1524,7 +1577,7 @@ var DeclareVar = null;
var vpartcount = 0; /* INTEGER */
var vparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
nextIdx = 0;
var ___v6478212 = 0; for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v6478212++; if (___v6478212 % 100 == 0) { await QB.autoLimit(); }
var ___v2793420 = 0; for ( i= 1; i <= (QB.func_UBound( parts)); i= i + 1) { if (QB.halted()) { return; } ___v2793420++; if (___v2793420 % 100 == 0) { await QB.autoLimit(); }
var p = ''; /* STRING */
p = (QB.func_UCase( QB.arrayValue(parts, [ i]).value));
if ( p == "DIM" || p == "REDIM" || p == "SHARED" || p == "_PRESERVE" || p == "PRESERVE" || p == "STATIC" ) {
@ -1532,7 +1585,7 @@ var DeclareVar = null;
}
}
vnamecount = (await func_ListSplit( (await func_Join( parts , nextIdx, - 1, " ")) , varnames));
var ___v2637929 = 0; for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v2637929++; if (___v2637929 % 100 == 0) { await QB.autoLimit(); }
var ___v8298016 = 0; for ( i= 1; i <= vnamecount; i= i + 1) { if (QB.halted()) { return; } ___v8298016++; if (___v8298016 % 100 == 0) { await QB.autoLimit(); }
vpartcount = (await func_SLSplit2( QB.arrayValue(varnames, [ i]).value , vparts));
if ( vpartcount == 1) {
bvar.type = (await func_DataTypeFromName( QB.arrayValue(vparts, [ 1]).value));
@ -1602,7 +1655,7 @@ var FormatArraySize = null;
var pcount = 0; /* INTEGER */
pcount = (await func_ListSplit( sizeString, parts));
var i = 0; /* INTEGER */
var ___v2793420 = 0; for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v2793420++; if (___v2793420 % 100 == 0) { await QB.autoLimit(); }
var ___v8246022 = 0; for ( i= 1; i <= pcount; i= i + 1) { if (QB.halted()) { return; } ___v8246022++; if (___v8246022 % 100 == 0) { await QB.autoLimit(); }
var subparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var scount = 0; /* INTEGER */
scount = (await func_SLSplit2( QB.arrayValue(parts, [ i]).value , subparts));
@ -1611,7 +1664,7 @@ var FormatArraySize = null;
}
var j = 0; /* INTEGER */ var toIndex = 0; /* INTEGER */
toIndex = 0;
var ___v8298016 = 0; for ( j= 0; j <= scount; j= j + 1) { if (QB.halted()) { return; } ___v8298016++; if (___v8298016 % 100 == 0) { await QB.autoLimit(); }
var ___v5891630 = 0; for ( j= 0; j <= scount; j= j + 1) { if (QB.halted()) { return; } ___v5891630++; if (___v5891630 % 100 == 0) { await QB.autoLimit(); }
if ("TO" == (QB.func_UCase( QB.arrayValue(subparts, [ j]).value)) ) {
toIndex = j;
break;
@ -1644,7 +1697,7 @@ var InitTypeValue = null;
var typeId = 0; /* INTEGER */
typeId = (await func_FindTypeId( vtype));
var i = 0; /* INTEGER */
var ___v8246022 = 0; for ( i= 1; i <= (QB.func_UBound( typeVars)); i= i + 1) { if (QB.halted()) { return; } ___v8246022++; if (___v8246022 % 100 == 0) { await QB.autoLimit(); }
var ___v9860932 = 0; for ( i= 1; i <= (QB.func_UBound( typeVars)); i= i + 1) { if (QB.halted()) { return; } ___v9860932++; if (___v9860932 % 100 == 0) { await QB.autoLimit(); }
if ( typeId == QB.arrayValue(typeVars, [ i]).value .typeId) {
value = value + QB.arrayValue(typeVars, [ i]).value .name + ":" + (await func_InitTypeValue( QB.arrayValue(typeVars, [ i]).value .type)) + ",";
}
@ -1660,7 +1713,7 @@ var FindTypeId = null;
var id = 0; /* INTEGER */
id = - 1;
var i = 0; /* INTEGER */
var ___v5891630 = 0; for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } ___v5891630++; if (___v5891630 % 100 == 0) { await QB.autoLimit(); }
var ___v9109643 = 0; for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } ___v9109643++; if (___v9109643 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(types, [ i]).value .name == typeName) {
id = i;
break;
@ -1682,7 +1735,7 @@ var ConvertExpression = null;
var stringLiteral = 0; /* INTEGER */
var i = 0; /* INTEGER */
i = 1;
var ___v9860932 = 0; while ( i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }___v9860932++; if (___v9860932 % 100 == 0) { await QB.autoLimit(); }
var ___v2268660 = 0; while ( i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }___v2268660++; if (___v2268660 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( ex, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
js = js + c;
@ -1746,7 +1799,7 @@ var ConvertExpression = null;
var stringLiteral2 = 0; /* INTEGER */
stringLiteral2 = False;
i = i + 1;
var ___v9109643 = 0; while (! done && i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }___v9109643++; if (___v9109643 % 100 == 0) { await QB.autoLimit(); }
var ___v6951155 = 0; while (! done && i <= (QB.func_Len( ex))) { if (QB.halted()) { return; }___v6951155++; if (___v6951155 % 100 == 0) { await QB.autoLimit(); }
c2 = (QB.func_Mid( ex, i, 1));
if ( c2 == (QB.func_Chr( 34)) ) {
stringLiteral2 = ! stringLiteral2;
@ -1804,7 +1857,7 @@ var ConvertMethodParams = null;
var argc = 0; /* INTEGER */
argc = (await func_ListSplit( args, params));
var i = 0; /* INTEGER */
var ___v2268660 = 0; for ( i= 1; i <= argc; i= i + 1) { if (QB.halted()) { return; } ___v2268660++; if (___v2268660 % 100 == 0) { await QB.autoLimit(); }
var ___v9800032 = 0; for ( i= 1; i <= argc; i= i + 1) { if (QB.halted()) { return; } ___v9800032++; if (___v9800032 % 100 == 0) { await QB.autoLimit(); }
if ( i > 1) {
js = js + ",";
}
@ -1836,7 +1889,7 @@ var FindVariable = null;
var i = 0; /* INTEGER */
var fvarname = ''; /* STRING */
fvarname = (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( varname))))));
var ___v6951155 = 0; for ( i= 1; i <= (QB.func_UBound( localVars)); i= i + 1) { if (QB.halted()) { return; } ___v6951155++; if (___v6951155 % 100 == 0) { await QB.autoLimit(); }
var ___v2439314 = 0; for ( i= 1; i <= (QB.func_UBound( localVars)); i= i + 1) { if (QB.halted()) { return; } ___v2439314++; if (___v2439314 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(localVars, [ i]).value .isArray == isArray && (QB.func_UCase( QB.arrayValue(localVars, [ i]).value .name)) == fvarname) {
found = True;
bvar.type = QB.arrayValue(localVars, [ i]).value .type;
@ -1850,7 +1903,7 @@ var FindVariable = null;
}
}
if (! found) {
var ___v9800032 = 0; for ( i= 1; i <= (QB.func_UBound( globalVars)); i= i + 1) { if (QB.halted()) { return; } ___v9800032++; if (___v9800032 % 100 == 0) { await QB.autoLimit(); }
var ___v5338731 = 0; for ( i= 1; i <= (QB.func_UBound( globalVars)); i= i + 1) { if (QB.halted()) { return; } ___v5338731++; if (___v5338731 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(globalVars, [ i]).value .isArray == isArray && (QB.func_UCase( QB.arrayValue(globalVars, [ i]).value .name)) == fvarname) {
found = True;
bvar.type = QB.arrayValue(globalVars, [ i]).value .type;
@ -1873,7 +1926,7 @@ var FindMethod = null;
var found = 0; /* INTEGER */
found = False;
var i = 0; /* INTEGER */
var ___v2439314 = 0; for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v2439314++; if (___v2439314 % 100 == 0) { await QB.autoLimit(); }
var ___v1063697 = 0; for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v1063697++; if (___v1063697 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(methods, [ i]).value .uname == (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( mname)))))) && QB.arrayValue(methods, [ i]).value .type == t) {
found = True;
m.line = QB.arrayValue(methods, [ i]).value .line;
@ -1889,7 +1942,7 @@ var FindMethod = null;
}
}
if (! found) {
var ___v5338731 = 0; for ( i= 1; i <= (QB.func_UBound( exportMethods)); i= i + 1) { if (QB.halted()) { return; } ___v5338731++; if (___v5338731 % 100 == 0) { await QB.autoLimit(); }
var ___v9994146 = 0; for ( i= 1; i <= (QB.func_UBound( exportMethods)); i= i + 1) { if (QB.halted()) { return; } ___v9994146++; if (___v9994146 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(exportMethods, [ i]).value .uname == (QB.func__Trim( (QB.func_UCase( (await func_RemoveSuffix( mname)))))) && QB.arrayValue(exportMethods, [ i]).value .type == t) {
found = True;
m.line = QB.arrayValue(exportMethods, [ i]).value .line;
@ -1912,7 +1965,7 @@ async function sub_ConvertMethods() {
if (QB.halted()) { return; };
await sub_AddJSLine( 0, "");
var i = 0; /* INTEGER */
var ___v1063697 = 0; for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v1063697++; if (___v1063697 % 100 == 0) { await QB.autoLimit(); }
var ___v6761759 = 0; for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v6761759++; if (___v6761759 % 100 == 0) { await QB.autoLimit(); }
if ((QB.arrayValue(methods, [ i]).value .line != 0) ) {
var lastLine = 0; /* INTEGER */
lastLine = QB.arrayValue(methods, [ i + 1]).value .line - 1;
@ -1929,7 +1982,7 @@ if (QB.halted()) { return; };
var c = 0; /* INTEGER */
c = (await func_Split( QB.arrayValue(methods, [ i]).value .args, "," , args));
var a = 0; /* INTEGER */
var ___v9994146 = 0; for ( a= 1; a <= c; a= a + 1) { if (QB.halted()) { return; } ___v9994146++; if (___v9994146 % 100 == 0) { await QB.autoLimit(); }
var ___v157039 = 0; for ( a= 1; a <= c; a= a + 1) { if (QB.halted()) { return; } ___v157039++; if (___v157039 % 100 == 0) { await QB.autoLimit(); }
var v = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
v = (await func_Split( QB.arrayValue(args, [ a]).value , ":" , parts));
@ -1972,7 +2025,7 @@ if (QB.halted()) { return; };
await sub_AddJSLine( lastLine, "}");
}
}
var ___v6761759 = 0; for ( i= 1; i <= (QB.func_UBound( exportLines)); i= i + 1) { if (QB.halted()) { return; } ___v6761759++; if (___v6761759 % 100 == 0) { await QB.autoLimit(); }
var ___v5751838 = 0; for ( i= 1; i <= (QB.func_UBound( exportLines)); i= i + 1) { if (QB.halted()) { return; } ___v5751838++; if (___v5751838 % 100 == 0) { await QB.autoLimit(); }
await sub_AddJSLine( i, QB.arrayValue(exportLines, [ i]).value);
}
QB.resizeArray(exportLines, [{l:0,u:0}], '', false); /* STRING */
@ -1983,13 +2036,13 @@ if (QB.halted()) { return; };
var lineIndex = 0; /* INTEGER */
var rawJS = 0; /* SINGLE */
QB.sub_Open(filename, QB.INPUT, 1);
var ___v157039 = 0; while (!((QB.func_EOF( 1)))) { if (QB.halted()) { return; }___v157039++; if (___v157039 % 100 == 0) { await QB.autoLimit(); }
var ___v5751838 = new Array(1); await QB.sub_LineInputFromFile(1, ___v5751838); fline = ___v5751838[0];
var ___v1000522 = 0; while (!((QB.func_EOF( 1)))) { if (QB.halted()) { return; }___v1000522++; if (___v1000522 % 100 == 0) { await QB.autoLimit(); }
var ___v1030226 = new Array(1); await QB.sub_LineInputFromFile(1, ___v1030226); fline = ___v1030226[0];
lineIndex = lineIndex + 1;
if ((QB.func__Trim( fline)) != "" ) {
var ___v1000522 = 0; while ((await func_EndsWith( fline, " _"))) { if (QB.halted()) { return; }___v1000522++; if (___v1000522 % 100 == 0) { await QB.autoLimit(); }
var ___v7988844 = 0; while ((await func_EndsWith( fline, " _"))) { if (QB.halted()) { return; }___v7988844++; if (___v7988844 % 100 == 0) { await QB.autoLimit(); }
var nextLine = ''; /* STRING */
var ___v1030226 = new Array(1); await QB.sub_LineInputFromFile(1, ___v1030226); nextLine = ___v1030226[0];
var ___v2844803 = new Array(1); await QB.sub_LineInputFromFile(1, ___v2844803); nextLine = ___v2844803[0];
fline = (QB.func_Left( fline, (QB.func_Len( fline)) - 1)) + nextLine;
}
rawJS = (await func_ReadLine( lineIndex, fline, rawJS));
@ -2004,7 +2057,7 @@ if (QB.halted()) { return; };
var lcount = 0; /* INTEGER */
var i = 0; /* INTEGER */
lcount = (await func_Split( sourceText, await func_LF(), sourceLines));
var ___v7988844 = 0; for ( i= 1; i <= lcount; i= i + 1) { if (QB.halted()) { return; } ___v7988844++; if (___v7988844 % 100 == 0) { await QB.autoLimit(); }
var ___v456492 = 0; for ( i= 1; i <= lcount; i= i + 1) { if (QB.halted()) { return; } ___v456492++; if (___v456492 % 100 == 0) { await QB.autoLimit(); }
var fline = ''; /* STRING */
fline = QB.arrayValue(sourceLines, [ i]).value;
if ((QB.func__Trim( fline)) != "" ) {
@ -2028,7 +2081,7 @@ if (QB.halted()) { return; };
continue;
}
}
var ___v2844803 = 0; while ((await func_EndsWith( fline, "_"))) { if (QB.halted()) { return; }___v2844803++; if (___v2844803 % 100 == 0) { await QB.autoLimit(); }
var ___v2957728 = 0; while ((await func_EndsWith( fline, "_"))) { if (QB.halted()) { return; }___v2957728++; if (___v2957728 % 100 == 0) { await QB.autoLimit(); }
i = i + 1;
var nextLine = ''; /* STRING */
nextLine = QB.arrayValue(sourceLines, [ i]).value;
@ -2044,7 +2097,7 @@ var ReadLine = null;
var quoteDepth = 0; /* INTEGER */
quoteDepth = 0;
var i = 0; /* INTEGER */
var ___v456492 = 0; for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } ___v456492++; if (___v456492 % 100 == 0) { await QB.autoLimit(); }
var ___v3820107 = 0; for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } ___v3820107++; if (___v3820107 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */ var c4 = ''; /* STRING */
c = (QB.func_Mid( fline, i, 1));
c4 = (QB.func_UCase( (QB.func_Mid( fline, i, 4))));
@ -2104,7 +2157,7 @@ var ReadLine = null;
var dcount = 0; /* INTEGER */
var de = QB.initArray([{l:0,u:0}], ''); /* STRING */
dcount = (await func_ListSplit( dstr, de));
var ___v2957728 = 0; for ( i= 1; i <= dcount; i= i + 1) { if (QB.halted()) { return; } ___v2957728++; if (___v2957728 % 100 == 0) { await QB.autoLimit(); }
var ___v3009705 = 0; for ( i= 1; i <= dcount; i= i + 1) { if (QB.halted()) { return; } ___v3009705++; if (___v3009705 % 100 == 0) { await QB.autoLimit(); }
index = (QB.func_UBound( dataArray)) + 1;
QB.resizeArray(dataArray, [{l:0,u:index}], '', true); /* STRING */
QB.arrayValue(dataArray, [ index]).value = QB.arrayValue(de, [ i]).value;
@ -2112,7 +2165,7 @@ var ReadLine = null;
return ReadLine;
}
var ifIdx = 0; /* INTEGER */ var thenIdx = 0; /* INTEGER */ var elseIdx = 0; /* INTEGER */
var ___v3820107 = 0; for ( i= 1; i <= wcount; i= i + 1) { if (QB.halted()) { return; } ___v3820107++; if (___v3820107 % 100 == 0) { await QB.autoLimit(); }
var ___v9485711 = 0; for ( i= 1; i <= wcount; i= i + 1) { if (QB.halted()) { return; } ___v9485711++; if (___v9485711 % 100 == 0) { await QB.autoLimit(); }
word = (QB.func_UCase( QB.arrayValue(words, [ i]).value));
if ( word == "IF" ) {
ifIdx = i;
@ -2147,7 +2200,7 @@ if (QB.halted()) { return; };
var quoteDepth = 0; /* INTEGER */
quoteDepth = 0;
var i = 0; /* INTEGER */
var ___v3009705 = 0; for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } ___v3009705++; if (___v3009705 % 100 == 0) { await QB.autoLimit(); }
var ___v9798294 = 0; for ( i= 1; i <= (QB.func_Len( fline)); i= i + 1) { if (QB.halted()) { return; } ___v9798294++; if (___v9798294 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( fline, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
@ -2171,7 +2224,7 @@ if (QB.halted()) { return; };
var pcount = 0; /* INTEGER */
var rawJS = 0; /* INTEGER */
var parts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var ___v9485711 = 0; for ( i= 1; i <= (QB.func_UBound( lines)); i= i + 1) { if (QB.halted()) { return; } ___v9485711++; if (___v9485711 % 100 == 0) { await QB.autoLimit(); }
var ___v4013744 = 0; for ( i= 1; i <= (QB.func_UBound( lines)); i= i + 1) { if (QB.halted()) { return; } ___v4013744++; if (___v4013744 % 100 == 0) { await QB.autoLimit(); }
pcount = (await func_Split( QB.arrayValue(lines, [ i]).value .text, " " , parts));
var word = ''; /* STRING */
word = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
@ -2215,7 +2268,7 @@ if (QB.halted()) { return; };
var a = 0; /* INTEGER */
var args = ''; /* STRING */
args = "";
var ___v9798294 = 0; for ( a= 1; a <= m.argc; a= a + 1) { if (QB.halted()) { return; } ___v9798294++; if (___v9798294 % 100 == 0) { await QB.autoLimit(); }
var ___v2782800 = 0; for ( a= 1; a <= m.argc; a= a + 1) { if (QB.halted()) { return; } ___v2782800++; if (___v2782800 % 100 == 0) { await QB.autoLimit(); }
var aparts = QB.initArray([{l:0,u:0}], ''); /* STRING */
var apcount = 0; /* INTEGER */
var argname = ''; /* STRING */
@ -2251,7 +2304,7 @@ var Split = null;
if ( delimiter == " " ) {
cstr = (QB.func_RTrim( (QB.func_LTrim( cstr))));
p = (QB.func_InStr( cstr, " "));
var ___v4013744 = 0; while ( p > 0) { if (QB.halted()) { return; }___v4013744++; if (___v4013744 % 100 == 0) { await QB.autoLimit(); }
var ___v1604415 = 0; while ( p > 0) { if (QB.halted()) { return; }___v1604415++; if (___v1604415 % 100 == 0) { await QB.autoLimit(); }
cstr = (QB.func_Mid( cstr, 1, p - 1)) + (QB.func_Mid( cstr, p + 1));
p = (QB.func_InStr( cstr, " "));
}
@ -2259,7 +2312,7 @@ var Split = null;
curpos = 1;
arrpos = 0;
dpos = (QB.func_InStr( curpos, cstr, delimiter));
var ___v2782800 = 0; while (!( dpos == 0)) { if (QB.halted()) { return; }___v2782800++; if (___v2782800 % 100 == 0) { await QB.autoLimit(); }
var ___v1628216 = 0; while (!( dpos == 0)) { if (QB.halted()) { return; }___v1628216++; if (___v1628216 % 100 == 0) { await QB.autoLimit(); }
arrpos = arrpos + 1;
QB.resizeArray(results, [{l:0,u:arrpos}], '', true); /* STRING */
QB.arrayValue(results, [ arrpos]).value = (QB.func_Mid( cstr, curpos, dpos - curpos));
@ -2284,7 +2337,7 @@ var SLSplit = null;
var result = ''; /* STRING */
var count = 0; /* INTEGER */
var i = 0; /* INTEGER */
var ___v1604415 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v1604415++; if (___v1604415 % 100 == 0) { await QB.autoLimit(); }
var ___v6465872 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v6465872++; if (___v6465872 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */ var c2 = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
c2 = (QB.func_Mid( cstr, i, 2));
@ -2386,7 +2439,7 @@ var SLSplit2 = null;
var paren = 0; /* INTEGER */
var count = 0; /* INTEGER */
var i = 0; /* INTEGER */
var ___v1628216 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v1628216++; if (___v1628216 % 100 == 0) { await QB.autoLimit(); }
var ___v4100732 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v4100732++; if (___v4100732 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
@ -2435,7 +2488,7 @@ var ListSplit = null;
var count = 0; /* INTEGER */
var paren = 0; /* INTEGER */
var i = 0; /* INTEGER */
var ___v6465872 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v6465872++; if (___v6465872 % 100 == 0) { await QB.autoLimit(); }
var ___v4127668 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v4127668++; if (___v4127668 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
@ -2480,7 +2533,7 @@ var PrintSplit = null;
var count = 0; /* INTEGER */
var paren = 0; /* INTEGER */
var i = 0; /* INTEGER */
var ___v4100732 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v4100732++; if (___v4100732 % 100 == 0) { await QB.autoLimit(); }
var ___v7127304 = 0; for ( i= 1; i <= (QB.func_Len( cstr)); i= i + 1) { if (QB.halted()) { return; } ___v7127304++; if (___v7127304 % 100 == 0) { await QB.autoLimit(); }
var c = ''; /* STRING */
c = (QB.func_Mid( cstr, i, 1));
if ( c == (QB.func_Chr( 34)) ) {
@ -2524,7 +2577,7 @@ if (QB.halted()) { return; };
await QB.sub_Print(["Methods"]);
await QB.sub_Print(["------------------------------------------------------------"]);
var i = 0; /* INTEGER */
var ___v4127668 = 0; for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v4127668++; if (___v4127668 % 100 == 0) { await QB.autoLimit(); }
var ___v3262062 = 0; for ( i= 1; i <= (QB.func_UBound( methods)); i= i + 1) { if (QB.halted()) { return; } ___v3262062++; if (___v3262062 % 100 == 0) { await QB.autoLimit(); }
var m = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
m = QB.arrayValue(methods, [ i]).value;
await QB.sub_Print([(QB.func_Str( m.line)) + ": " + m.type + " - " + m.name + " [" + m.jsname + "] - " + m.returnType + " - " + m.args]);
@ -2536,12 +2589,12 @@ if (QB.halted()) { return; };
await QB.sub_Print(["Types"]);
await QB.sub_Print(["------------------------------------------------------------"]);
var i = 0; /* INTEGER */
var ___v7127304 = 0; for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } ___v7127304++; if (___v7127304 % 100 == 0) { await QB.autoLimit(); }
var ___v6331789 = 0; for ( i= 1; i <= (QB.func_UBound( types)); i= i + 1) { if (QB.halted()) { return; } ___v6331789++; if (___v6331789 % 100 == 0) { await QB.autoLimit(); }
var t = {line:0,name:'',argc:0,args:''}; /* QBTYPE */
t = QB.arrayValue(types, [ i]).value;
await QB.sub_Print([(QB.func_Str( t.line)) + ": " + t.name]);
var v = 0; /* INTEGER */
var ___v3262062 = 0; for ( v= 1; v <= (QB.func_UBound( typeVars)); v= v + 1) { if (QB.halted()) { return; } ___v3262062++; if (___v3262062 % 100 == 0) { await QB.autoLimit(); }
var ___v2075611 = 0; for ( v= 1; v <= (QB.func_UBound( typeVars)); v= v + 1) { if (QB.halted()) { return; } ___v2075611++; if (___v2075611 % 100 == 0) { await QB.autoLimit(); }
if (QB.arrayValue(typeVars, [ i]).value .typeId == i) {
await QB.sub_Print([" -> " + QB.arrayValue(typeVars, [ v]).value .name + ": " + QB.arrayValue(typeVars, [ v]).value .type]);
}
@ -2793,7 +2846,7 @@ if (QB.halted()) { return; };
var pairs = QB.initArray([{l:0,u:0}], ''); /* STRING */
count = (await func_Split( args, "," , pairs));
var i = 0; /* INTEGER */
var ___v6331789 = 0; for ( i= 1; i <= (QB.func_UBound( pairs)); i= i + 1) { if (QB.halted()) { return; } ___v6331789++; if (___v6331789 % 100 == 0) { await QB.autoLimit(); }
var ___v1860135 = 0; for ( i= 1; i <= (QB.func_UBound( pairs)); i= i + 1) { if (QB.halted()) { return; } ___v1860135++; if (___v1860135 % 100 == 0) { await QB.autoLimit(); }
var nv = QB.initArray([{l:0,u:0}], ''); /* STRING */
count = (await func_Split( QB.arrayValue(pairs, [ i]).value , ":" , nv));
var tvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
@ -2821,7 +2874,7 @@ var RemoveSuffix = null;
var c = ''; /* STRING */
vname = (QB.func__Trim( vname));
i = (QB.func_Len( vname));
var ___v2075611 = 0; while (! done) { if (QB.halted()) { return; }___v2075611++; if (___v2075611 % 100 == 0) { await QB.autoLimit(); }
var ___v5833590 = 0; while (! done) { if (QB.halted()) { return; }___v5833590++; if (___v5833590 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( vname, i, 1));
if ( c == "`" || c == "%" || c == "&" || c == "$" || c == "~" || c == "!" || c == "#" ) {
i = i - 1;
@ -2906,7 +2959,7 @@ var Join = null;
}
var s = ''; /* STRING */
var i = 0; /* INTEGER */
var ___v1860135 = 0; for ( i= startIndex; i <= endIndex; i= i + 1) { if (QB.halted()) { return; } ___v1860135++; if (___v1860135 % 100 == 0) { await QB.autoLimit(); }
var ___v807146 = 0; for ( i= startIndex; i <= endIndex; i= i + 1) { if (QB.halted()) { return; } ___v807146++; if (___v807146 % 100 == 0) { await QB.autoLimit(); }
s = s + QB.arrayValue(parts, [ i]).value;
if ( i != (QB.func_UBound( parts)) ) {
s = s + delimiter;
@ -2930,7 +2983,7 @@ var Replace = null;
var i = 0; /* INTEGER */
var slen = 0; /* INTEGER */
slen = (QB.func_Len( searchString));
var ___v5833590 = 0; for ( i= 1; i <= (QB.func_Len( s)); i= i + 1) { if (QB.halted()) { return; } ___v5833590++; if (___v5833590 % 100 == 0) { await QB.autoLimit(); }
var ___v4579714 = 0; for ( i= 1; i <= (QB.func_Len( s)); i= i + 1) { if (QB.halted()) { return; } ___v4579714++; if (___v4579714 % 100 == 0) { await QB.autoLimit(); }
if ((QB.func_Mid( s, i, slen)) == searchString) {
ns = ns + newString;
i = i + slen - 1;
@ -2972,7 +3025,7 @@ var MethodJS = null;
var i = 0; /* INTEGER */
var c = ''; /* STRING */
var a = 0; /* INTEGER */
var ___v807146 = 0; for ( i= 1; i <= (QB.func_Len( m.name)); i= i + 1) { if (QB.halted()) { return; } ___v807146++; if (___v807146 % 100 == 0) { await QB.autoLimit(); }
var ___v9057298 = 0; for ( i= 1; i <= (QB.func_Len( m.name)); i= i + 1) { if (QB.halted()) { return; } ___v9057298++; if (___v9057298 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( m.name, i, 1));
a = (QB.func_Asc( c));
if ( a == 46) {
@ -3000,7 +3053,7 @@ var GXMethodJS = null;
var i = 0; /* INTEGER */
var c = ''; /* STRING */
var a = 0; /* INTEGER */
var ___v4579714 = 0; for ( i= startIdx + 1; i <= (QB.func_Len( mname)); i= i + 1) { if (QB.halted()) { return; } ___v4579714++; if (___v4579714 % 100 == 0) { await QB.autoLimit(); }
var ___v2613683 = 0; for ( i= startIdx + 1; i <= (QB.func_Len( mname)); i= i + 1) { if (QB.halted()) { return; } ___v2613683++; if (___v2613683 % 100 == 0) { await QB.autoLimit(); }
c = (QB.func_Mid( mname, i, 1));
a = (QB.func_Asc( c));
if (( a >= 65 && a <= 90) || ( a >= 97 && a <= 122) || ( a >= 48 && a <= 57) || a == 95 || a == 46) {

View file

@ -341,12 +341,7 @@ Sub ConvertLines (firstLine As Integer, lastLine As Integer, functionName As Str
typeMode = False
End If
Else
Dim tvar As Variable
tvar.typeId = currType
tvar.name = parts(1)
tvar.type = UCase$(parts(3))
If tvar.type = "_UNSIGNED" Or tvar.type = "UNSIGNED" Then tvar.type = "_UNSIGNED " + UCase$(parts(4))
AddVariable tvar, typeVars()
DeclareTypeVar parts(), currType, i
End If
Else
If first = "CONST" Then
@ -1560,6 +1555,69 @@ Function FindParamChar (s As String, char As String)
FindParamChar = idx
End Function
Sub DeclareTypeVar (parts() As String, typeId As Integer, lineNumber As Integer)
Dim vname As String
Dim vtype As String: vtype = ""
Dim vtypeIndex As Integer: vtypeIndex = 4
Dim isGlobal As Integer: isGlobal = False
Dim isArray As Integer: isArray = False
Dim isStatic As Integer: isStatic = False
Dim arraySize As String
Dim pstart As Integer
Dim bvar As Variable
Dim varnames(0) As String
Dim vnamecount As Integer
Dim findVar As Variable
Dim asIdx As Integer
asIdx = 0
bvar.typeId = typeId
Dim i As Integer
For i = 1 To UBound(parts)
If UCase$(parts(i)) = "AS" Then asIdx = i
Next i
If asIdx = 1 Then
' Handle Dim As syntax
bvar.type = UCase$(parts(asIdx + 1))
Dim nextIdx As Integer
nextIdx = asIdx + 2
If bvar.type = "_UNSIGNED" Or bvar.type = "UNSIGNED" Then
bvar.type = NormalizeType("_UNSIGNED " + UCase$(parts(asIdx + 2)))
nextIdx = asIdx + 3
End If
'bvar.typeId = FindTypeId(bvar.type)
vnamecount = ListSplit(Join(parts(), nextIdx, -1, " "), varnames())
For i = 1 To vnamecount
vname = _Trim$(varnames(i))
pstart = InStr(vname, "(")
If pstart > 0 Then
bvar.isArray = True
arraySize = ConvertExpression(Mid$(vname, pstart + 1, Len(vname) - pstart - 1), lineNumber)
bvar.name = RemoveSuffix(Left$(vname, pstart - 1))
Else
bvar.isArray = False
arraySize = ""
bvar.name = vname
End If
AddVariable bvar, typeVars()
Next i
Else
'Handle traditional syntax
bvar.name = parts(1)
bvar.type = UCase$(parts(3))
If bvar.type = "_UNSIGNED" Or bvar.type = "UNSIGNED" Then bvar.type = NormalizeType("_UNSIGNED " + UCase$(parts(4)))
'bvar.typeId = FindTypeId(bvar.type)
AddVariable bvar, typeVars()
End If
End Sub
Function DeclareVar$ (parts() As String, lineNumber As Integer)
Dim vname As String
@ -1617,7 +1675,7 @@ Function DeclareVar$ (parts() As String, lineNumber As Integer)
bvar.type = UCase$(parts(asIdx + 1))
Dim nextIdx As Integer
nextIdx = asIdx + 2
If bvar.type = "_UNSIGNED" Then
If bvar.type = "_UNSIGNED" Or bvar.type = "UNSIGNED" Then
bvar.type = bvar.type + " " + UCase$(parts(asIdx + 2))
nextIdx = asIdx + 3
End If