mirror of
https://github.com/boxgaming/qbjs.git
synced 2024-05-12 08:00:12 +00:00
Allow QB64 keywords to be referenced with or without leading underscore (#68). Add modifier key functions (#77). Add LOC keyword (#97). Add _Inflate$ and _Deflate$ methods (#74).
This commit is contained in:
parent
84b095a971
commit
e4fbe9ed8b
94
qb2js.js
94
qb2js.js
|
@ -282,8 +282,8 @@ if (QB.halted()) { return; }; firstLine = Math.round(firstLine); lastLine = Math
|
|||
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 = tvar.type + " " + (QB.func_UCase( QB.arrayValue(parts, [ 4]).value));
|
||||
if ( tvar.type == "_UNSIGNED" || tvar.type == "UNSIGNED" ) {
|
||||
tvar.type = "_UNSIGNED " + (QB.func_UCase( QB.arrayValue(parts, [ 4]).value));
|
||||
}
|
||||
await sub_AddVariable( tvar, typeVars);
|
||||
}
|
||||
|
@ -470,7 +470,7 @@ if (QB.halted()) { return; }; firstLine = Math.round(firstLine); lastLine = Math
|
|||
}
|
||||
loopLevel = loopLevel - 1;
|
||||
indent = - 1;
|
||||
} else if ( first == "_CONTINUE" ) {
|
||||
} else if ( first == "_CONTINUE" || first == "CONTINUE" ) {
|
||||
js = "continue;";
|
||||
} else if ((QB.func_UCase( l)) == "EXIT FUNCTION" ) {
|
||||
js = "return " + (await func_RemoveSuffix( functionName)) + ";";
|
||||
|
@ -723,11 +723,11 @@ var ConvertSub = null;
|
|||
js = (await func_CallMethod( m)) + "(" + (await func_ConvertWindow( args, lineNumber)) + ");";
|
||||
} else if ( m.name == "Write" ) {
|
||||
js = (await func_ConvertWrite( m, args, lineNumber));
|
||||
} else if ( m.name == "_PrintString" ) {
|
||||
} else if ( m.name == "_PrintString" || m.name == "PrintString" ) {
|
||||
js = (await func_CallMethod( m)) + "(" + (await func_ConvertPrintString( args, lineNumber)) + ");";
|
||||
} else if ( m.name == "_PutImage" ) {
|
||||
} else if ( m.name == "_PutImage" || m.name == "PutImage" ) {
|
||||
js = (await func_CallMethod( m)) + "(" + (await func_ConvertPutImage( args, lineNumber)) + ");";
|
||||
} else if ( m.name == "_FullScreen" ) {
|
||||
} else if ( m.name == "_FullScreen" || m.name == "FullScreen" ) {
|
||||
js = (await func_CallMethod( m)) + "(" + (await func_ConvertFullScreen( args)) + ");";
|
||||
} else {
|
||||
js = (await func_CallMethod( m)) + "(" + (await func_ConvertMethodParams( args, lineNumber)) + ");";
|
||||
|
@ -786,16 +786,16 @@ var ConvertFullScreen = null;
|
|||
if ( argc > 0) {
|
||||
var arg = ''; /* STRING */
|
||||
arg = (QB.func_UCase( QB.arrayValue(parts, [ 1]).value));
|
||||
if ( arg == "_OFF" ) {
|
||||
if ( arg == "_OFF" || arg == "OFF" ) {
|
||||
mode = "QB.OFF";
|
||||
} else if ( arg == "_STRETCH" ) {
|
||||
} else if ( arg == "_STRETCH" || arg == "STRETCH" ) {
|
||||
mode = "QB.STRETCH";
|
||||
} else if ( arg == "_SQUAREPIXELS" ) {
|
||||
} else if ( arg == "_SQUAREPIXELS" || arg == "SQUAREPIXELS" ) {
|
||||
mode = "QB.SQUAREPIXELS";
|
||||
}
|
||||
}
|
||||
if ( argc > 1) {
|
||||
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "_SMOOTH" ) {
|
||||
if ((QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "_SMOOTH" || (QB.func_UCase( QB.arrayValue(parts, [ 2]).value)) == "SMOOTH" ) {
|
||||
doSmooth = "true";
|
||||
}
|
||||
}
|
||||
|
@ -864,7 +864,7 @@ var ConvertPutImage = null;
|
|||
sourceImage = "undefined";
|
||||
destImage = "undefined";
|
||||
doSmooth = "false";
|
||||
if ((await func_EndsWith( (QB.func__Trim( (QB.func_UCase( args)))) , "_SMOOTH")) ) {
|
||||
if ((await func_EndsWith( (QB.func__Trim( (QB.func_UCase( args)))) , "_SMOOTH")) || (await func_EndsWith( (QB.func__Trim( (QB.func_UCase( args)))) , "SMOOTH")) ) {
|
||||
doSmooth = "true";
|
||||
args = (QB.func_Left( (QB.func__Trim( args)) , (QB.func_Len( (QB.func__Trim( args)))) - 7));
|
||||
}
|
||||
|
@ -884,7 +884,7 @@ var ConvertPutImage = null;
|
|||
destCoord = (await func_ConvertCoordParam( QB.arrayValue(parts, [ 4]).value , True, lineNumber));
|
||||
}
|
||||
if ( argc >= 5) {
|
||||
if ((QB.func__Trim( (QB.func_UCase( QB.arrayValue(parts, [ 5]).value)))) == "_SMOOTH" ) {
|
||||
if ((QB.func__Trim( (QB.func_UCase( QB.arrayValue(parts, [ 5]).value)))) == "_SMOOTH" || (QB.func__Trim( (QB.func_UCase( QB.arrayValue(parts, [ 5]).value)))) == "SMOOTH" ) {
|
||||
doSmooth = "true";
|
||||
}
|
||||
}
|
||||
|
@ -1465,7 +1465,7 @@ var DeclareVar = null;
|
|||
asIdx = 0;
|
||||
var js = ''; /* STRING */
|
||||
js = "";
|
||||
var preserve = ''; /* STRING */
|
||||
|
||||
preserve = "false";
|
||||
if ((QB.func_UCase( QB.arrayValue(parts, [ 1]).value)) == "STATIC" ) {
|
||||
if ( currentMethod == "" ) {
|
||||
|
@ -1489,7 +1489,7 @@ var DeclareVar = null;
|
|||
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "AS" ) {
|
||||
asIdx = i;
|
||||
}
|
||||
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "_PRESERVE" ) {
|
||||
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "_PRESERVE" || (QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "PRESERVE" ) {
|
||||
preserve = "true";
|
||||
}
|
||||
if ((QB.func_UCase( QB.arrayValue(parts, [ i]).value)) == "SHARED" ) {
|
||||
|
@ -1527,7 +1527,7 @@ var DeclareVar = null;
|
|||
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 p = ''; /* STRING */
|
||||
p = (QB.func_UCase( QB.arrayValue(parts, [ i]).value));
|
||||
if ( p == "DIM" || p == "REDIM" || p == "SHARED" || p == "_PRESERVE" || p == "STATIC" ) {
|
||||
if ( p == "DIM" || p == "REDIM" || p == "SHARED" || p == "_PRESERVE" || p == "PRESERVE" || p == "STATIC" ) {
|
||||
nextIdx = i + 1;
|
||||
}
|
||||
}
|
||||
|
@ -1572,6 +1572,7 @@ var RegisterVar = null;
|
|||
if ( isStatic) {
|
||||
bvar.jsname = "$" + currentMethod + "__" + bvar.jsname;
|
||||
}
|
||||
bvar.type = (await func_NormalizeType( bvar.type));
|
||||
if (! bvar.isArray) {
|
||||
js = js + "var " + bvar.jsname + " = " + (await func_InitTypeValue( bvar.type)) + "; ";
|
||||
} else {
|
||||
|
@ -1938,7 +1939,7 @@ if (QB.halted()) { return; };
|
|||
}
|
||||
var bvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
|
||||
bvar.name = (await func_RemoveSuffix( QB.arrayValue(parts, [ 1]).value));
|
||||
bvar.type = QB.arrayValue(parts, [ 2]).value;
|
||||
bvar.type = (await func_NormalizeType( QB.arrayValue(parts, [ 2]).value));
|
||||
bvar.typeId = (await func_FindTypeId( bvar.type));
|
||||
if (QB.arrayValue(parts, [ 3]).value == "true" ) {
|
||||
bvar.isArray = True;
|
||||
|
@ -1948,7 +1949,7 @@ if (QB.halted()) { return; };
|
|||
if (! bvar.isArray) {
|
||||
var typeName = ''; /* STRING */
|
||||
typeName = (QB.func_UCase( bvar.type));
|
||||
if ( typeName == "BIT" || typeName == "UNSIGNED BIT" || typeName == "BYTE" || typeName == "UNSIGNED BYTE" || typeName == "INTEGER" || typeName == "UNSIGNED INTEGER" || typeName == "LONG" || typeName == "UNSIGNED LONG" || typeName == "_INTEGER64" || typeName == "UNSIGNED _INTEGER64" ) {
|
||||
if ( typeName == "_BIT" || typeName == "_UNSIGNED _BIT" || typeName == "_BYTE" || typeName == "_UNSIGNED _BYTE" || typeName == "INTEGER" || typeName == "_UNSIGNED INTEGER" || typeName == "LONG" || typeName == "_UNSIGNED LONG" || typeName == "_INTEGER64" || typeName == "_UNSIGNED _INTEGER64" ) {
|
||||
var varIsArray = 0; /* INTEGER */
|
||||
if ((await func_FindVariable( bvar.name, bvar, varIsArray)) ) {
|
||||
intConv = intConv + bvar.jsname + " = Math.round(" + bvar.jsname + "); ";
|
||||
|
@ -2547,12 +2548,17 @@ if (QB.halted()) { return; };
|
|||
}
|
||||
}
|
||||
}
|
||||
async function func_CopyMethod(fromMethod/*METHOD*/,toMethod/*METHOD*/) {
|
||||
async function sub_CopyMethod(fromMethod/*METHOD*/,toMethod/*METHOD*/) {
|
||||
if (QB.halted()) { return; };
|
||||
var CopyMethod = null;
|
||||
toMethod.type = fromMethod.type;
|
||||
toMethod.name = fromMethod.name;
|
||||
return CopyMethod;
|
||||
toMethod.returnType = fromMethod.returnType;
|
||||
toMethod.name = fromMethod.name;
|
||||
toMethod.uname = fromMethod.uname;
|
||||
toMethod.argc = fromMethod.argc;
|
||||
toMethod.args = fromMethod.args;
|
||||
toMethod.jsname = fromMethod.jsname;
|
||||
toMethod.sync = fromMethod.sync;
|
||||
}
|
||||
async function sub_AddMethod(m/*METHOD*/,prefix/*STRING*/,sync/*INTEGER*/) {
|
||||
if (QB.halted()) { return; };
|
||||
|
@ -2612,6 +2618,16 @@ if (QB.halted()) { return; };
|
|||
m.type = mtype;
|
||||
m.name = mname;
|
||||
await sub_AddMethod( m, "QB." , sync);
|
||||
if ((QB.func_InStr( mname, "_")) == 1) {
|
||||
var m2 = {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}; /* METHOD */
|
||||
await sub_CopyMethod( QB.arrayValue(methods, [(QB.func_UBound( methods))]).value , m2);
|
||||
m2.name = (QB.func_Mid( mname, 2));
|
||||
m2.uname = (QB.func_UCase( (await func_RemoveSuffix( m2.name))));
|
||||
var mcount = 0; /* SINGLE */
|
||||
mcount = (QB.func_UBound( methods)) + 1;
|
||||
QB.resizeArray(methods, [{l:0,u:mcount}], {line:0,type:'',returnType:'',name:'',uname:'',argc:0,args:'',jsname:'',sync:0}, true); /* METHOD */
|
||||
QB.arrayValue(methods, [ mcount]).value = m2;
|
||||
}
|
||||
}
|
||||
async function sub_AddNativeMethod(mtype/*STRING*/,mname/*STRING*/,jsname/*STRING*/,sync/*INTEGER*/) {
|
||||
if (QB.halted()) { return; };
|
||||
|
@ -2719,7 +2735,7 @@ if (QB.halted()) { return; };
|
|||
vcount = (QB.func_UBound( vlist)) + 1;
|
||||
QB.resizeArray(vlist, [{l:0,u:vcount}], {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}, true); /* VARIABLE */
|
||||
var nvar = {type:'',name:'',jsname:'',isConst:0,isArray:0,arraySize:0,typeId:0}; /* VARIABLE */
|
||||
nvar.type = bvar.type;
|
||||
nvar.type = (await func_NormalizeType( bvar.type));
|
||||
nvar.name = bvar.name;
|
||||
nvar.jsname = bvar.jsname;
|
||||
nvar.isConst = bvar.isConst;
|
||||
|
@ -2731,6 +2747,34 @@ if (QB.halted()) { return; };
|
|||
}
|
||||
QB.arrayValue(vlist, [ vcount]).value = nvar;
|
||||
}
|
||||
async function func_NormalizeType(itype/*STRING*/) {
|
||||
if (QB.halted()) { return; };
|
||||
var NormalizeType = null;
|
||||
var otype = ''; /* STRING */
|
||||
if ( itype == "BIT" ) {
|
||||
otype = "_BIT";
|
||||
} else if ( itype == "_UNSIGNED BIT" ) {
|
||||
otype = "_UNSIGNED _BIT";
|
||||
} else if ( itype == "BYTE" ) {
|
||||
otype = "_BYTE";
|
||||
} else if ( itype == "_UNSIGNED BYTE" ) {
|
||||
otype = "_UNSIGNED _BYTE";
|
||||
} else if ( itype == "INTEGER64" ) {
|
||||
otype = "_INTEGER64";
|
||||
} else if ( itype == "_UNSIGNED INTEGER64" ) {
|
||||
otype = "_UNSIGNED _INTEGER64";
|
||||
} else if ( itype == "FLOAT" ) {
|
||||
otype = "_FLOAT";
|
||||
} else if ( itype == "OFFSET" ) {
|
||||
otype = "_OFFSET";
|
||||
} else if ( itype == "_UNSIGNED OFFSET" ) {
|
||||
otype = "_UNSIGNED _OFFSET";
|
||||
} else {
|
||||
otype = itype;
|
||||
}
|
||||
NormalizeType = otype;
|
||||
return NormalizeType;
|
||||
}
|
||||
async function sub_AddType(t/*QBTYPE*/) {
|
||||
if (QB.halted()) { return; };
|
||||
var tcount = 0; /* SINGLE */
|
||||
|
@ -3288,6 +3332,7 @@ if (QB.halted()) { return; };
|
|||
await sub_AddQBMethod( "FUNCTION" , "_BackgroundColor" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Blue" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Blue32" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_CapsLock" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Ceil" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_CommandCount" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_CopyImage" , False);
|
||||
|
@ -3298,6 +3343,7 @@ if (QB.halted()) { return; };
|
|||
await sub_AddQBMethod( "FUNCTION" , "_D2G" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_D2R" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_DefaultColor" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Deflate" , False);
|
||||
await sub_AddQBMethod( "SUB" , "_Delay" , True);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_DesktopHeight" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_DesktopWidth" , False);
|
||||
|
@ -3322,6 +3368,7 @@ if (QB.halted()) { return; };
|
|||
await sub_AddQBMethod( "FUNCTION" , "_Green32" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Height" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Hypot" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Inflate" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_InStrRev" , False);
|
||||
await sub_AddQBMethod( "SUB" , "_Limit" , True);
|
||||
await sub_AddQBMethod( "SUB" , "_KeyClear" , False);
|
||||
|
@ -3337,6 +3384,7 @@ if (QB.halted()) { return; };
|
|||
await sub_AddQBMethod( "FUNCTION" , "_MouseX" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_MouseY" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_NewImage" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_NumLock" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_OS$" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Pi" , False);
|
||||
await sub_AddQBMethod( "SUB" , "_PaletteColor" , False);
|
||||
|
@ -3363,6 +3411,7 @@ if (QB.halted()) { return; };
|
|||
await sub_AddQBMethod( "SUB" , "_ScreenMove" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_ScreenX" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_ScreenY" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_ScrollLock" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Sech" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Setbit" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "_Shl" , False);
|
||||
|
@ -3426,9 +3475,10 @@ if (QB.halted()) { return; };
|
|||
await sub_AddQBMethod( "FUNCTION" , "Left$" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "LCase$" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "Len" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "LOF" , False);
|
||||
await sub_AddQBMethod( "SUB" , "Line" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "Loc" , False);
|
||||
await sub_AddQBMethod( "SUB" , "Locate" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "LOF" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "Log" , False);
|
||||
await sub_AddQBMethod( "FUNCTION" , "LTrim$" , False);
|
||||
await sub_AddQBMethod( "SUB" , "Kill" , False);
|
||||
|
|
Loading…
Reference in a new issue