Skip to content
This repository was archived by the owner on Dec 15, 2022. It is now read-only.

Native std::optional (from C++17) #83

Open
wants to merge 32 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
ef7a5ba
Add standard variable + use c++14
aminya Dec 3, 2020
a8296f1
Add MACOSX_DEPLOYMENT_TARGET variable
aminya Dec 3, 2020
d3f3d40
Add Release configurations and optimizations
aminya Dec 3, 2020
490e785
Use C++17 standard
aminya Dec 3, 2020
18aac65
Use Visual Studio 17 on AppVeyor
aminya Dec 3, 2020
efe74c6
Use Clang 9 on Travis
aminya Dec 4, 2020
8968162
use native optional
aminya Dec 3, 2020
b0702ea
remove optional.h and include optional directly
aminya Dec 3, 2020
f2129a2
Define uint
aminya Dec 5, 2020
a6908ca
Update catch test library
aminya Dec 5, 2020
0553eca
Use std::chrono and std::sleep_for instead of usleep
aminya Dec 5, 2020
f4a7d6c
Add u16string literals
aminya Dec 5, 2020
eb8eef6
Add u8 literal
aminya Dec 5, 2020
778111d
Fix tests not running becuase status is undefined
aminya Dec 5, 2020
dbdffac
Fix test:native script
aminya Dec 5, 2020
38128a3
Use Clang 9 on Travis
aminya Dec 5, 2020
9be829e
Revert "Remove other ci configs and update badge"
aminya Jul 4, 2022
65bd729
Merge branch 'master' into Release-optimizations
aminya Jul 4, 2022
d8de380
ci: update setup-node and actions/checkout
aminya Jul 4, 2022
3c50962
ci: use setup-cpp for the cpp environment
aminya Jul 4, 2022
cf24061
ci: use windows-2019 image
aminya Jul 4, 2022
214bec1
ci: run push CI only on master [skip ci]
aminya Jul 4, 2022
fefbaf0
Merge pull request #14 from atom-community/ci
aminya Jul 4, 2022
501336e
Merge branch 'master' into Release-optimizations
aminya Jul 4, 2022
8408009
Merge branch 'master' into fix-cpp-tests
aminya Jul 4, 2022
a38ec43
chore: report the status of the browser build
aminya Jul 4, 2022
c0591e6
build: increase the macos target to 10.15
aminya Jul 4, 2022
2b6943d
build: use -O3 instead of -Ofast
aminya Jul 4, 2022
90bc20c
Merge pull request #5 from atom-community/Release-optimizations
aminya Jul 4, 2022
b6d50ee
Merge branch 'master' into fix-cpp-tests
aminya Jul 4, 2022
23f0243
Merge pull request #8 from atom-community/fix-cpp-tests
aminya Jul 4, 2022
0d4b6ca
Merge branch 'master' into native-optional
aminya Jul 4, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 20 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
name: ci
on:
- pull_request
- push
pull_request:
push:
branches: [master]

jobs:
Test:
Expand All @@ -13,24 +14,36 @@ jobs:
os:
- ubuntu-latest
- macos-latest
- windows-latest
- windows-2019
node_version:
- 10
- 12
- 14
name: Node ${{ matrix.node_version }} on ${{ matrix.os }}

steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v3
with:
submodules: true
- name: Cache
uses: actions/cache@v2
uses: actions/cache@v3
with:
path: |
'node_modules'
key: ${{ runner.os }}-${{ matrix.node_version }}-${{ hashFiles('package.json') }}

- name: Setup node
uses: actions/setup-node@v2-beta
uses: actions/setup-node@v3
with:
node-version: 14
node-version: ${{ matrix.node_version }}
architecture: x64

- name: Setup Cpp
uses: aminya/setup-cpp@v1
with:
vcvarsall: true
architecture: x64
python: true

- name: Install dependencies
run: npm install
Expand Down
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Superstring
[![ci](https://github.com/atom/superstring/actions/workflows/ci.yml/badge.svg)](https://github.com/atom/superstring/actions/workflows/ci.yml)
[![macOS Build Status](https://circleci.com/gh/atom/superstring/tree/master.svg?style=shield)](https://circleci.com/gh/atom/superstring)
[![Dependency Status](https://david-dm.org/atom/superstring.svg)](https://david-dm.org/atom/superstring)



Native library at the core of Atom's text editor.

Expand Down
1 change: 1 addition & 0 deletions benchmark/native/marker-index-benchmark.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

using namespace std::chrono;
using std::vector;
using uint = unsigned int;

Range get_random_range() {
Point start(rand() % 100, rand() % 100);
Expand Down
51 changes: 43 additions & 8 deletions binding.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,9 @@
],

"variables": {
"tests": 0
"tests": 0,
"STANDARD": 17,
"MACOSX_DEPLOYMENT_TARGET": "10.15"
},

"conditions": [
Expand Down Expand Up @@ -100,25 +102,24 @@
"conditions": [
['OS=="mac"', {
'cflags': [
'-mmacosx-version-min=10.8'
"-mmacosx-version-min=<(MACOSX_DEPLOYMENT_TARGET)"
],
"xcode_settings": {
"GCC_ENABLE_CPP_EXCEPTIONS": "YES",
'MACOSX_DEPLOYMENT_TARGET': '10.8',
'MACOSX_DEPLOYMENT_TARGET': '<(MACOSX_DEPLOYMENT_TARGET)',
}
}]
]
}]
}]
],

"target_defaults": {
"cflags_cc": ["-std=c++11"],
"cflags_cc": [ "-std=c++<(STANDARD)" ],
"conditions": [
['OS=="mac"', {
"xcode_settings": {
'CLANG_CXX_LIBRARY': 'libc++',
'CLANG_CXX_LANGUAGE_STANDARD':'c++11',
'CLANG_CXX_LANGUAGE_STANDARD':'c++(STANDARD)',
}
}],
['OS=="win"', {
Expand All @@ -129,6 +130,40 @@
"NOMINMAX"
],
}]
]
}
],
'default_configuration': 'Release',
'configurations': {
# Release Settings
'Release': {
'defines': [ 'NDEBUG' ],
"cflags": [ "-fno-exceptions", "-O3" ],
"cflags_cc": [ "-fno-exceptions", "-O3", "-std=c++<(STANDARD)" ],
"xcode_settings": {
'GCC_OPTIMIZATION_LEVEL': '3', # stop gyp from defaulting to -Os
"CLANG_CXX_LIBRARY": "libc++",
"CLANG_CXX_LANGUAGE_STANDARD": "c++<(STANDARD)",
'MACOSX_DEPLOYMENT_TARGET': "<(MACOSX_DEPLOYMENT_TARGET)"
}, # XCODE
"msvs_settings": {
"VCCLCompilerTool": {
'ExceptionHandling': 0, # /EHsc
'MultiProcessorCompilation': 'true',
'RuntimeTypeInfo': 'false',
'Optimization': 3, # full optimizations /O2 == /Og /Oi /Ot /Oy /Ob2 /GF /Gy
'StringPooling': 'true', # pool string literals
"AdditionalOptions": [
# C++ standard
"/std:c++<(STANDARD)",

# Optimizations
"/O2",
# "/Ob3", # aggressive inline
"/GL", # whole Program Optimization # /LTCG is implied with /GL.
"/DNDEBUG" # turn off asserts
],
}
} # MSVC
}, # Release
}, # configurations
} # target-defaults
}
9 changes: 5 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,12 @@
"browser": "./browser",
"scripts": {
"build:node": "node-gyp rebuild",
"build:browser": "script/build-browser-version.sh",
"build:browser": "bash -c script/build-browser-version.sh || echo 'the browser build is unsupported'",
"build": "npm run build:node && npm run build:browser",
"test:native": "node ./script/test-native.js",
"test:native": "node-gyp build --debug --tests && node script/test-native.js",
"test:node": "mocha test/js/*.js",
"test:browser": "SUPERSTRING_USE_BROWSER_VERSION=1 mocha test/js/*.js",
"test": "npm run test:node && npm run test:browser",
"test:browser": "cross-env SUPERSTRING_USE_BROWSER_VERSION=1 mocha test/js/*.js || echo 'the browser tests are unsupported'",
"test": "npm run test:node && npm run test:native && npm run test:browser",
"benchmark": "node benchmark/marker-index.benchmark.js",
"prepublishOnly": "git submodule update --init --recursive && npm run build:browser",
"standard": "standard --recursive src test"
Expand All @@ -35,6 +35,7 @@
},
"devDependencies": {
"chai": "^2.0.0",
"cross-env": "^7.0.3",
"mocha": "^2.3.4",
"random-seed": "^0.2.0",
"standard": "^4.5.4",
Expand Down
5 changes: 2 additions & 3 deletions script/test-native.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,5 @@ switch (args[0]) {
}

function run(command, args = [], options = {stdio: 'inherit'}) {
const {status} = spawnSync(command, args, options)
if (status !== 0) process.exit(status)
}
spawnSync(command, args, options)
}
3 changes: 2 additions & 1 deletion src/bindings/em/auto-wrap.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
#include <emscripten/val.h>
#include "flat_set.h"
#include "marker-index.h"
#include "optional.h"
#include <optional>
using std::optional;
#include "point.h"
#include "text.h"

Expand Down
3 changes: 2 additions & 1 deletion src/bindings/marker-index-wrapper.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@
#include "marker-index.h"
#include "nan.h"
#include "noop.h"
#include "optional.h"
#include <optional>
using std::optional;
#include "point-wrapper.h"
#include "range.h"

Expand Down
3 changes: 2 additions & 1 deletion src/bindings/marker-index-wrapper.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include "nan.h"
#include "marker-index.h"
#include "optional.h"
#include <optional>
using std::optional;
#include "range.h"

class MarkerIndexWrapper : public Nan::ObjectWrap {
Expand Down
3 changes: 2 additions & 1 deletion src/bindings/number-conversion.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
#define SUPERSTRING_NUMBER_CONVERSION_H

#include "nan.h"
#include "optional.h"
#include <optional>
using std::optional;

namespace number_conversion {
template<typename T>
Expand Down
3 changes: 2 additions & 1 deletion src/bindings/point-wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
#define SUPERSTRING_POINT_WRAPPER_H

#include "nan.h"
#include "optional.h"
#include <optional>
using std::optional;
#include "point.h"

class PointWrapper : public Nan::ObjectWrap {
Expand Down
3 changes: 2 additions & 1 deletion src/bindings/range-wrapper.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
#define SUPERSTRING_RANGE_WRAPPER_H

#include "nan.h"
#include "optional.h"
#include <optional>
using std::optional;
#include "point.h"
#include "range.h"

Expand Down
3 changes: 2 additions & 1 deletion src/bindings/string-conversion.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,8 @@

#include <string>
#include "nan.h"
#include "optional.h"
#include <optional>
using std::optional;
#include "text.h"

namespace string_conversion {
Expand Down
3 changes: 2 additions & 1 deletion src/core/encoding-conversion.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#ifndef SUPERSTRING_ENCODING_CONVERSION_H_
#define SUPERSTRING_ENCODING_CONVERSION_H_

#include "optional.h"
#include <optional>
using std::optional;
#include "text.h"
#include <stdio.h>

Expand Down
29 changes: 0 additions & 29 deletions src/core/optional.h

This file was deleted.

3 changes: 2 additions & 1 deletion src/core/patch.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "patch.h"
#include "optional.h"
#include <optional>
using std::optional;
#include "text.h"
#include "text-slice.h"
#include <assert.h>
Expand Down
3 changes: 2 additions & 1 deletion src/core/patch.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#ifndef PATCH_H_
#define PATCH_H_

#include "optional.h"
#include <optional>
using std::optional;
#include "point.h"
#include "serializer.h"
#include "text.h"
Expand Down
3 changes: 2 additions & 1 deletion src/core/regex.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#ifndef REGEX_H_
#define REGEX_H_

#include "optional.h"
#include <optional>
using std::optional;
#include <string>

struct pcre2_real_code_16;
Expand Down
3 changes: 2 additions & 1 deletion src/core/text.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@
#include <ostream>
#include "serializer.h"
#include "point.h"
#include "optional.h"
#include <optional>
using std::optional;

class TextSlice;

Expand Down
Loading