Skip to content

Commit

Permalink
Feature/binding (#3)
Browse files Browse the repository at this point in the history
* move syntax code to its own directory

* fix build system to take objects

* Added BoundBinary, converted the evaluator from SyntaxTree, parenthesisnodes remain todo

* add operator overloading for valuetype, fix boolean bug in lexer, and add boolean binary expressions

* delete evaluator from SyntaxTree, fix tests. update Evaluator to support binary boolean operations

* turn paren case back on, fix logical errors, add testcases, and fix nested binaryExpresssion cases
  • Loading branch information
farzonl authored Aug 22, 2022
1 parent 37a5a7e commit f9d4987
Show file tree
Hide file tree
Showing 66 changed files with 1,671 additions and 310 deletions.
44 changes: 44 additions & 0 deletions .clang-tidy
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#clang-tidy copied from chromium
---
Checks: '-*,
bugprone-argument-comment,
bugprone-dangling-handle,
bugprone-inaccurate-erase,
bugprone-string-constructor,
bugprone-string-integer-assignment,
bugprone-unused-raii,
bugprone-use-after-move,
google-build-explicit-make-pair,
#google-explicit-constructor,
#google-readability-casting,
modernize-avoid-bind,
modernize-concat-nested-namespaces,
#modernize-loop-convert,
#modernize-make-shared,
#modernize-make-unique,
#modernize-redundant-void-arg,
#modernize-replace-random-shuffle,
#modernize-shrink-to-fit,
modernize-use-bool-literals,
#modernize-use-default-member-init,
#modernize-use-emplace,
#modernize-use-equals-default,
#modernize-use-equals-delete,
#modernize-use-noexcept,
#modernize-use-nullptr,
#modernize-use-override,
#modernize-use-transparent-functors,
#readability-redundant-member-init'
CheckOptions:
- key: bugprone-dangling-handle.HandleClasses
value: ::std::basic_string_view;::std::span;::absl::string_view;::base::BasicStringPiece;::base::span
- key: bugprone-string-constructor.StringNames
value: ::std::basic_string;::std::basic_string_view;::base::BasicStringPiece
- key: modernize-use-default-member-init.UseAssignment
value: 1
# This relaxes modernize-use-emplace in some cases; we might want to make it
# more aggressive in the future. See discussion on
# https://groups.google.com/a/chromium.org/g/cxx/c/noMMTNYiM0w .
- key: modernize-use-emplace.IgnoreImplicitConstructors
value: 1
...
22 changes: 22 additions & 0 deletions .github/workflows/clang-format.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: clang-format Check
on:
pull_request:
branches:
- '**'
jobs:
formatting-check:
name: Formatting Check
runs-on: ubuntu-latest
strategy:
matrix:
path:
- 'src'
- 'fuzz'
- 'test'
steps:
- uses: actions/checkout@v2
- name: Run clang-format style check for C/C++ programs.
uses: jidicula/[email protected]
with:
clang-format-version: '14'
check-path: ${{ matrix.path }}
136 changes: 136 additions & 0 deletions .github/workflows/cmake-debug.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
name: CMake Debug

on:
push:
branches:
- master
paths:
- src/**
- test/**
- fuzz/**
- .github/workflows/cmake.yml
pull_request:
branches:
- '**'
paths:
- src/**
- test/**
- fuzz/**
- .github/workflows/cmake.yml
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Debug

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
artifact_dlib_ext: .so
artifact_staticlib_ext: .a
- os: windows-latest
artifact_exec_ext: .exe
artifact_dlib_ext: .dll
artifact_staticlib_ext: .lib
# Note: I wanted to use env.BUILD_TYPE, but it isn't taking
#artifact_out_dir: ${{ BUILD_TYPE }}/
artifact_out_dir: Debug/
artifact_os_name: Windows
artifact_arch: x86_64
- os: macos-latest
artifact_dlib_ext: .dylib
artifact_staticlib_ext: .a
steps:
- uses: actions/checkout@v2
- name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands
run: cmake -E make_directory ${{github.workspace}}/build

- name: Cache C++ dependencies in Packages Directory
uses: actions/cache@v3
with:
path: |
packages
key: ${{ runner.OS }}-c++-packages-cache-Debug-${{ hashFiles('depsCache.json') }}
restore-keys: |
${{ runner.OS }}-c++-packages-cache-Debug-
- name: Configure CMake
# Use a bash shell so we can use the same syntax for environment variable
# access regardless of the host operating system
shell: bash
working-directory: ${{github.workspace}}/build
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE

- name: Build
working-directory: ${{github.workspace}}/build
shell: bash
# Execute the build. You can specify a specific target with "--target <NAME>"
run: cmake --build . --config $BUILD_TYPE
- name: Set variables (Mac\Linux)
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macOS-latest'
run: |
APP=$(cat $GITHUB_WORKSPACE/src/lib/Version/appName.txt)
VER=$(cat $GITHUB_WORKSPACE/src/lib/Version/version.txt)
echo "VERSION=$VER" >> $GITHUB_ENV
echo "APPNAME=$APP" >> $GITHUB_ENV
- name: Set variables (Windows)
if: matrix.os == 'windows-latest'
run: |
$APP = type .\src\lib\Version\appName.txt
$VER = type .\src\lib\Version\version.txt
echo "VERSION=$VER" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
echo "APPNAME=$APP" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
- name: Test Unix-like
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macOS-latest'
working-directory: ${{github.workspace}}/build
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ./test/${{ env.APPNAME }}Lang_TEST

- name: Test Windows
if: matrix.os == 'windows-latest'
working-directory: ${{github.workspace}}/build
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ./test/${{ matrix.artifact_out_dir}}${{ env.APPNAME }}Lang_TEST${{ matrix.artifact_exec_ext }}

#- name: Linux Code Coverage
# if: matrix.os == 'ubuntu-latest'
# working-directory: ${{github.workspace}}
# shell: bash
# # Execute tests defined by the CMake configuration.
# # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
# run: ./scripts/runGcov.sh
- name: Prepare Binaries for upload (Mac\Linux)
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macOS-latest'
shell: bash
run: |
mkdir ${{github.workspace}}/artifacts
cp build/src/lib/lib${{ env.APPNAME }}Core${{ matrix.artifact_staticlib_ext }} ${{github.workspace}}/artifacts
cp build/src/cli/${{ env.APPNAME }} ${{github.workspace}}/artifacts
pushd ${{github.workspace}}
zip -r ${{ env.APPNAME }}-$(uname -s)-$(uname -m).zip artifacts
popd
- name: Prepare Binaries for upload (windows)
if: matrix.os == 'windows-latest'
shell: powershell
run: |
[system.io.directory]::CreateDirectory("${{github.workspace}}/artifacts")
Copy-Item "build/src/lib/${{ matrix.artifact_out_dir}}${{ env.APPNAME }}Core${{ matrix.artifact_staticlib_ext }}" -Destination "${{github.workspace}}/artifacts"
Copy-Item "build/src/cli/${{ matrix.artifact_out_dir }}${{ env.APPNAME }}${{ matrix.artifact_exec_ext }}" -Destination "${{github.workspace}}/artifacts"
Compress-Archive -Path ${{github.workspace}}/artifacts/* -DestinationPath ${{ env.APPNAME }}-${{matrix.artifact_os_name}}-${{matrix.artifact_arch}}.zip
- name: 'Upload Pull Request Artifact'
uses: actions/upload-artifact@v3
if: startsWith(github.ref, 'refs/pull/')
with:
name: ${{ env.APPNAME }} Pull Request Artifacts
path: ${{ env.APPNAME }}-*.zip
retention-days: 5
148 changes: 148 additions & 0 deletions .github/workflows/cmake-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
name: CMake Release

on:
push:
branches:
- master
paths:
- src/**
- test/**
- fuzz/**
- .github/workflows/cmake.yml
pull_request:
branches:
- '**'
paths:
- src/**
- test/**
- fuzz/**
- .github/workflows/cmake.yml
env:
# Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
BUILD_TYPE: Release

jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
artifact_dlib_ext: .so
artifact_staticlib_ext: .a
- os: windows-latest
artifact_exec_ext: .exe
artifact_dlib_ext: .dll
artifact_staticlib_ext: .lib
# Note: I wanted to use env.BUILD_TYPE, but it isn't taking
#artifact_out_dir: ${{ BUILD_TYPE }}/
artifact_out_dir: Release/
artifact_os_name: Windows
artifact_arch: x86_64
- os: macos-latest
artifact_dlib_ext: .dylib
artifact_staticlib_ext: .a
steps:
- uses: actions/checkout@v2
# - run: |
# sudo apt install clang-14 lldb-14 lld-14 libfuzzer-14-dev
# if: matrix.os == 'ubuntu-latest'
# - run: brew install llvm
# if: matrix.os == 'macOS-latest'
- name: Create Build Environment
# Some projects don't allow in-source building, so create a separate build directory
# We'll use this as our working directory for all subsequent commands
run: cmake -E make_directory ${{github.workspace}}/build

- name: Cache C++ dependencies in Packages Directory
uses: actions/cache@v3
with:
path: |
packages
key: ${{ runner.OS }}-c++-packages-cache-Release-${{ hashFiles('depsCache.json') }}
restore-keys: |
${{ runner.OS }}-c++-packages-cache-Release-
- name: Configure CMake
# Use a bash shell so we can use the same syntax for environment variable
# access regardless of the host operating system
shell: bash
working-directory: ${{github.workspace}}/build
# Note the current convention is to use the -S and -B options here to specify source
# and build directories, but this is only available with CMake 3.13 and higher.
# The CMake binaries on the Github Actions machines are (as of this writing) 3.12
run: cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
- name: Build
working-directory: ${{github.workspace}}/build
shell: bash
# Execute the build. You can specify a specific target with "--target <NAME>"
run: cmake --build . --config $BUILD_TYPE
- name: Set variables (Mac\Linux)
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macOS-latest'
run: |
APP=$(cat $GITHUB_WORKSPACE/src/lib/Version/appName.txt)
VER=$(cat $GITHUB_WORKSPACE/src/lib/Version/version.txt)
echo "VERSION=$VER" >> $GITHUB_ENV
echo "APPNAME=$APP" >> $GITHUB_ENV
- name: Set variables (Windows)
if: matrix.os == 'windows-latest'
run: |
$APP = type .\src\lib\Version\appName.txt
$VER = type .\src\lib\Version\version.txt
echo "VERSION=$VER" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
echo "APPNAME=$APP" | Out-File -FilePath $Env:GITHUB_ENV -Encoding utf8 -Append
- name: Test Unix-like
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macOS-latest'
working-directory: ${{github.workspace}}/build
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ./test/${{ env.APPNAME }}Lang_TEST

- name: Test Windows
if: matrix.os == 'windows-latest'
working-directory: ${{github.workspace}}/build
# Execute tests defined by the CMake configuration.
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
run: ./test/${{ matrix.artifact_out_dir}}${{ env.APPNAME }}Lang_TEST${{ matrix.artifact_exec_ext }}

#- name: Linux Code Coverage
# if: matrix.os == 'ubuntu-latest'
# working-directory: ${{github.workspace}}
# shell: bash
# # Execute tests defined by the CMake configuration.
# # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
# run: ./scripts/runGcov.sh
- name: Prepare Binaries for upload (Mac\Linux)
if: matrix.os == 'ubuntu-latest' || matrix.os == 'macOS-latest'
shell: bash
run: |
mkdir ${{github.workspace}}/artifacts
cp build/src/lib/lib${{ env.APPNAME }}Core${{ matrix.artifact_staticlib_ext }} ${{github.workspace}}/artifacts
cp build/src/cli/${{ env.APPNAME }} ${{github.workspace}}/artifacts
pushd ${{github.workspace}}
zip -r ${{ env.APPNAME }}-$(uname -s)-$(uname -m).zip artifacts
popd
- name: Prepare Binaries for upload (windows)
if: matrix.os == 'windows-latest'
shell: powershell
run: |
[system.io.directory]::CreateDirectory("${{github.workspace}}/artifacts")
Copy-Item "build/src/lib/${{ matrix.artifact_out_dir}}${{ env.APPNAME }}Core${{ matrix.artifact_staticlib_ext }}" -Destination "${{github.workspace}}/artifacts"
Copy-Item "build/src/cli/${{ matrix.artifact_out_dir }}${{ env.APPNAME }}${{ matrix.artifact_exec_ext }}" -Destination "${{github.workspace}}/artifacts"
Compress-Archive -Path ${{github.workspace}}/artifacts/* -DestinationPath ${{ env.APPNAME }}-${{matrix.artifact_os_name}}-${{matrix.artifact_arch}}.zip
- name: 'Upload Pull Request Artifact'
uses: actions/upload-artifact@v3
if: startsWith(github.ref, 'refs/pull/')
with:
name: ${{ env.APPNAME }} Pull Request Artifacts
path: ${{ env.APPNAME }}-*.zip
retention-days: 5
- name: Upload binaries to Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/heads/master')
with:
tag_name: ${{ env.APPNAME }}-${{ env.VERSION }}
files: |
${{ env.APPNAME }}-*.zip
25 changes: 25 additions & 0 deletions .github/workflows/license-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: License Check

on:
push:
branches:
- master
pull_request:
branches:
- '**'

jobs:
build:
runs-on: ubuntu-latest
strategy:
fail-fast: true
steps:
- uses: actions/checkout@v2
-
name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.19
- run: go install github.com/google/addlicense@latest
- name: Run license check
run: ${{github.workspace}}/scripts/license-check.sh
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,7 @@ build/
packages/

# MacOS
.DS_Store
.DS_Store

# vs code
.vscode/
Loading

0 comments on commit f9d4987

Please sign in to comment.