Parcourir la source

Windows support

Steve Fan il y a 7 ans
Parent
commit
f83297e997

+ 5 - 0
gravity_visualstudio/dll.c

@@ -0,0 +1,5 @@
+#include <windows.h>
+
+BOOL WINAPI DllMain(HINSTANCE _1, DWORD _2, LPVOID _3) {
+  return TRUE;
+}

+ 2 - 2
gravity_visualstudio/exports.def

@@ -1,4 +1,4 @@
-LIBRARY GravityLang
+LIBRARY gravity
 EXPORTS
 
 ;;;	gravity_vm.h
@@ -143,7 +143,7 @@ EXPORTS
 	gravity_fiber_size
 	
 	gravity_instance_new
-	gravity_instance_dup
+	gravity_instance_clone
 	gravity_instance_setivar
 	gravity_instance_setxdata
 	gravity_instance_free

+ 57 - 28
gravity_visualstudio/gravity.sln

@@ -1,28 +1,57 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Express 2013 for Windows Desktop
-VisualStudioVersion = 12.0.31101.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "GravityLang", "gravity.vcxproj", "{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}"
-EndProject
-Global
-	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Win32 = Debug|Win32
-		Debug|x64 = Debug|x64
-		Release|Win32 = Release|Win32
-		Release|x64 = Release|x64
-	EndGlobalSection
-	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|Win32.ActiveCfg = Debug|Win32
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|Win32.Build.0 = Debug|Win32
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|x64.ActiveCfg = Debug|x64
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|x64.Build.0 = Debug|x64
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|Win32.ActiveCfg = Release|Win32
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|Win32.Build.0 = Release|Win32
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|x64.ActiveCfg = Release|x64
-		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|x64.Build.0 = Release|x64
-	EndGlobalSection
-	GlobalSection(SolutionProperties) = preSolution
-		HideSolutionNode = FALSE
-	EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.27703.2042
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gravity", "gravity.vcxproj", "{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gravity_dll", "gravity_dll.vcxproj", "{862AC390-2E85-4218-B640-013245710C17}"
+	ProjectSection(ProjectDependencies) = postProject
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5} = {EC12BE0A-025E-4168-9D2D-419A18CB2EF5}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gravity_cli", "gravity_cli.vcxproj", "{82CE17B8-1BC6-4021-A966-0CEC58DB641D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5} = {EC12BE0A-025E-4168-9D2D-419A18CB2EF5}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
+		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|Win32.Build.0 = Debug|Win32
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|x64.ActiveCfg = Debug|x64
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Debug|x64.Build.0 = Debug|x64
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|Win32.ActiveCfg = Release|Win32
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|Win32.Build.0 = Release|Win32
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|x64.ActiveCfg = Release|x64
+		{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}.Release|x64.Build.0 = Release|x64
+		{862AC390-2E85-4218-B640-013245710C17}.Debug|Win32.ActiveCfg = Debug|Win32
+		{862AC390-2E85-4218-B640-013245710C17}.Debug|Win32.Build.0 = Debug|Win32
+		{862AC390-2E85-4218-B640-013245710C17}.Debug|x64.ActiveCfg = Debug|x64
+		{862AC390-2E85-4218-B640-013245710C17}.Debug|x64.Build.0 = Debug|x64
+		{862AC390-2E85-4218-B640-013245710C17}.Release|Win32.ActiveCfg = Release|Win32
+		{862AC390-2E85-4218-B640-013245710C17}.Release|Win32.Build.0 = Release|Win32
+		{862AC390-2E85-4218-B640-013245710C17}.Release|x64.ActiveCfg = Release|x64
+		{862AC390-2E85-4218-B640-013245710C17}.Release|x64.Build.0 = Release|x64
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Debug|Win32.Build.0 = Debug|Win32
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Debug|x64.ActiveCfg = Debug|x64
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Debug|x64.Build.0 = Debug|x64
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Release|Win32.ActiveCfg = Release|Win32
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Release|Win32.Build.0 = Release|Win32
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Release|x64.ActiveCfg = Release|x64
+		{82CE17B8-1BC6-4021-A966-0CEC58DB641D}.Release|x64.Build.0 = Release|x64
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {CD1583B8-4B10-4C57-B579-CC2A7F0DD0C7}
+	EndGlobalSection
+EndGlobal

+ 250 - 226
gravity_visualstudio/gravity.vcxproj

@@ -1,227 +1,251 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup Label="ProjectConfigurations">
-    <ProjectConfiguration Include="Debug|Win32">
-      <Configuration>Debug</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|Win32">
-      <Configuration>Release</Configuration>
-      <Platform>Win32</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Debug|x64">
-      <Configuration>Debug</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-    <ProjectConfiguration Include="Release|x64">
-      <Configuration>Release</Configuration>
-      <Platform>x64</Platform>
-    </ProjectConfiguration>
-  </ItemGroup>
-  <PropertyGroup Label="Globals">
-    <VCProjectVersion>15.0</VCProjectVersion>
-    <ProjectGuid>{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}</ProjectGuid>
-    <Keyword>Win32Proj</Keyword>
-    <RootNamespace>gravity</RootNamespace>
-    <WindowsTargetPlatformVersion>10.0.14393.0</WindowsTargetPlatformVersion>
-    <ProjectName>GravityLang</ProjectName>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>true</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
-    <ConfigurationType>DynamicLibrary</ConfigurationType>
-    <UseDebugLibraries>false</UseDebugLibraries>
-    <PlatformToolset>v120</PlatformToolset>
-    <WholeProgramOptimization>true</WholeProgramOptimization>
-    <CharacterSet>Unicode</CharacterSet>
-  </PropertyGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
-  <ImportGroup Label="ExtensionSettings">
-  </ImportGroup>
-  <ImportGroup Label="Shared">
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
-  </ImportGroup>
-  <PropertyGroup Label="UserMacros" />
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)bin\</OutDir>
-    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LinkIncremental>true</LinkIncremental>
-    <OutDir>$(SolutionDir)bin\</OutDir>
-    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(SolutionDir)bin\</OutDir>
-    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
-  </PropertyGroup>
-  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <LinkIncremental>false</LinkIncremental>
-    <OutDir>$(SolutionDir)bin\</OutDir>
-    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
-  </PropertyGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;GRAVITY_EXPORTS;%(PreprocessorDefinitions);GRAVITY_API=__declspec(dllexport);inline=;_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
-      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <RemoveUnreferencedCodeData>false</RemoveUnreferencedCodeData>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
-      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <ClCompile>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <WarningLevel>Level3</WarningLevel>
-      <Optimization>Disabled</Optimization>
-      <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;GRAVITY_EXPORTS;%(PreprocessorDefinitions);GRAVITY_API=__declspec(dllexport);inline=;_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
-      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <RemoveUnreferencedCodeData>false</RemoveUnreferencedCodeData>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
-      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;GRAVITY_EXPORTS;%(PreprocessorDefinitions);GRAVITY_API=__declspec(dllexport);inline=;_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
-      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <RemoveUnreferencedCodeData>false</RemoveUnreferencedCodeData>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
-      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
-    <ClCompile>
-      <WarningLevel>Level3</WarningLevel>
-      <PrecompiledHeader>
-      </PrecompiledHeader>
-      <Optimization>MaxSpeed</Optimization>
-      <FunctionLevelLinking>true</FunctionLevelLinking>
-      <IntrinsicFunctions>true</IntrinsicFunctions>
-      <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;GRAVITY_EXPORTS;%(PreprocessorDefinitions);GRAVITY_API=__declspec(dllexport);inline=;_CRT_SECURE_NO_WARNINGS</PreprocessorDefinitions>
-      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
-      <RemoveUnreferencedCodeData>false</RemoveUnreferencedCodeData>
-      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
-    </ClCompile>
-    <Link>
-      <SubSystem>Windows</SubSystem>
-      <EnableCOMDATFolding>true</EnableCOMDATFolding>
-      <OptimizeReferences>true</OptimizeReferences>
-      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
-      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
-    </Link>
-  </ItemDefinitionGroup>
-  <ItemGroup>
-    <ClInclude Include="..\src\compiler\debug_macros.h" />
-    <ClInclude Include="..\src\compiler\gravity_ast.h" />
-    <ClInclude Include="..\src\compiler\gravity_codegen.h" />
-    <ClInclude Include="..\src\compiler\gravity_compiler.h" />
-    <ClInclude Include="..\src\compiler\gravity_ircode.h" />
-    <ClInclude Include="..\src\compiler\gravity_lexer.h" />
-    <ClInclude Include="..\src\compiler\gravity_optimizer.h" />
-    <ClInclude Include="..\src\compiler\gravity_parser.h" />
-    <ClInclude Include="..\src\compiler\gravity_semacheck1.h" />
-    <ClInclude Include="..\src\compiler\gravity_semacheck2.h" />
-    <ClInclude Include="..\src\compiler\gravity_symboltable.h" />
-    <ClInclude Include="..\src\compiler\gravity_token.h" />
-    <ClInclude Include="..\src\compiler\gravity_visitor.h" />
-    <ClInclude Include="..\src\optionals\gravity_math.h" />
-    <ClInclude Include="..\src\optionals\gravity_optionals.h" />
-    <ClInclude Include="..\src\runtime\gravity_core.h" />
-    <ClInclude Include="..\src\runtime\gravity_vm.h" />
-    <ClInclude Include="..\src\runtime\gravity_vmmacros.h" />
-    <ClInclude Include="..\src\shared\gravity_array.h" />
-    <ClInclude Include="..\src\shared\gravity_delegate.h" />
-    <ClInclude Include="..\src\shared\gravity_hash.h" />
-    <ClInclude Include="..\src\shared\gravity_macros.h" />
-    <ClInclude Include="..\src\shared\gravity_memory.h" />
-    <ClInclude Include="..\src\shared\gravity_opcodes.h" />
-    <ClInclude Include="..\src\shared\gravity_value.h" />
-    <ClInclude Include="..\src\utils\gravity_debug.h" />
-    <ClInclude Include="..\src\utils\gravity_json.h" />
-    <ClInclude Include="..\src\utils\gravity_utils.h" />
-    <ClInclude Include="unistd.h" />
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\compiler\gravity_ast.c" />
-    <ClCompile Include="..\src\compiler\gravity_codegen.c" />
-    <ClCompile Include="..\src\compiler\gravity_compiler.c" />
-    <ClCompile Include="..\src\compiler\gravity_ircode.c" />
-    <ClCompile Include="..\src\compiler\gravity_lexer.c" />
-    <ClCompile Include="..\src\compiler\gravity_optimizer.c" />
-    <ClCompile Include="..\src\compiler\gravity_parser.c" />
-    <ClCompile Include="..\src\compiler\gravity_semacheck1.c" />
-    <ClCompile Include="..\src\compiler\gravity_semacheck2.c" />
-    <ClCompile Include="..\src\compiler\gravity_symboltable.c" />
-    <ClCompile Include="..\src\compiler\gravity_token.c" />
-    <ClCompile Include="..\src\compiler\gravity_visitor.c" />
-    <ClCompile Include="..\src\optionals\gravity_math.c" />
-    <ClCompile Include="..\src\runtime\gravity_core.c" />
-    <ClCompile Include="..\src\runtime\gravity_vm.c" />
-    <ClCompile Include="..\src\shared\gravity_hash.c" />
-    <ClCompile Include="..\src\shared\gravity_memory.c" />
-    <ClCompile Include="..\src\shared\gravity_value.c" />
-    <ClCompile Include="..\src\utils\gravity_debug.c" />
-    <ClCompile Include="..\src\utils\gravity_json.c" />
-    <ClCompile Include="..\src\utils\gravity_utils.c" />
-  </ItemGroup>
-  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-  <ImportGroup Label="ExtensionTargets">
-  </ImportGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\compiler\debug_macros.h" />
+    <ClInclude Include="..\src\compiler\gravity_ast.h" />
+    <ClInclude Include="..\src\compiler\gravity_codegen.h" />
+    <ClInclude Include="..\src\compiler\gravity_compiler.h" />
+    <ClInclude Include="..\src\compiler\gravity_ircode.h" />
+    <ClInclude Include="..\src\compiler\gravity_lexer.h" />
+    <ClInclude Include="..\src\compiler\gravity_optimizer.h" />
+    <ClInclude Include="..\src\compiler\gravity_parser.h" />
+    <ClInclude Include="..\src\compiler\gravity_semacheck1.h" />
+    <ClInclude Include="..\src\compiler\gravity_semacheck2.h" />
+    <ClInclude Include="..\src\compiler\gravity_symboltable.h" />
+    <ClInclude Include="..\src\compiler\gravity_token.h" />
+    <ClInclude Include="..\src\compiler\gravity_visitor.h" />
+    <ClInclude Include="..\src\optionals\gravity_math.h" />
+    <ClInclude Include="..\src\optionals\gravity_optionals.h" />
+    <ClInclude Include="..\src\runtime\gravity_core.h" />
+    <ClInclude Include="..\src\runtime\gravity_vm.h" />
+    <ClInclude Include="..\src\runtime\gravity_vmmacros.h" />
+    <ClInclude Include="..\src\shared\gravity_array.h" />
+    <ClInclude Include="..\src\shared\gravity_delegate.h" />
+    <ClInclude Include="..\src\shared\gravity_hash.h" />
+    <ClInclude Include="..\src\shared\gravity_macros.h" />
+    <ClInclude Include="..\src\shared\gravity_memory.h" />
+    <ClInclude Include="..\src\shared\gravity_opcodes.h" />
+    <ClInclude Include="..\src\shared\gravity_value.h" />
+    <ClInclude Include="..\src\utils\gravity_debug.h" />
+    <ClInclude Include="..\src\utils\gravity_json.h" />
+    <ClInclude Include="..\src\utils\gravity_utils.h" />
+    <ClInclude Include="unistd.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\compiler\gravity_ast.c" />
+    <ClCompile Include="..\src\compiler\gravity_codegen.c" />
+    <ClCompile Include="..\src\compiler\gravity_compiler.c" />
+    <ClCompile Include="..\src\compiler\gravity_ircode.c" />
+    <ClCompile Include="..\src\compiler\gravity_lexer.c" />
+    <ClCompile Include="..\src\compiler\gravity_optimizer.c" />
+    <ClCompile Include="..\src\compiler\gravity_parser.c" />
+    <ClCompile Include="..\src\compiler\gravity_semacheck1.c" />
+    <ClCompile Include="..\src\compiler\gravity_semacheck2.c" />
+    <ClCompile Include="..\src\compiler\gravity_symboltable.c" />
+    <ClCompile Include="..\src\compiler\gravity_token.c" />
+    <ClCompile Include="..\src\compiler\gravity_visitor.c" />
+    <ClCompile Include="..\src\optionals\gravity_math.c" />
+    <ClCompile Include="..\src\runtime\gravity_core.c" />
+    <ClCompile Include="..\src\runtime\gravity_vm.c" />
+    <ClCompile Include="..\src\shared\gravity_hash.c" />
+    <ClCompile Include="..\src\shared\gravity_memory.c" />
+    <ClCompile Include="..\src\shared\gravity_value.c" />
+    <ClCompile Include="..\src\utils\gravity_debug.c" />
+    <ClCompile Include="..\src\utils\gravity_json.c" />
+    <ClCompile Include="..\src\utils\gravity_utils.c" />
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <VCProjectVersion>15.0</VCProjectVersion>
+    <ProjectGuid>{EC12BE0A-025E-4168-9D2D-419A18CB2EF5}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>gravity</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>gravity</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>StaticLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)lib\$(Platform)\$(Configuration)\</OutDir>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+    <IntDir>$(SolutionDir)obj\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)lib\$(Platform)\$(Configuration)\</OutDir>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+    <IntDir>$(SolutionDir)obj\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)lib\$(Platform)\$(Configuration)\</OutDir>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+    <LinkIncremental>false</LinkIncremental>
+    <IntDir>$(SolutionDir)obj\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)lib\$(Platform)\$(Configuration)\</OutDir>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+    <LinkIncremental>false</LinkIncremental>
+    <IntDir>$(SolutionDir)obj\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_WINDOWS;inline=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <StringPooling>true</StringPooling>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <MinimalRebuild>false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
+      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
+    </Link>
+    <Lib />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;_WINDOWS;inline=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <StringPooling>true</StringPooling>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+      <MinimalRebuild>false</MinimalRebuild>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
+      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
+    </Link>
+    <Lib />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MinSpace</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_WINDOWS;inline=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
+      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
+    </Link>
+    <Lib />
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>MinSpace</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_WINDOWS;inline=;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <DisableSpecificWarnings>4068;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+      <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <StringPooling>true</StringPooling>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <SubSystem>Windows</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <LinkTimeCodeGeneration>Default</LinkTimeCodeGeneration>
+      <ModuleDefinitionFile>$(ProjectDir)exports.def</ModuleDefinitionFile>
+    </Link>
+    <Lib />
+  </ItemDefinitionGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
 </Project>

+ 191 - 197
gravity_visualstudio/gravity.vcxproj.filters

@@ -1,198 +1,192 @@
-<?xml version="1.0" encoding="utf-8"?>
-<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
-  <ItemGroup>
-    <Filter Include="Source Files">
-      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
-      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
-    </Filter>
-    <Filter Include="Header Files">
-      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
-      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
-    </Filter>
-    <Filter Include="Resource Files">
-      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
-      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
-    </Filter>
-    <Filter Include="Header Files\compiler">
-      <UniqueIdentifier>{158e852c-c324-4fb2-ba62-8a1cc81a0a61}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Header Files\runtime">
-      <UniqueIdentifier>{f0f35521-f187-4974-8994-ae203399dbed}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Header Files\shared">
-      <UniqueIdentifier>{73b01cf7-37d3-4943-b47f-8be815d40b1c}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Header Files\utils">
-      <UniqueIdentifier>{84ed3700-7c69-47b8-9594-2c316e56cd7b}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\compiler">
-      <UniqueIdentifier>{9127d843-fc30-4a48-99d1-704175dab5b8}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\utils">
-      <UniqueIdentifier>{b8cf1350-23a5-428d-979a-a1a98451c0c7}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\shared">
-      <UniqueIdentifier>{cc2aae20-631b-43b2-b5a5-ddb653997cea}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\runtime">
-      <UniqueIdentifier>{f749a6f3-c597-4f03-84cd-f658262caebd}</UniqueIdentifier>
-    </Filter>
-    <Filter Include="Source Files\opt">
-      <UniqueIdentifier>{3e8f2185-8296-463c-86de-94c8a5ac3f4b}</UniqueIdentifier>
-    </Filter>
-  </ItemGroup>
-  <ItemGroup>
-    <ClInclude Include="..\src\compiler\debug_macros.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_ast.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_codegen.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_compiler.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_ircode.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_lexer.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_optimizer.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_parser.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_semacheck1.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_semacheck2.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_symboltable.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_token.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\compiler\gravity_visitor.h">
-      <Filter>Header Files\compiler</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\utils\gravity_debug.h">
-      <Filter>Header Files\utils</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\utils\gravity_json.h">
-      <Filter>Header Files\utils</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\utils\gravity_utils.h">
-      <Filter>Header Files\utils</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\shared\gravity_array.h">
-      <Filter>Header Files\shared</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\shared\gravity_delegate.h">
-      <Filter>Header Files\shared</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\shared\gravity_hash.h">
-      <Filter>Header Files\shared</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\shared\gravity_macros.h">
-      <Filter>Header Files\shared</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\shared\gravity_memory.h">
-      <Filter>Header Files\shared</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\shared\gravity_opcodes.h">
-      <Filter>Header Files\shared</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\shared\gravity_value.h">
-      <Filter>Header Files\shared</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\runtime\gravity_core.h">
-      <Filter>Header Files\runtime</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\runtime\gravity_vm.h">
-      <Filter>Header Files\runtime</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\runtime\gravity_vmmacros.h">
-      <Filter>Header Files\runtime</Filter>
-    </ClInclude>
-    <ClInclude Include="unistd.h">
-      <Filter>Header Files</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\optionals\gravity_math.h">
-      <Filter>Source Files\opt</Filter>
-    </ClInclude>
-    <ClInclude Include="..\src\optionals\gravity_optionals.h">
-      <Filter>Source Files\opt</Filter>
-    </ClInclude>
-  </ItemGroup>
-  <ItemGroup>
-    <ClCompile Include="..\src\compiler\gravity_ast.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_codegen.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_compiler.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_ircode.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_lexer.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_optimizer.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_parser.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_semacheck1.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_semacheck2.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_symboltable.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_token.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\compiler\gravity_visitor.c">
-      <Filter>Source Files\compiler</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\utils\gravity_debug.c">
-      <Filter>Source Files\utils</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\utils\gravity_json.c">
-      <Filter>Source Files\utils</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\utils\gravity_utils.c">
-      <Filter>Source Files\utils</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\shared\gravity_hash.c">
-      <Filter>Source Files\shared</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\shared\gravity_memory.c">
-      <Filter>Source Files\shared</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\shared\gravity_value.c">
-      <Filter>Source Files\shared</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\runtime\gravity_core.c">
-      <Filter>Source Files\runtime</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\runtime\gravity_vm.c">
-      <Filter>Source Files\runtime</Filter>
-    </ClCompile>
-    <ClCompile Include="..\src\optionals\gravity_math.c">
-      <Filter>Source Files\opt</Filter>
-    </ClCompile>
-  </ItemGroup>
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="include">
+      <UniqueIdentifier>{91c7749c-0a91-490a-a7df-7a107783622f}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\compiler">
+      <UniqueIdentifier>{a754105b-4e51-4f37-a549-d8473e82016a}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\runtime">
+      <UniqueIdentifier>{9bfbf753-3405-4d92-94de-0f58ce82367d}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\shared">
+      <UniqueIdentifier>{aab15f72-28ce-4858-90b5-df09da2d3975}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\utils">
+      <UniqueIdentifier>{f3793f5c-3aa2-463b-91e9-c4131ba37ad9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src">
+      <UniqueIdentifier>{4f3e0606-f6fb-4367-a181-f2501c4adaee}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\compiler">
+      <UniqueIdentifier>{36efb9db-cb71-4545-a2fa-323c70e831fa}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\utils">
+      <UniqueIdentifier>{a273150e-4b1a-41ae-a509-940df98109a5}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\shared">
+      <UniqueIdentifier>{56b0a42a-e403-4b41-a63c-053e4c254ef4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\runtime">
+      <UniqueIdentifier>{248652c9-1176-43e6-9567-2b89b59afbc4}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\opt">
+      <UniqueIdentifier>{3f5f57f1-6f1c-4261-904d-9cbcded63f85}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="unistd.h">
+      <Filter>include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\debug_macros.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_ast.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_codegen.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_compiler.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_ircode.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_lexer.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_optimizer.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_parser.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_semacheck1.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_semacheck2.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_symboltable.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_token.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_visitor.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_core.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_vm.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_vmmacros.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_array.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_delegate.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_hash.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_macros.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_memory.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_opcodes.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_value.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_debug.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_json.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_utils.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\optionals\gravity_math.h">
+      <Filter>src\opt</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\optionals\gravity_optionals.h">
+      <Filter>src\opt</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\compiler\gravity_codegen.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_compiler.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_ircode.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_lexer.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_optimizer.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_parser.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_semacheck1.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_semacheck2.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_symboltable.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_token.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_visitor.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\utils\gravity_debug.c">
+      <Filter>src\utils</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\utils\gravity_json.c">
+      <Filter>src\utils</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\utils\gravity_utils.c">
+      <Filter>src\utils</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\shared\gravity_hash.c">
+      <Filter>src\shared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\shared\gravity_memory.c">
+      <Filter>src\shared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\shared\gravity_value.c">
+      <Filter>src\shared</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\runtime\gravity_core.c">
+      <Filter>src\runtime</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\runtime\gravity_vm.c">
+      <Filter>src\runtime</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\optionals\gravity_math.c">
+      <Filter>src\opt</Filter>
+    </ClCompile>
+    <ClCompile Include="..\src\compiler\gravity_ast.c">
+      <Filter>src\compiler</Filter>
+    </ClCompile>
+  </ItemGroup>
 </Project>

+ 206 - 0
gravity_visualstudio/gravity_cli.vcxproj

@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <VCProjectVersion>15.0</VCProjectVersion>
+    <ProjectGuid>{82CE17B8-1BC6-4021-A966-0CEC58DB641D}</ProjectGuid>
+    <RootNamespace>gravity_cli</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>gravity_cli</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\cli\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\cli\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\cli\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\cli\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)bin\cli\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\cli\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)bin\cli\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\cli\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+    <IncludePath>$(ProjectDir);$(ProjectDir)..\src\utils;$(ProjectDir)..\src\shared;$(ProjectDir)..\src\runtime;$(ProjectDir)..\src\optionals;$(ProjectDir)..\src\compiler;$(IncludePath)</IncludePath>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MinSpace</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <StringPooling>false</StringPooling>
+      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <StringPooling>false</StringPooling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <StringPooling>false</StringPooling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MinSpace</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <StringPooling>false</StringPooling>
+      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Console</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\compiler\debug_macros.h" />
+    <ClInclude Include="..\src\compiler\gravity_ast.h" />
+    <ClInclude Include="..\src\compiler\gravity_codegen.h" />
+    <ClInclude Include="..\src\compiler\gravity_compiler.h" />
+    <ClInclude Include="..\src\compiler\gravity_ircode.h" />
+    <ClInclude Include="..\src\compiler\gravity_lexer.h" />
+    <ClInclude Include="..\src\compiler\gravity_optimizer.h" />
+    <ClInclude Include="..\src\compiler\gravity_parser.h" />
+    <ClInclude Include="..\src\compiler\gravity_semacheck1.h" />
+    <ClInclude Include="..\src\compiler\gravity_semacheck2.h" />
+    <ClInclude Include="..\src\compiler\gravity_symboltable.h" />
+    <ClInclude Include="..\src\compiler\gravity_token.h" />
+    <ClInclude Include="..\src\compiler\gravity_visitor.h" />
+    <ClInclude Include="..\src\runtime\gravity_core.h" />
+    <ClInclude Include="..\src\runtime\gravity_vm.h" />
+    <ClInclude Include="..\src\runtime\gravity_vmmacros.h" />
+    <ClInclude Include="..\src\shared\gravity_array.h" />
+    <ClInclude Include="..\src\shared\gravity_delegate.h" />
+    <ClInclude Include="..\src\shared\gravity_hash.h" />
+    <ClInclude Include="..\src\shared\gravity_macros.h" />
+    <ClInclude Include="..\src\shared\gravity_memory.h" />
+    <ClInclude Include="..\src\shared\gravity_opcodes.h" />
+    <ClInclude Include="..\src\shared\gravity_value.h" />
+    <ClInclude Include="..\src\utils\gravity_debug.h" />
+    <ClInclude Include="..\src\utils\gravity_json.h" />
+    <ClInclude Include="..\src\utils\gravity_utils.h" />
+    <ClInclude Include="unistd.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\cli\gravity.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 114 - 0
gravity_visualstudio/gravity_cli.vcxproj.filters

@@ -0,0 +1,114 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="include">
+      <UniqueIdentifier>{b0c80c0d-95af-4e26-9c3e-637541484df7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\compiler">
+      <UniqueIdentifier>{c581604b-3c03-4fa4-9b5c-a86836018102}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\runtime">
+      <UniqueIdentifier>{42ba48c2-f8d4-4d47-ba8e-53f9eb6840d9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\shared">
+      <UniqueIdentifier>{8adf23ca-77a1-4c5b-9668-cddb3e9891d7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\utils">
+      <UniqueIdentifier>{ec6eb4d2-c3a8-407d-9538-6076dcffa379}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src">
+      <UniqueIdentifier>{cf260d94-cd49-4264-944f-fe56775c9fc9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="src\cli">
+      <UniqueIdentifier>{0378fe6a-1198-44d4-8eba-ccdb994ea0b8}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="unistd.h">
+      <Filter>include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\debug_macros.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_ast.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_codegen.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_compiler.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_ircode.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_lexer.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_optimizer.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_parser.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_semacheck1.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_semacheck2.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_symboltable.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_token.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_visitor.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_core.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_vm.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_vmmacros.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_array.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_delegate.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_hash.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_macros.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_memory.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_opcodes.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_value.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_debug.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_json.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_utils.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\src\cli\gravity.c">
+      <Filter>src\cli</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>

+ 208 - 0
gravity_visualstudio/gravity_dll.vcxproj

@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <VCProjectVersion>15.0</VCProjectVersion>
+    <ProjectGuid>{862AC390-2E85-4218-B640-013245710C17}</ProjectGuid>
+    <RootNamespace>gravity_dll</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+    <ProjectName>gravity_dll</ProjectName>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>MultiByte</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>$(SolutionDir)bin\dll\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\dll\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>$(SolutionDir)bin\dll\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\dll\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>$(SolutionDir)bin\dll\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\dll\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>$(SolutionDir)bin\dll\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>$(SolutionDir)obj\dll\$(Platform)\$(Configuration)\</IntDir>
+    <TargetName>gravity</TargetName>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MinSpace</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <PreprocessorDefinitions>BUILD_GRAVITY_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>false</StringPooling>
+      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Windows</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <PreprocessorDefinitions>BUILD_GRAVITY_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>false</StringPooling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Windows</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <PreprocessorDefinitions>BUILD_GRAVITY_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>false</StringPooling>
+      <MinimalRebuild>false</MinimalRebuild>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+    </ClCompile>
+    <Link>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Windows</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MinSpace</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>false</SDLCheck>
+      <ConformanceMode>true</ConformanceMode>
+      <PreprocessorDefinitions>BUILD_GRAVITY_API;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <StringPooling>false</StringPooling>
+      <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+      <OmitFramePointers>true</OmitFramePointers>
+      <MultiProcessorCompilation>true</MultiProcessorCompilation>
+    </ClCompile>
+    <Link>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ModuleDefinitionFile>exports.def</ModuleDefinitionFile>
+      <AdditionalDependencies>lib\$(Platform)\$(Configuration)\gravity.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <SubSystem>Windows</SubSystem>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="..\src\compiler\debug_macros.h" />
+    <ClInclude Include="..\src\compiler\gravity_ast.h" />
+    <ClInclude Include="..\src\compiler\gravity_codegen.h" />
+    <ClInclude Include="..\src\compiler\gravity_compiler.h" />
+    <ClInclude Include="..\src\compiler\gravity_ircode.h" />
+    <ClInclude Include="..\src\compiler\gravity_lexer.h" />
+    <ClInclude Include="..\src\compiler\gravity_optimizer.h" />
+    <ClInclude Include="..\src\compiler\gravity_parser.h" />
+    <ClInclude Include="..\src\compiler\gravity_semacheck1.h" />
+    <ClInclude Include="..\src\compiler\gravity_semacheck2.h" />
+    <ClInclude Include="..\src\compiler\gravity_symboltable.h" />
+    <ClInclude Include="..\src\compiler\gravity_token.h" />
+    <ClInclude Include="..\src\compiler\gravity_visitor.h" />
+    <ClInclude Include="..\src\runtime\gravity_core.h" />
+    <ClInclude Include="..\src\runtime\gravity_vm.h" />
+    <ClInclude Include="..\src\runtime\gravity_vmmacros.h" />
+    <ClInclude Include="..\src\shared\gravity_array.h" />
+    <ClInclude Include="..\src\shared\gravity_delegate.h" />
+    <ClInclude Include="..\src\shared\gravity_hash.h" />
+    <ClInclude Include="..\src\shared\gravity_macros.h" />
+    <ClInclude Include="..\src\shared\gravity_memory.h" />
+    <ClInclude Include="..\src\shared\gravity_opcodes.h" />
+    <ClInclude Include="..\src\shared\gravity_value.h" />
+    <ClInclude Include="..\src\utils\gravity_debug.h" />
+    <ClInclude Include="..\src\utils\gravity_json.h" />
+    <ClInclude Include="..\src\utils\gravity_utils.h" />
+    <ClInclude Include="unistd.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="dll.c" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 106 - 0
gravity_visualstudio/gravity_dll.vcxproj.filters

@@ -0,0 +1,106 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="include">
+      <UniqueIdentifier>{b0c80c0d-95af-4e26-9c3e-637541484df7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\compiler">
+      <UniqueIdentifier>{c581604b-3c03-4fa4-9b5c-a86836018102}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\runtime">
+      <UniqueIdentifier>{42ba48c2-f8d4-4d47-ba8e-53f9eb6840d9}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\shared">
+      <UniqueIdentifier>{8adf23ca-77a1-4c5b-9668-cddb3e9891d7}</UniqueIdentifier>
+    </Filter>
+    <Filter Include="include\utils">
+      <UniqueIdentifier>{ec6eb4d2-c3a8-407d-9538-6076dcffa379}</UniqueIdentifier>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="unistd.h">
+      <Filter>include</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\debug_macros.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_ast.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_codegen.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_compiler.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_ircode.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_lexer.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_optimizer.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_parser.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_semacheck1.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_semacheck2.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_symboltable.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_token.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\compiler\gravity_visitor.h">
+      <Filter>include\compiler</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_core.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_vm.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\runtime\gravity_vmmacros.h">
+      <Filter>include\runtime</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_array.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_delegate.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_hash.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_macros.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_memory.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_opcodes.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\shared\gravity_value.h">
+      <Filter>include\shared</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_debug.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_json.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+    <ClInclude Include="..\src\utils\gravity_utils.h">
+      <Filter>include\utils</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="dll.c" />
+  </ItemGroup>
+</Project>

+ 10 - 11
src/cli/gravity.c

@@ -44,7 +44,7 @@ static const char *test_folder_path = NULL;
 static bool quiet_flag = false;
 
 static void report_error (gravity_vm *vm, error_type_t error_type, const char *message, error_desc_t error_desc, void *xdata) {
-	#pragma unused(vm, xdata)
+  (void) vm, (void) xdata;
 	const char *type = "N/A";
 	switch (error_type) {
 		case GRAVITY_ERROR_NONE: type = "NONE"; break;
@@ -61,7 +61,7 @@ static void report_error (gravity_vm *vm, error_type_t error_type, const char *m
 }
 
 static const char *load_file (const char *file, size_t *size, uint32_t *fileid, void *xdata) {
-	#pragma unused(fileid, xdata)
+    (void) fileid, (void) xdata;
 
 	// this callback is called each time an import statement is parsed
 	// file arg represents what user wrote after the import keyword, for example:
@@ -93,17 +93,17 @@ static const char *load_file (const char *file, size_t *size, uint32_t *fileid,
 // MARK: - Unit Test -
 
 static void unittest_init (const char *target_file, unittest_data *data) {
-    #pragma unused(target_file)
+    (void) target_file;
     ++data->ncount;
     data->processed = false;
 }
 
 static void unittest_cleanup (const char *target_file, unittest_data *data) {
-    #pragma unused(target_file,data)
+    (void) target_file, (void) data;
 }
 
 static void unittest_callback (gravity_vm *vm, error_type_t error_type, const char *description, const char *notes, gravity_value_t value, int32_t row, int32_t col, void *xdata) {
-    #pragma unused(vm)
+    (void) vm;
     unittest_data *data = (unittest_data *)xdata;
     data->expected_error = error_type;
     data->expected_value = value;
@@ -115,7 +115,7 @@ static void unittest_callback (gravity_vm *vm, error_type_t error_type, const ch
 }
 
 static void unittest_error (gravity_vm *vm, error_type_t error_type, const char *message, error_desc_t error_desc, void *xdata) {
-    #pragma unused(vm)
+    (void) vm;
     
     unittest_data *data = (unittest_data *)xdata;
     if (data->processed == true) return; // ignore 2nd error
@@ -151,7 +151,7 @@ static void unittest_error (gravity_vm *vm, error_type_t error_type, const char
 }
 
 static const char *unittest_read (const char *path, size_t *size, uint32_t *fileid, void *xdata) {
-    #pragma unused(fileid,xdata)
+    (void) fileid, (void) xdata;
     if (file_exists(path)) return file_read(path, size);
     
     // this unittest is able to resolve path only next to main test folder (not in nested folders)
@@ -315,8 +315,7 @@ static op_type parse_args (int argc, const char* argv[]) {
 static void gravity_repl (void) {
 	printf("REPL not yet implemented.\n");
 	exit(0);
-
-	/*
+#if 0
 	// setup compiler/VM delegate
 	gravity_delegate_t delegate = {
 		.error_callback = report_error,
@@ -330,13 +329,13 @@ static void gravity_repl (void) {
 	printf("Welcome to Gravity v%s\n", GRAVITY_VERSION);
 	while((line = readline("> ", &length)) != NULL) {
 		// to be implemented
-		//	gravity_compiler_eval(compiler, vm, line, length);
+		// gravity_compiler_eval(compiler, vm, line, length);
 		free(line);
 	}
 
 	gravity_compiler_free(compiler);
 	gravity_vm_free(vm);
-	 */
+#endif
 }
 
 static void gravity_unittest (void) {

+ 5 - 1
src/runtime/gravity_vm.c

@@ -1542,7 +1542,11 @@ bool gravity_vm_runclosure (gravity_vm *vm, gravity_closure_t *closure, gravity_
 	DEBUG_STACK();
 
     // self value is default to the context where the closure has been created (or set by the user)
-    gravity_value_t selfvalue = (closure->context) ? VALUE_FROM_OBJECT(closure->context) : sender;
+    gravity_value_t selfvalue;
+
+    // MSVC bug: designated initializer was prematurely evaluated
+    if (closure->context) selfvalue = VALUE_FROM_OBJECT(closure->context);
+    else selfvalue = sender;
     
     // we need a way to give user the ability to access the sender value from a closure
     

+ 4 - 4
src/shared/gravity_value.c

@@ -1521,18 +1521,18 @@ gravity_instance_t *gravity_instance_new (gravity_vm *vm, gravity_class_t *c) {
 	return instance;
 }
 
-gravity_instance_t *gravity_instance_clone (gravity_vm *vm, gravity_instance_t *src) {
-	gravity_class_t *c = src->objclass;
+gravity_instance_t *gravity_instance_clone (gravity_vm *vm, gravity_instance_t *srcInstance) {
+	gravity_class_t *c = srcInstance->objclass;
 
 	gravity_instance_t *instance = (gravity_instance_t *)mem_alloc(NULL, sizeof(gravity_instance_t));
 	instance->isa = gravity_class_instance;
     instance->objclass = c; // TODO: if gravity_class_is_anon(c) then c must be deeply copied
     
     gravity_delegate_t *delegate = gravity_vm_delegate(vm);
-    instance->xdata = (src->xdata && delegate->bridge_clone) ? delegate->bridge_clone(vm, src->xdata) : NULL;
+    instance->xdata = (srcInstance->xdata && delegate->bridge_clone) ? delegate->bridge_clone(vm, srcInstance->xdata) : NULL;
     
     if (c->nivars) instance->ivars = (gravity_value_t *)mem_alloc(NULL, c->nivars * sizeof(gravity_value_t));
-	for (uint32_t i=0; i<c->nivars; ++i) instance->ivars[i] = src->ivars[i];
+	for (uint32_t i=0; i<c->nivars; ++i) instance->ivars[i] = srcInstance->ivars[i];
 
 	if (vm) gravity_vm_transfer(vm, (gravity_object_t*) instance);
 	return instance;

+ 7 - 9
src/shared/gravity_value.h

@@ -150,14 +150,12 @@ extern "C" {
 #define GRAVITY_COMPUTED_INDEX				UINT16_MAX-1
 
 //DLL export/import support for Windows.
-#ifdef _WIN32
-	#ifdef BUILD_GRAVITY_API
-		#define GRAVITY_API __declspec(dllexport)
-	#else
-		#define GRAVITY_API __declspec(dllimport)
-	#endif
-#else
-	#define GRAVITY_API
+#ifndef GRAVITY_API
+    #if defined(_WIN32) && defined(BUILD_GRAVITY_API)
+      #define GRAVITY_API __declspec(dllexport)
+    #else
+	    #define GRAVITY_API
+    #endif
 #endif
 
 // MARK: - STRUCT -
@@ -480,7 +478,7 @@ GRAVITY_API uint32_t			gravity_fiber_size (gravity_vm *vm, gravity_fiber_t *fibe
 
 // MARK: - INSTANCE -
 GRAVITY_API gravity_instance_t	*gravity_instance_new (gravity_vm *vm, gravity_class_t *c);
-GRAVITY_API gravity_instance_t	*gravity_instance_clone (gravity_vm *vm, gravity_instance_t *instance);
+GRAVITY_API gravity_instance_t	*gravity_instance_clone (gravity_vm *vm, gravity_instance_t *srcInstance);
 GRAVITY_API void				gravity_instance_setivar (gravity_instance_t *instance, uint32_t idx, gravity_value_t value);
 GRAVITY_API void				gravity_instance_setxdata (gravity_instance_t *i, void *xdata);
 GRAVITY_API void				gravity_instance_free (gravity_vm *vm, gravity_instance_t *i);

+ 0 - 1
src/utils/gravity_json.h

@@ -68,7 +68,6 @@ void		json_pop (json_t *json, uint32_t n);
       #define json_int_t int64_t
    #else
       #define json_int_t __int64
-      #define snprintf   _snprintf
    #endif
 #endif
 

+ 6 - 7
src/utils/gravity_utils.c

@@ -240,7 +240,7 @@ bool is_directory (const char *path) {
 
 DIRREF directory_init (const char *dirpath) {
 	#ifdef WIN32
-	WIN32_FIND_DATA findData;
+	WIN32_FIND_DATAW findData;
 	WCHAR			path[MAX_PATH];
 	WCHAR			dirpathW[MAX_PATH];
 	HANDLE			hFind;
@@ -250,7 +250,7 @@ DIRREF directory_init (const char *dirpath) {
 	MultiByteToWideChar(CP_UTF8, 0, dirpath, -1, dirpathW, MAX_PATH);
 	
 	// in this way I can be sure that the first file returned (and lost) is .
-	PathCombineW(path, dirpathW, _T("*"));
+	PathCombineW(path, dirpathW, L"*");
 	
 	// if the path points to a symbolic link, the WIN32_FIND_DATA buffer contains
 	// information about the symbolic link, not the target
@@ -265,15 +265,14 @@ const char *directory_read (DIRREF ref) {
 	
 	while (1) {
 		#ifdef WIN32
-		WIN32_FIND_DATA findData;
-		char 			*file_name;
+		WIN32_FIND_DATAA findData;
 		
-		if (FindNextFile(ref, &findData) == 0) {
+		if (FindNextFileA(ref, &findData) == 0) {
 			FindClose(ref);
 			return NULL;
 		}
 		if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue;
-		if (findData.cFileName == NULL) continue;
+		if (findData.cFileName[0] == '\0') continue;
 		if (findData.cFileName[0] == '.') continue;
 		return (const char*)findData.cFileName;
 		#else
@@ -282,7 +281,7 @@ const char *directory_read (DIRREF ref) {
 			closedir(ref);
 			return NULL;
 		}
-		if (d->d_name[0] == 0) continue;
+		if (d->d_name[0] == '\0') continue;
 		if (d->d_name[0] == '.') continue;
 		return (const char *)d->d_name;
 		#endif