mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2026-04-30 19:09:26 +08:00
* Fix #552: Support nested namespaces via dotted names Namespaces can now be nested using dotted name syntax, both from C++ (register_namespace(gen, "constants.si")) and from script (namespace("constants.si")). Parent namespaces are auto-registered when absent, and child namespaces are automatically nested into their parent on import. This allows clean hierarchical organization like constants.si.mu_B instead of flat names like constants_si. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review: use :: instead of . as nested namespace separator Switch from dotted names (e.g. "constants.si") to C++-style :: separator (e.g. "constants::si") for nested namespace declarations, both in the C++ API (register_namespace) and in script (namespace()). The original implementation used . because namespace members are accessed via dot notation at runtime (constants.si.mu_B), making the declaration separator match the access syntax. However, :: is more consistent with C++ namespace conventions and aligns with ChaiScript's existing use of :: for method (def Class::method) and attribute (attr Class::attr) declarations. Member access in scripts remains dot-based (constants.si.mu_B) since that is ChaiScript's member access operator. Requested by @lefticus in PR #675 review. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review: C++-style namespace scoping and block declarations Add :: scope resolution operator for member access (ns::func works like ns.func). Add block namespace declarations: namespace x::y { def func() { ... } } Functions and variables declared inside a namespace block are added as members of the namespace, accessible via :: or dot notation. Namespaces can be reopened to add more members, matching C++ behavior. Requested by @lefticus in PR #675 review. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review: extract shared make_proxy_function from Def_AST_Node Namespace_Block_AST_Node was duplicating the entire proxy function creation logic from Def_AST_Node::eval_internal. Extract a static make_proxy_function helper so both nodes share the same code path, eliminating fragile duplication that would drift if Def handling changes. Requested by @lefticus in PR #675 review. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review: reject non-declaration statements inside namespace blocks Only def, var, auto, and global declarations are now allowed inside namespace { } blocks. Arbitrary expressions, assignments, and function calls are rejected with an eval_error. Added compiled tests verifying that expressions, function calls, and assignments are rejected. Requested by @lefticus in PR #675 review. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * Address review: remove -j parameter from unix builds Ninja handles parallelism intelligently on its own; the explicit -j flag was causing memory pressure on sanitizer builds. Windows (non-Ninja) build retains -j. Requested by @lefticus in PR #675 review. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: leftibot <leftibot@users.noreply.github.com> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
164 lines
4.3 KiB
YAML
164 lines
4.3 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [develop, main]
|
|
pull_request:
|
|
branches: [develop, main]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
linux:
|
|
name: Linux GCC ${{ matrix.build_type }} threads=${{ matrix.multithread }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Debug, Release]
|
|
multithread: [ON, OFF]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Ninja
|
|
run: sudo apt-get install -y ninja-build
|
|
|
|
- name: Configure
|
|
run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DMULTITHREAD_SUPPORT_ENABLED=${{ matrix.multithread }}
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Test
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
macos:
|
|
name: macOS AppleClang ${{ matrix.build_type }} threads=${{ matrix.multithread }}
|
|
runs-on: macos-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Debug, Release]
|
|
multithread: [ON, OFF]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Ninja
|
|
run: brew install ninja
|
|
|
|
- name: Configure
|
|
run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DMULTITHREAD_SUPPORT_ENABLED=${{ matrix.multithread }}
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Test
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
linux-sanitizers:
|
|
name: Linux GCC ASAN+UBSAN ${{ matrix.build_type }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Debug, Release]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Ninja
|
|
run: sudo apt-get install -y ninja-build
|
|
|
|
- name: Configure
|
|
run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DENABLE_ADDRESS_SANITIZER=ON -DENABLE_UNDEFINED_SANITIZER=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Test
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
macos-sanitizers:
|
|
name: macOS AppleClang ASAN+UBSAN ${{ matrix.build_type }}
|
|
runs-on: macos-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Debug, Release]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Ninja
|
|
run: brew install ninja
|
|
|
|
- name: Configure
|
|
run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DENABLE_ADDRESS_SANITIZER=ON -DENABLE_UNDEFINED_SANITIZER=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Test
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
windows:
|
|
name: Windows MSVC ${{ matrix.build_type }} threads=${{ matrix.multithread }}
|
|
runs-on: windows-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Debug, Release]
|
|
multithread: [ON, OFF]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Configure
|
|
run: cmake -B build -DMULTITHREAD_SUPPORT_ENABLED=${{ matrix.multithread }}
|
|
|
|
- name: Build
|
|
run: cmake --build build --config ${{ matrix.build_type }} -j
|
|
|
|
- name: Test
|
|
run: ctest --test-dir build --output-on-failure -C ${{ matrix.build_type }}
|
|
|
|
linux-tsan:
|
|
name: Linux GCC TSAN ${{ matrix.build_type }}
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Debug, Release]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Ninja
|
|
run: sudo apt-get install -y ninja-build
|
|
|
|
- name: Configure
|
|
run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DENABLE_THREAD_SANITIZER=ON -DMULTITHREAD_SUPPORT_ENABLED=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Test
|
|
run: ctest --test-dir build --output-on-failure
|
|
|
|
macos-tsan:
|
|
name: macOS AppleClang TSAN ${{ matrix.build_type }}
|
|
runs-on: macos-latest
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build_type: [Debug, Release]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install Ninja
|
|
run: brew install ninja
|
|
|
|
- name: Configure
|
|
run: cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DENABLE_THREAD_SANITIZER=ON -DMULTITHREAD_SUPPORT_ENABLED=ON
|
|
|
|
- name: Build
|
|
run: cmake --build build
|
|
|
|
- name: Test
|
|
run: ctest --test-dir build --output-on-failure
|