Browse Source

Merge pull request #243 from stevefan1999/patch-1

Windows support
Marco Bambini 7 years ago
parent
commit
1b7e67d27d

+ 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>

+ 48 - 47
src/cli/gravity.c

@@ -44,66 +44,66 @@ 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)
-    const char *type = "N/A";
-    switch (error_type) {
-        case GRAVITY_ERROR_NONE: type = "NONE"; break;
-        case GRAVITY_ERROR_SYNTAX: type = "SYNTAX"; break;
-        case GRAVITY_ERROR_SEMANTIC: type = "SEMANTIC"; break;
-        case GRAVITY_ERROR_RUNTIME: type = "RUNTIME"; break;
-        case GRAVITY_WARNING: type = "WARNING"; break;
-        case GRAVITY_ERROR_IO: type = "I/O"; break;
-    }
-
-    if (error_type == GRAVITY_ERROR_RUNTIME) printf("RUNTIME ERROR: ");
-    else printf("%s ERROR on %d (%d,%d): ", type, error_desc.fileid, error_desc.lineno, error_desc.colno);
-    printf("%s\n", message);
+  (void) vm, (void) xdata;
+	const char *type = "N/A";
+	switch (error_type) {
+		case GRAVITY_ERROR_NONE: type = "NONE"; break;
+		case GRAVITY_ERROR_SYNTAX: type = "SYNTAX"; break;
+		case GRAVITY_ERROR_SEMANTIC: type = "SEMANTIC"; break;
+		case GRAVITY_ERROR_RUNTIME: type = "RUNTIME"; break;
+		case GRAVITY_WARNING: type = "WARNING"; break;
+		case GRAVITY_ERROR_IO: type = "I/O"; break;
+	}
+
+	if (error_type == GRAVITY_ERROR_RUNTIME) printf("RUNTIME ERROR: ");
+	else printf("%s ERROR on %d (%d,%d): ", type, error_desc.fileid, error_desc.lineno, error_desc.colno);
+	printf("%s\n", message);
 }
 
 static const char *load_file (const char *file, size_t *size, uint32_t *fileid, void *xdata) {
-    #pragma unused(fileid, xdata)
-
-    // this callback is called each time an import statement is parsed
-    // file arg represents what user wrote after the import keyword, for example:
-    // import "file2"
-    // import "file2.gravity"
-    // import "../file2"
-    // import "/full_path_to_file2"
-
-    // it is callback's responsability to resolve file path based on current working directory
-    // or based on user defined search paths
-    // and returns:
-    // size of file in *size
-    // fileid (if any) in *fileid
-    // content of file as return value of the function
-
-    // fileid will then be used each time an error is reported by the compiler
-    // so it is responsability of this function to map somewhere the association
-    // between fileid and real file/path name
-
-    // fileid is not used in this example
-    // xdata not used here but it the xdata field set in the delegate
-    // please note than in this simple example the imported file must be
-    // in the same folder as the main input file
-
-    if (!file_exists(file)) return NULL;
-    return file_read(file, size);
+    (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:
+	// import "file2"
+	// import "file2.gravity"
+	// import "../file2"
+	// import "/full_path_to_file2"
+
+	// it is callback's responsability to resolve file path based on current working directory
+	// or based on user defined search paths
+	// and returns:
+	// size of file in *size
+	// fileid (if any) in *fileid
+	// content of file as return value of the function
+
+	// fileid will then be used each time an error is reported by the compiler
+	// so it is responsability of this function to map somewhere the association
+	// between fileid and real file/path name
+
+	// fileid is not used in this example
+	// xdata not used here but it the xdata field set in the delegate
+	// please note than in this simple example the imported file must be
+	// in the same folder as the main input file
+
+	if (!file_exists(file)) return NULL;
+	return file_read(file, size);
 }
 
 // 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)
@@ -313,6 +313,7 @@ static op_type parse_args (int argc, const char* argv[]) {
 // MARK: - Special Modes
 
 static void gravity_repl (void) {
+
     printf("REPL not yet implemented.\n");
     exit(0);
 
@@ -336,7 +337,7 @@ static void gravity_repl (void) {
 
     gravity_compiler_free(compiler);
     gravity_vm_free(vm);
-     */
+    */
 }
 
 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
     

+ 2 - 1
src/shared/gravity_value.c

@@ -1523,12 +1523,13 @@ gravity_instance_t *gravity_instance_new (gravity_vm *vm, gravity_class_t *c) {
 
 gravity_instance_t *gravity_instance_clone (gravity_vm *vm, gravity_instance_t *src_instance) {
     gravity_class_t *c = src_instance->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_instance->xdata && delegate->bridge_clone) ? delegate->bridge_clone(vm, src_instance->xdata) : NULL;
     
     if (c->nivars) instance->ivars = (gravity_value_t *)mem_alloc(NULL, c->nivars * sizeof(gravity_value_t));

+ 3 - 7
src/shared/gravity_value.h

@@ -150,14 +150,10 @@ 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
+#if !defined(GRAVITY_API) && defined(_WIN32) && defined(BUILD_GRAVITY_API)
+  #define GRAVITY_API __declspec(dllexport)
 #else
-    #define GRAVITY_API
+  #define GRAVITY_API
 #endif
 
 // MARK: - STRUCT -

+ 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
 

+ 45 - 46
src/utils/gravity_utils.c

@@ -239,55 +239,54 @@ bool is_directory (const char *path) {
 }
 
 DIRREF directory_init (const char *dirpath) {
-    #ifdef WIN32
-    WIN32_FIND_DATA findData;
-    WCHAR            path[MAX_PATH];
-    WCHAR            dirpathW[MAX_PATH];
-    HANDLE            hFind;
-    (void)hFind;
-    
-    // convert dirpath to dirpathW
-    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("*"));
-    
-    // if the path points to a symbolic link, the WIN32_FIND_DATA buffer contains
-    // information about the symbolic link, not the target
-    return FindFirstFileW(path, &findData);
-    #else
-    return opendir(dirpath);
-    #endif
+	#ifdef WIN32
+	WIN32_FIND_DATAW findData;
+	WCHAR			path[MAX_PATH];
+	WCHAR			dirpathW[MAX_PATH];
+	HANDLE			hFind;
+	(void)hFind;
+	
+	// convert dirpath to dirpathW
+	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, L"*");
+	
+	// if the path points to a symbolic link, the WIN32_FIND_DATA buffer contains
+	// information about the symbolic link, not the target
+	return FindFirstFileW(path, &findData);
+	#else
+	return opendir(dirpath);
+	#endif
 }
 
 const char *directory_read (DIRREF ref) {
-    if (ref == NULL) return NULL;
-    
-    while (1) {
-        #ifdef WIN32
-        WIN32_FIND_DATA findData;
-        char             *file_name;
-        
-        if (FindNextFile(ref, &findData) == 0) {
-            FindClose(ref);
-            return NULL;
-        }
-        if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue;
-        if (findData.cFileName == NULL) continue;
-        if (findData.cFileName[0] == '.') continue;
-        return (const char*)findData.cFileName;
-        #else
-        struct dirent *d;
-        if ((d = readdir(ref)) == NULL) {
-            closedir(ref);
-            return NULL;
-        }
-        if (d->d_name[0] == 0) continue;
-        if (d->d_name[0] == '.') continue;
-        return (const char *)d->d_name;
-        #endif
-    }
-    return NULL;
+	if (ref == NULL) return NULL;
+	
+	while (1) {
+		#ifdef WIN32
+		WIN32_FIND_DATAA findData;
+		
+		if (FindNextFileA(ref, &findData) == 0) {
+			FindClose(ref);
+			return NULL;
+		}
+		if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue;
+		if (findData.cFileName[0] == '\0') continue;
+		if (findData.cFileName[0] == '.') continue;
+		return (const char*)findData.cFileName;
+		#else
+		struct dirent *d;
+		if ((d = readdir(ref)) == NULL) {
+			closedir(ref);
+			return NULL;
+		}
+		if (d->d_name[0] == '\0') continue;
+		if (d->d_name[0] == '.') continue;
+		return (const char *)d->d_name;
+		#endif
+	}
+	return NULL;
 }
 
 // MARK: - String Functions -