Kaynağa Gözat

Fix GM and GML for gmint 32 or 64 bit size

Greg 8 yıl önce
ebeveyn
işleme
8cc13d934f

+ 6 - 6
gmsrc/src/gm/gmByteCode.cpp

@@ -114,15 +114,15 @@ void gmByteCodePrint(FILE * a_fp, const void * a_byteCode, int a_byteCodeLength)
 
 
     if(opf32)
     if(opf32)
     {
     {
-      float fval = *((float *) instruction);
-      instruction += sizeof(gmint32);
+      gmfloat fval = *((gmfloat *) instruction);
+      instruction += sizeof(gmfloat);
       fprintf(a_fp, "  %04d %s %f" GM_NL, addr, cp, fval);
       fprintf(a_fp, "  %04d %s %f" GM_NL, addr, cp, fval);
     }
     }
-    if(opi32)
+    else if(opi32)
     {
     {
-      gmint32 ival = *((gmint32 *) instruction);
-      instruction += sizeof(gmint32);
-      fprintf(a_fp, "  %04d %s %d" GM_NL, addr, cp, ival);
+      gmint ival = *((gmint *) instruction);
+      instruction += sizeof(gmint);
+      fprintf(a_fp, "  %04d %s %lld" GM_NL, addr, cp, (gmint64)ival);
     }
     }
     else if (opiptr)
     else if (opiptr)
     {
     {

+ 2 - 2
gmsrc/src/gm/gmByteCode.h

@@ -79,10 +79,10 @@ enum gmByteCode
   BC_DUP2,            // tos + 1 = tos -1, tos + 2 = tos, tos += 2
   BC_DUP2,            // tos + 1 = tos -1, tos + 2 = tos, tos += 2
   BC_SWAP,            // 
   BC_SWAP,            // 
   BC_PUSHNULL,        // push null,
   BC_PUSHNULL,        // push null,
-  BC_PUSHINT,         // push int opptr
+  BC_PUSHINT,         // push integer gmint
   BC_PUSHINT0,        // push 0
   BC_PUSHINT0,        // push 0
   BC_PUSHINT1,        // push 1
   BC_PUSHINT1,        // push 1
-  BC_PUSHFP,          // push floating point op32
+  BC_PUSHFP,          // push floating point gmfloat
   BC_PUSHSTR,         // push string opptr
   BC_PUSHSTR,         // push string opptr
   BC_PUSHTBL,         // push table
   BC_PUSHTBL,         // push table
   BC_PUSHFN,          // push function opptr
   BC_PUSHFN,          // push function opptr

+ 3 - 6
gmsrc/src/gm/gmCodeGen.cpp

@@ -637,11 +637,8 @@ bool gmCodeGenPrivate::GenExprTable(const gmCodeTreeNode * a_node, gmByteCodeGen
     }
     }
     else
     else
     {
     {
-#if 1 // 32bit Integers
-      a_byteCode->Emit(BC_PUSHINT, index++);
-#else
-      a_byteCode->EmitPtr(BC_PUSHINT, index++);
-#endif
+       a_byteCode->Emit(BC_PUSHINT, (gmint)(index++));
+
       if(!Generate(fields, a_byteCode, false)) return false;
       if(!Generate(fields, a_byteCode, false)) return false;
       a_byteCode->Emit(BC_SETIND);
       a_byteCode->Emit(BC_SETIND);
     }
     }
@@ -780,7 +777,7 @@ bool gmCodeGenPrivate::GenStmtForEach(const gmCodeTreeNode * a_node, gmByteCodeG
   PushLoop();
   PushLoop();
 
 
   // Push the first iterator
   // Push the first iterator
-  a_byteCode->Emit(BC_PUSHINT, (gmuint32) -2); // first iterator value.
+  a_byteCode->Emit(BC_PUSHINT, (gmint) -2); // first iterator value.
 
 
   continueAddress = (int)a_byteCode->Tell();
   continueAddress = (int)a_byteCode->Tell();
 
 

+ 22 - 7
gmsrc/src/gml/gml.vcxproj

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <ItemGroup Label="ProjectConfigurations">
   <ItemGroup Label="ProjectConfigurations">
     <ProjectConfiguration Include="Debug|Win32">
     <ProjectConfiguration Include="Debug|Win32">
       <Configuration>Debug</Configuration>
       <Configuration>Debug</Configuration>
@@ -12,17 +12,20 @@
   </ItemGroup>
   </ItemGroup>
   <PropertyGroup Label="Globals">
   <PropertyGroup Label="Globals">
     <ProjectGuid>{5478A397-2EE5-45CE-BE46-665C630518F4}</ProjectGuid>
     <ProjectGuid>{5478A397-2EE5-45CE-BE46-665C630518F4}</ProjectGuid>
+    <WindowsTargetPlatformVersion>10.0.16299.0</WindowsTargetPlatformVersion>
   </PropertyGroup>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
     <UseOfMfc>false</UseOfMfc>
     <CharacterSet>MultiByte</CharacterSet>
     <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
   </PropertyGroup>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <ConfigurationType>Application</ConfigurationType>
     <UseOfMfc>false</UseOfMfc>
     <UseOfMfc>false</UseOfMfc>
     <CharacterSet>MultiByte</CharacterSet>
     <CharacterSet>MultiByte</CharacterSet>
+    <PlatformToolset>v141</PlatformToolset>
   </PropertyGroup>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">
   <ImportGroup Label="ExtensionSettings">
@@ -38,11 +41,11 @@
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup Label="UserMacros" />
   <PropertyGroup>
   <PropertyGroup>
     <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
     <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\Release\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(PlatformName)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(PlatformName)\$(Configuration)\</IntDir>
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
-    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</OutDir>
-    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\Debug\</IntDir>
+    <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(PlatformName)\$(Configuration)\</OutDir>
+    <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(PlatformName)\$(Configuration)\</IntDir>
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
     <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
@@ -51,6 +54,12 @@
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
     <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
     <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
   </PropertyGroup>
   </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <TargetName>$(ProjectName).$(Configuration)</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <TargetName>$(ProjectName).$(Configuration)</TargetName>
+  </PropertyGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
     <Midl>
     <Midl>
       <TypeLibraryName>.\Release/gml.tlb</TypeLibraryName>
       <TypeLibraryName>.\Release/gml.tlb</TypeLibraryName>
@@ -77,7 +86,7 @@
       <Culture>0x0409</Culture>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     </ResourceCompile>
     <Link>
     <Link>
-      <OutputFile>..\..\bin\gml.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <ProgramDatabaseFile>.\Release/gml.pdb</ProgramDatabaseFile>
       <ProgramDatabaseFile>.\Release/gml.pdb</ProgramDatabaseFile>
       <SubSystem>Console</SubSystem>
       <SubSystem>Console</SubSystem>
@@ -87,6 +96,9 @@
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <OutputFile>.\Release/gml.bsc</OutputFile>
       <OutputFile>.\Release/gml.bsc</OutputFile>
     </Bscmake>
     </Bscmake>
+    <PostBuildEvent>
+      <Command>copy $(OutDir)$(TargetName)$(TargetExt) ..\..\bin</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
   <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
     <Midl>
     <Midl>
@@ -114,7 +126,7 @@
       <Culture>0x0409</Culture>
       <Culture>0x0409</Culture>
     </ResourceCompile>
     </ResourceCompile>
     <Link>
     <Link>
-      <OutputFile>..\..\bin\gml.debug.exe</OutputFile>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <ProgramDatabaseFile>.\Debug/gml.debug.pdb</ProgramDatabaseFile>
       <ProgramDatabaseFile>.\Debug/gml.debug.pdb</ProgramDatabaseFile>
@@ -125,6 +137,9 @@
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <SuppressStartupBanner>true</SuppressStartupBanner>
       <OutputFile>.\Debug/gml.bsc</OutputFile>
       <OutputFile>.\Debug/gml.bsc</OutputFile>
     </Bscmake>
     </Bscmake>
+    <PostBuildEvent>
+      <Command>copy $(OutDir)$(TargetName)$(TargetExt) ..\..\bin</Command>
+    </PostBuildEvent>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="main.cpp">
     <ClCompile Include="main.cpp">

+ 16 - 10
gmsrc/src/gml/main.cpp

@@ -66,13 +66,13 @@ static void PrintByteCode(FILE * a_fp, const void * a_byteCode, int a_byteCodeLe
   const gmuint8 * end = instruction + a_byteCodeLength;
   const gmuint8 * end = instruction + a_byteCodeLength;
   const gmuint8 * start = instruction;
   const gmuint8 * start = instruction;
   const char * cp;
   const char * cp;
-  bool opiptr, opf32, opisymbol;
+  bool opiptr, opf32, opi32;
 
 
   while(instruction < end)
   while(instruction < end)
   {
   {
     opiptr = false;
     opiptr = false;
     opf32 = false;
     opf32 = false;
-    opisymbol = false;
+    opi32 = false;
 
 
     int addr = instruction - start;
     int addr = instruction - start;
 
 
@@ -102,7 +102,7 @@ static void PrintByteCode(FILE * a_fp, const void * a_byteCode, int a_byteCodeLe
       case BC_DUP2 : cp = "dup2"; break;
       case BC_DUP2 : cp = "dup2"; break;
       case BC_SWAP : cp = "swap"; break;
       case BC_SWAP : cp = "swap"; break;
       case BC_PUSHNULL : cp = "push null"; break;
       case BC_PUSHNULL : cp = "push null"; break;
-      case BC_PUSHINT : cp = "push int"; opiptr = true; break;
+      case BC_PUSHINT : cp = "push int"; opi32 = true; break;
       case BC_PUSHINT0 : cp = "push int 0"; break;
       case BC_PUSHINT0 : cp = "push int 0"; break;
       case BC_PUSHINT1 : cp = "push int 1"; break;
       case BC_PUSHINT1 : cp = "push int 1"; break;
       case BC_PUSHFP : cp = "push fp"; opf32 = true; break;
       case BC_PUSHFP : cp = "push fp"; opf32 = true; break;
@@ -111,8 +111,8 @@ static void PrintByteCode(FILE * a_fp, const void * a_byteCode, int a_byteCodeLe
       case BC_PUSHFN : cp = "push fn"; opiptr = true; break;
       case BC_PUSHFN : cp = "push fn"; opiptr = true; break;
       case BC_PUSHTHIS : cp = "push this"; break;
       case BC_PUSHTHIS : cp = "push this"; break;
       
       
-      case BC_GETLOCAL : cp = "get local"; opiptr = true; break;
-      case BC_SETLOCAL : cp = "set local"; opiptr = true; break;
+      case BC_GETLOCAL : cp = "get local"; opi32 = true; break;
+      case BC_SETLOCAL : cp = "set local"; opi32 = true; break;
       case BC_GETGLOBAL : cp = "get global"; opiptr = true; break;
       case BC_GETGLOBAL : cp = "get global"; opiptr = true; break;
       case BC_SETGLOBAL : cp = "set global"; opiptr = true; break;
       case BC_SETGLOBAL : cp = "set global"; opiptr = true; break;
       case BC_GETTHIS : cp = "get this"; opiptr = true; break;
       case BC_GETTHIS : cp = "get this"; opiptr = true; break;
@@ -157,19 +157,25 @@ static void PrintByteCode(FILE * a_fp, const void * a_byteCode, int a_byteCodeLe
 
 
     if(opf32)
     if(opf32)
     {
     {
-      float fval = *((float *) instruction);
-      instruction += sizeof(gmint32);
-      fprintf(a_fp, "  %04d %s %f"GM_NL, addr, cp, fval);
+      gmfloat fval = *((gmfloat *) instruction);
+      instruction += sizeof(gmfloat);
+      fprintf(a_fp, "  %04d %s %f" GM_NL, addr, cp, fval);
+    }
+    else if (opi32)
+    {
+      gmint ival = *((gmint *)instruction);
+      instruction += sizeof(gmint);
+      fprintf(a_fp, "  %04d %s %lld" GM_NL, addr, cp, (gmint64)ival);
     }
     }
     else if (opiptr)
     else if (opiptr)
     {
     {
       gmptr ival = *((gmptr *) instruction);
       gmptr ival = *((gmptr *) instruction);
       instruction += sizeof(gmptr);
       instruction += sizeof(gmptr);
-      fprintf(a_fp, "  %04d %s %d"GM_NL, addr, cp, ival);
+      fprintf(a_fp, "  %04d %s %d" GM_NL, addr, cp, ival);
     }
     }
     else
     else
     {
     {
-      fprintf(a_fp, "  %04d %s"GM_NL, addr, cp);
+      fprintf(a_fp, "  %04d %s" GM_NL, addr, cp);
     }
     }
   }
   }
 }
 }