FluxSharp - Implementation Summary

Overview

This document summarizes implemented FluxSharp compiler features, especially include processing and main entry-point validation.

Functionalities Implemented

1. Include Processing System (

process_includes

)

Purpose

Allows FluxSharp programs to include other

.fsh

files using include directives.

Syntax

// #include "filename.fsh"

Features

  • .fsh

    -only validation: include directives can only include

    .fsh

    files

  • Recursive processing: included files may include other files

  • Circular include detection: prevents circular includes (A includes B and B includes A)

  • Secure path validation: blocks path traversal attempts

  • Clear error messages for invalid include scenarios

Error Messages

Included file not found:

โŒ INCLUDE FILE NOT FOUND Cannot find included file: 'filename.fsh' Looked in: "path/to/filename.fsh"

Invalid include format:

โŒ INVALID INCLUDE FILE Include directive at line contains non-.fsh file: 'filename.txt' Only .fsh files are allowed. Correct format: // #include "myfile.fsh"

Circular include:

โŒ CIRCULAR INCLUDE Circular include detected: 'circular_a.fsh' already included.

2. Main Class Validation (

validatemainclass

)

Purpose

Validates that a FluxSharp program meets entry-point requirements.

Requirements

  1. Exactly one

    Main

    class: the program must contain one and only one class named

    Main

  2. Exactly one

    main()

    method: the

    Main

    class must contain one and only one

    void main()

    method

Error Messages

Missing Main class:

โŒ MISSING MAIN CLASS Your program must have exactly one 'class Main' with a 'void main()' method. Example: public class Main { public void main() { print("Hello, World!"); } }

Multiple Main classes:

โŒ MULTIPLE MAIN CLASSES Your program has X 'class Main' declarations. You must have exactly one 'class Main'.

Missing main method:

โŒ MISSING MAIN METHOD Your 'class Main' must have exactly one 'void main()' method. Example: public class Main { public void main() { print("Hello, World!"); } }

Multiple main methods:

โŒ MULTIPLE MAIN METHODS Your 'class Main' has X 'void main()' methods. You must have exactly one 'void main()' method.

Integration Point

Both features are integrated into the compilation pipeline:

// 1. Read source file let content = fs::readtostring(input)?; // 2. Process includes let processedcontent = processincludes(&content, &input.parent().unwrapor(&PathBuf::from(".")))?; // 3. Validate Main class validatemainclass(&processedcontent)?; // 4. Compile to ASM let asmoutput = compilefshtoasm(&processed_content, input)?;

Test Cases

Test 1: Include Missing File

File:

examples/testmissinginclude.fsh

Result: โœ… PASS - Displays the "INCLUDE FILE NOT FOUND" error message

Test 2: Include Valid File

File:

examples/testwithinclude.fsh

Result: โœ… PASS - Correctly includes

helper.fsh

and displays "๐Ÿ“ฅ Including: helper.fsh"

Test 3: Circular Include Detection

Files:

examples/circular_a.fsh

and

examples/circular_b.fsh

(mutually include each other) File:

examples/test_circular.fsh

Result: โœ… PASS - Detects circular include and displays the error message

Test 4: Missing Main Class

File:

examples/testnomain.fsh

Result: โœ… PASS - Displays the "MISSING MAIN CLASS" error message

Test 5: Multiple Main Classes

File:

examples/testmultiplemain_classes.fsh

Result: โœ… PASS - Displays the "MULTIPLE MAIN CLASSES" error message

Test 6: Missing Main Method

File:

examples/testnomain_method.fsh

Result: โœ… PASS - Displays the "MISSING MAIN METHOD" error message

Test 7: Multiple Main Methods

File:

examples/testmultiplemain_methods.fsh

Result: โœ… PASS - Displays the "MULTIPLE MAIN METHODS" error message

Security Features

1. Path Traversal Protection

  • Validates that include paths do not contain

    ..

  • Validates that resolved paths remain inside allowed directories

  • Blocks malicious symlinks

2. File Size Limits

  • 50 MB limit per included file

  • Non-empty file validation

3. Circular Dependency Detection

  • Shared HashSet across recursive calls to track included files

  • Immediate detection when a file is included twice

4. Input Validation

  • Verifies that the included file exists before path validation

  • Verifies that the target is a regular file (not a directory or symlink)

Future Improvements

  1. Include Chains: Support tracing include chains in circular-include errors

``

Circular include detected: main.fsh โ†’ a.fsh โ†’ b.fsh โ†’ a.fsh

`

  1. Include Guards: Support include guard directives to avoid duplicate includes

`

// #pragma once

`

  1. Conditional Includes: Support conditional includes

`

// #include "debug.fsh" if DEBUG

`

  1. Module System: A real module system to replace simple include directives

Compilation Status

  • โœ… Code compiles without errors

  • โœ… All tests pass

  • โš ๏ธ Warnings: 8 warnings (currently from unused

    error_handler` helper functions)


Last Updated: 2026-04-03 Status: Complete and Tested