diff --git a/docs/language/crosstl-frontend-language-spec-v0.json b/docs/language/crosstl-frontend-language-spec-v0.json index 09e0305f4..f9cab69ae 100644 --- a/docs/language/crosstl-frontend-language-spec-v0.json +++ b/docs/language/crosstl-frontend-language-spec-v0.json @@ -8,11 +8,11 @@ "files": [ { "path": "crosstl/translator/lexer.py", - "sha256": "81820686f072df53de25d5e00d194f48f22899c2dbbe8165d40fe3d76e2541d8" + "sha256": "2c6c4a32ea916efe7d0edc5555a010a7372c0e18dd9e687fca90281b59cf932f" }, { "path": "crosstl/translator/parser.py", - "sha256": "8776437d940a6c88cfc401433fdbec43f8b7d43549a2c0e87e6c23aaa39fd50b" + "sha256": "79ffc4671dcf296fb253e923c0cc8de138187fb03ef26bda9982f612a5f1cd45" }, { "path": "crosstl/translator/ast.py", @@ -626,6 +626,78 @@ "name": "SAMPLER2DMSARRAY", "pattern": "\\bsampler2dmsarray\\b" }, + { + "name": "ISAMPLER1D", + "pattern": "\\bisampler1[Dd]\\b" + }, + { + "name": "ISAMPLER1DARRAY", + "pattern": "\\bisampler1[Dd][Aa]rray\\b" + }, + { + "name": "ISAMPLER2D", + "pattern": "\\bisampler2[Dd]\\b" + }, + { + "name": "ISAMPLER3D", + "pattern": "\\bisampler3[Dd]\\b" + }, + { + "name": "ISAMPLERCUBE", + "pattern": "\\bisampler[Cc]ube\\b" + }, + { + "name": "ISAMPLERCUBEARRAY", + "pattern": "\\bisampler[Cc]ube[Aa]rray\\b" + }, + { + "name": "ISAMPLER2DARRAY", + "pattern": "\\bisampler2[Dd][Aa]rray\\b" + }, + { + "name": "ISAMPLER2DMS", + "pattern": "\\bisampler2[Dd][Mm][Ss]\\b" + }, + { + "name": "ISAMPLER2DMSARRAY", + "pattern": "\\bisampler2[Dd][Mm][Ss][Aa]rray\\b" + }, + { + "name": "USAMPLER1D", + "pattern": "\\busampler1[Dd]\\b" + }, + { + "name": "USAMPLER1DARRAY", + "pattern": "\\busampler1[Dd][Aa]rray\\b" + }, + { + "name": "USAMPLER2D", + "pattern": "\\busampler2[Dd]\\b" + }, + { + "name": "USAMPLER3D", + "pattern": "\\busampler3[Dd]\\b" + }, + { + "name": "USAMPLERCUBE", + "pattern": "\\busampler[Cc]ube\\b" + }, + { + "name": "USAMPLERCUBEARRAY", + "pattern": "\\busampler[Cc]ube[Aa]rray\\b" + }, + { + "name": "USAMPLER2DARRAY", + "pattern": "\\busampler2[Dd][Aa]rray\\b" + }, + { + "name": "USAMPLER2DMS", + "pattern": "\\busampler2[Dd][Mm][Ss]\\b" + }, + { + "name": "USAMPLER2DMSARRAY", + "pattern": "\\busampler2[Dd][Mm][Ss][Aa]rray\\b" + }, { "name": "IIMAGE1D", "pattern": "\\biimage1[Dd]\\b" @@ -1344,6 +1416,42 @@ "spelling": "intersection", "token": "RAY_INTERSECTION" }, + { + "spelling": "isampler1d", + "token": "ISAMPLER1D" + }, + { + "spelling": "isampler1darray", + "token": "ISAMPLER1DARRAY" + }, + { + "spelling": "isampler2d", + "token": "ISAMPLER2D" + }, + { + "spelling": "isampler2darray", + "token": "ISAMPLER2DARRAY" + }, + { + "spelling": "isampler2dms", + "token": "ISAMPLER2DMS" + }, + { + "spelling": "isampler2dmsarray", + "token": "ISAMPLER2DMSARRAY" + }, + { + "spelling": "isampler3d", + "token": "ISAMPLER3D" + }, + { + "spelling": "isamplercube", + "token": "ISAMPLERCUBE" + }, + { + "spelling": "isamplercubearray", + "token": "ISAMPLERCUBEARRAY" + }, { "spelling": "ivec2", "token": "IVEC2" @@ -1692,6 +1800,42 @@ "spelling": "unsafe", "token": "UNSAFE" }, + { + "spelling": "usampler1d", + "token": "USAMPLER1D" + }, + { + "spelling": "usampler1darray", + "token": "USAMPLER1DARRAY" + }, + { + "spelling": "usampler2d", + "token": "USAMPLER2D" + }, + { + "spelling": "usampler2darray", + "token": "USAMPLER2DARRAY" + }, + { + "spelling": "usampler2dms", + "token": "USAMPLER2DMS" + }, + { + "spelling": "usampler2dmsarray", + "token": "USAMPLER2DMSARRAY" + }, + { + "spelling": "usampler3d", + "token": "USAMPLER3D" + }, + { + "spelling": "usamplercube", + "token": "USAMPLERCUBE" + }, + { + "spelling": "usamplercubearray", + "token": "USAMPLERCUBEARRAY" + }, { "spelling": "use", "token": "USE" @@ -2464,6 +2608,78 @@ "imagecubearray" ] }, + { + "token": "ISAMPLER1D", + "canonical": "isampler1D", + "kind": "resource", + "keywordSpellings": [ + "isampler1d" + ] + }, + { + "token": "ISAMPLER1DARRAY", + "canonical": "isampler1DArray", + "kind": "resource", + "keywordSpellings": [ + "isampler1darray" + ] + }, + { + "token": "ISAMPLER2D", + "canonical": "isampler2D", + "kind": "resource", + "keywordSpellings": [ + "isampler2d" + ] + }, + { + "token": "ISAMPLER2DARRAY", + "canonical": "isampler2DArray", + "kind": "resource", + "keywordSpellings": [ + "isampler2darray" + ] + }, + { + "token": "ISAMPLER2DMS", + "canonical": "isampler2DMS", + "kind": "resource", + "keywordSpellings": [ + "isampler2dms" + ] + }, + { + "token": "ISAMPLER2DMSARRAY", + "canonical": "isampler2DMSArray", + "kind": "resource", + "keywordSpellings": [ + "isampler2dmsarray" + ] + }, + { + "token": "ISAMPLER3D", + "canonical": "isampler3D", + "kind": "resource", + "keywordSpellings": [ + "isampler3d" + ] + }, + { + "token": "ISAMPLERCUBE", + "canonical": "isamplerCube", + "kind": "resource", + "keywordSpellings": [ + "isamplercube" + ] + }, + { + "token": "ISAMPLERCUBEARRAY", + "canonical": "isamplerCubeArray", + "kind": "resource", + "keywordSpellings": [ + "isamplercubearray" + ] + }, { "token": "SAMPLER", "canonical": "sampler", @@ -2641,6 +2857,78 @@ "keywordSpellings": [ "uimagecubearray" ] + }, + { + "token": "USAMPLER1D", + "canonical": "usampler1D", + "kind": "resource", + "keywordSpellings": [ + "usampler1d" + ] + }, + { + "token": "USAMPLER1DARRAY", + "canonical": "usampler1DArray", + "kind": "resource", + "keywordSpellings": [ + "usampler1darray" + ] + }, + { + "token": "USAMPLER2D", + "canonical": "usampler2D", + "kind": "resource", + "keywordSpellings": [ + "usampler2d" + ] + }, + { + "token": "USAMPLER2DARRAY", + "canonical": "usampler2DArray", + "kind": "resource", + "keywordSpellings": [ + "usampler2darray" + ] + }, + { + "token": "USAMPLER2DMS", + "canonical": "usampler2DMS", + "kind": "resource", + "keywordSpellings": [ + "usampler2dms" + ] + }, + { + "token": "USAMPLER2DMSARRAY", + "canonical": "usampler2DMSArray", + "kind": "resource", + "keywordSpellings": [ + "usampler2dmsarray" + ] + }, + { + "token": "USAMPLER3D", + "canonical": "usampler3D", + "kind": "resource", + "keywordSpellings": [ + "usampler3d" + ] + }, + { + "token": "USAMPLERCUBE", + "canonical": "usamplerCube", + "kind": "resource", + "keywordSpellings": [ + "usamplercube" + ] + }, + { + "token": "USAMPLERCUBEARRAY", + "canonical": "usamplerCubeArray", + "kind": "resource", + "keywordSpellings": [ + "usamplercubearray" + ] } ], "namedTypeFallback": true, diff --git a/tests/cmake/CrossGLCliSurfaceTests.cmake b/tests/cmake/CrossGLCliSurfaceTests.cmake index 0c2d46593..377795a8f 100644 --- a/tests/cmake/CrossGLCliSurfaceTests.cmake +++ b/tests/cmake/CrossGLCliSurfaceTests.cmake @@ -329,6 +329,12 @@ set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BAD_INDEX "${CMAKE_CURRENT_BINARY_DIR}/crosstl-project-report-backend-source-map-bad-index.json") set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE "${CMAKE_CURRENT_BINARY_DIR}/crosstl-project-report-backend-source-map-span-outside.json") +set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL + "${CMAKE_CURRENT_BINARY_DIR}/crosstl-project-report-backend-source-map-byte-fields-partial.json") +set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET + "${CMAKE_CURRENT_BINARY_DIR}/crosstl-project-report-backend-source-map-byte-end-offset.json") +set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN + "${CMAKE_CURRENT_BINARY_DIR}/crosstl-project-report-backend-source-map-byte-end-column.json") set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ZERO_LENGTH "${CMAKE_CURRENT_BINARY_DIR}/crosstl-project-report-backend-source-map-zero-length.json") set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_STAGE_MISMATCH @@ -479,6 +485,12 @@ set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BAD_INDEX_SIDECAR "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ROOT}/out/directx/simple-bad-index.backend-source-map.json") set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE_SIDECAR "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ROOT}/out/directx/simple-span-outside.backend-source-map.json") +set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIDECAR + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ROOT}/out/directx/simple-byte-fields-partial.backend-source-map.json") +set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIDECAR + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ROOT}/out/directx/simple-byte-end-offset.backend-source-map.json") +set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIDECAR + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ROOT}/out/directx/simple-byte-end-column.backend-source-map.json") set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ZERO_LENGTH_SIDECAR "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ROOT}/out/directx/simple-zero-length.backend-source-map.json") set(CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_STAGE_MISMATCH_SIDECAR @@ -604,10 +616,20 @@ file(SHA256 "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BAD_INDEX_S string(REPLACE [=[ "backend": { "startLine": 1, - "endLine": 1 + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 32, + "endOffset": 31 }]=] [=[ "backend": { "startLine": 1, - "endLine": 2 + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 2, + "endColumn": 32, + "endOffset": 31 }]=] CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE_SIDECAR_JSON "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SIDECAR_JSON}") @@ -618,13 +640,102 @@ file(SIZE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE_ file(SHA256 "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE_SIDECAR}" CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE_SHA256) -string(REPLACE [=[ "length": 31, +string(REPLACE [=[ "backend": { + "startLine": 1, + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 32, + "endOffset": 31 + }]=] [=[ "backend": { + "startLine": 1, + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 32 + }]=] + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIDECAR_JSON + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SIDECAR_JSON}") +file(WRITE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIDECAR}" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIDECAR_JSON}") +file(SIZE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIDECAR}" + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIZE_BYTES) +file(SHA256 "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIDECAR}" + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SHA256) + +string(REPLACE [=[ "backend": { + "startLine": 1, + "startColumn": 1, + "offset": 0, + "length": 31, "endLine": 1, "endColumn": 32, - "endOffset": 31]=] [=[ "length": 0, + "endOffset": 31 + }]=] [=[ "backend": { + "startLine": 1, + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 32, + "endOffset": 30 + }]=] + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIDECAR_JSON + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SIDECAR_JSON}") +file(WRITE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIDECAR}" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIDECAR_JSON}") +file(SIZE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIDECAR}" + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIZE_BYTES) +file(SHA256 "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIDECAR}" + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SHA256) + +string(REPLACE [=[ "backend": { + "startLine": 1, + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 32, + "endOffset": 31 + }]=] [=[ "backend": { + "startLine": 1, + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 1, + "endOffset": 31 + }]=] + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIDECAR_JSON + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SIDECAR_JSON}") +file(WRITE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIDECAR}" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIDECAR_JSON}") +file(SIZE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIDECAR}" + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIZE_BYTES) +file(SHA256 "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIDECAR}" + CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SHA256) + +string(REPLACE [=[ "location": { + "file": "out/cgl/simple.cgl", + "line": 1, + "column": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 32, + "endOffset": 31 + }]=] [=[ "location": { + "file": "out/cgl/simple.cgl", + "line": 1, + "column": 1, + "offset": 0, + "length": 0, "endLine": 1, "endColumn": 1, - "endOffset": 0]=] + "endOffset": 0 + }]=] CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ZERO_LENGTH_SIDECAR_JSON "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SIDECAR_JSON}") file(WRITE "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ZERO_LENGTH_SIDECAR}" @@ -1903,6 +2014,24 @@ crossgl_write_crosstl_backend_source_map_report_variant( "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE_SIZE_BYTES}" "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_SPAN_OUTSIDE_SHA256}" "1" "1") +crossgl_write_crosstl_backend_source_map_report_variant( + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL}" + "out/directx/simple-byte-fields-partial.backend-source-map.json" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SIZE_BYTES}" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL_SHA256}" + "1" "1") +crossgl_write_crosstl_backend_source_map_report_variant( + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET}" + "out/directx/simple-byte-end-offset.backend-source-map.json" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SIZE_BYTES}" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET_SHA256}" + "1" "1") +crossgl_write_crosstl_backend_source_map_report_variant( + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN}" + "out/directx/simple-byte-end-column.backend-source-map.json" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SIZE_BYTES}" + "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN_SHA256}" + "1" "1") crossgl_write_crosstl_backend_source_map_report_variant( "${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ZERO_LENGTH}" "out/directx/simple-zero-length.backend-source-map.json" @@ -5815,6 +5944,30 @@ crossgl_add_cli_surface_test(cglc_cli_check_crosstl_project_report_backend_sourc "\"code\": \"project.source-batch.invalid-manifest\"" "sidecar.mappings[0].backend.endLine must be less than or equal to sidecar.backend.lineCount") +crossgl_add_cli_surface_test(cglc_cli_check_crosstl_project_report_backend_source_map_byte_fields_partial_fails + EXPECTED_RESULT 1 + ARGS check --source-batch ${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_FIELDS_PARTIAL} + --diagnostics-json + STDOUT_CONTAINS + "\"code\": \"project.source-batch.invalid-manifest\"" + "sidecar.mappings[0].backend backend byte span fields must be emitted together") + +crossgl_add_cli_surface_test(cglc_cli_check_crosstl_project_report_backend_source_map_byte_end_offset_fails + EXPECTED_RESULT 1 + ARGS check --source-batch ${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_OFFSET} + --diagnostics-json + STDOUT_CONTAINS + "\"code\": \"project.source-batch.invalid-manifest\"" + "sidecar.mappings[0].backend.endOffset must equal offset + length") + +crossgl_add_cli_surface_test(cglc_cli_check_crosstl_project_report_backend_source_map_byte_end_column_fails + EXPECTED_RESULT 1 + ARGS check --source-batch ${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_BYTE_END_COLUMN} + --diagnostics-json + STDOUT_CONTAINS + "\"code\": \"project.source-batch.invalid-manifest\"" + "sidecar.mappings[0].backend.endColumn must be greater than startColumn for same-line span") + crossgl_add_cli_surface_test(cglc_cli_check_crosstl_project_report_backend_source_map_zero_length_fails EXPECTED_RESULT 1 ARGS check --source-batch ${CROSSGL_CLI_CROSSTL_PROJECT_REPORT_BACKEND_SOURCE_MAP_ZERO_LENGTH} diff --git a/tests/fixtures/out/directx/simple.backend-source-map.json b/tests/fixtures/out/directx/simple.backend-source-map.json index 4a3242777..620aa6be3 100644 --- a/tests/fixtures/out/directx/simple.backend-source-map.json +++ b/tests/fixtures/out/directx/simple.backend-source-map.json @@ -22,7 +22,12 @@ "name": "value", "backend": { "startLine": 1, - "endLine": 1 + "startColumn": 1, + "offset": 0, + "length": 31, + "endLine": 1, + "endColumn": 32, + "endOffset": 31 }, "location": { "file": "out/cgl/simple.cgl", diff --git a/tests/schema-failures/backend-source-map-v1/backend-span-byte-fields-partial.expected.txt b/tests/schema-failures/backend-source-map-v1/backend-span-byte-fields-partial.expected.txt new file mode 100644 index 000000000..a8e30f3b0 --- /dev/null +++ b/tests/schema-failures/backend-source-map-v1/backend-span-byte-fields-partial.expected.txt @@ -0,0 +1 @@ +$.mappings[0].backend: backend byte span fields must be emitted together diff --git a/tests/schema-failures/backend-source-map-v1/backend-span-byte-fields-partial.json b/tests/schema-failures/backend-source-map-v1/backend-span-byte-fields-partial.json new file mode 100644 index 000000000..7327c9182 --- /dev/null +++ b/tests/schema-failures/backend-source-map-v1/backend-span-byte-fields-partial.json @@ -0,0 +1,40 @@ +{ + "schemaVersion": 1, + "kind": "crossgl.backendSourceMap", + "target": "directx", + "module": "SemanticFixture", + "mappingGranularity": "statement", + "sourceBackend": "crossgl-hir", + "sourceRemap": null, + "targetBackend": "hlsl", + "backend": { + "language": "hlsl", + "lineCount": 12 + }, + "mappingCount": 1, + "mappings": [ + { + "index": 0, + "stage": "compute", + "entryPoint": "main", + "function": "main", + "statementKind": "assignment", + "name": "value", + "backend": { + "startLine": 7, + "startColumn": 3, + "endLine": 7 + }, + "location": { + "file": "generated/from-translator.cgl", + "line": 7, + "column": 3, + "offset": 120, + "length": 5, + "endLine": 7, + "endColumn": 8, + "endOffset": 125 + } + } + ] +} diff --git a/tests/schema-failures/backend-source-map-v1/backend-span-same-line-end-column.expected.txt b/tests/schema-failures/backend-source-map-v1/backend-span-same-line-end-column.expected.txt new file mode 100644 index 000000000..3203a5efa --- /dev/null +++ b/tests/schema-failures/backend-source-map-v1/backend-span-same-line-end-column.expected.txt @@ -0,0 +1 @@ +$.mappings[0].backend.endColumn: expected > startColumn for same-line span diff --git a/tests/schema-failures/backend-source-map-v1/backend-span-same-line-end-column.json b/tests/schema-failures/backend-source-map-v1/backend-span-same-line-end-column.json new file mode 100644 index 000000000..6abbc5e16 --- /dev/null +++ b/tests/schema-failures/backend-source-map-v1/backend-span-same-line-end-column.json @@ -0,0 +1,44 @@ +{ + "schemaVersion": 1, + "kind": "crossgl.backendSourceMap", + "target": "directx", + "module": "SemanticFixture", + "mappingGranularity": "statement", + "sourceBackend": "crossgl-hir", + "sourceRemap": null, + "targetBackend": "hlsl", + "backend": { + "language": "hlsl", + "lineCount": 12 + }, + "mappingCount": 1, + "mappings": [ + { + "index": 0, + "stage": "compute", + "entryPoint": "main", + "function": "main", + "statementKind": "assignment", + "name": "value", + "backend": { + "startLine": 7, + "startColumn": 8, + "offset": 120, + "length": 5, + "endLine": 7, + "endColumn": 8, + "endOffset": 125 + }, + "location": { + "file": "generated/from-translator.cgl", + "line": 7, + "column": 3, + "offset": 120, + "length": 5, + "endLine": 7, + "endColumn": 8, + "endOffset": 125 + } + } + ] +} diff --git a/tests/schema-failures/language-feature-report-v1/missing-snapshot-backed-feature.json b/tests/schema-failures/language-feature-report-v1/missing-snapshot-backed-feature.json index c895f2bea..c79e93678 100644 --- a/tests/schema-failures/language-feature-report-v1/missing-snapshot-backed-feature.json +++ b/tests/schema-failures/language-feature-report-v1/missing-snapshot-backed-feature.json @@ -21,7 +21,7 @@ "crossTLSnapshotSeal": { "snapshotId": "crosstl-frontend-language-spec-v0", "snapshotPath": "docs/language/crosstl-frontend-language-spec-v0.json", - "snapshotSha256": "9924f831110bc5c93cd66691eab7606443f137524e2339fb168f08a3bde4c54c", + "snapshotSha256": "f0188b94432ef1d0a14771b8a750d197a69a150e8db53779d4aea49eb58ef40c", "snapshotSchemaVersion": 0 }, "compatibilityBucketSummary": { diff --git a/tools/cglc/main.cpp b/tools/cglc/main.cpp index 1911f0643..bee0aa90a 100644 --- a/tools/cglc/main.cpp +++ b/tools/cglc/main.cpp @@ -3073,7 +3073,12 @@ bool crossTLBackendSourceMapSourceRemapReferencesMatch( struct CrossTLBackendSourceMapSpan { std::uintmax_t startLine = 0; + std::optional startColumn; + std::optional offset; + std::optional length; std::uintmax_t endLine = 0; + std::optional endColumn; + std::optional endOffset; }; struct CrossTLBackendSourceMapMappingIdentity { @@ -3091,7 +3096,11 @@ bool crossTLBackendSourceMapSpansOverlap( bool crossTLBackendSourceMapSpansEqual( const CrossTLBackendSourceMapSpan &left, const CrossTLBackendSourceMapSpan &right) { - return left.startLine == right.startLine && left.endLine == right.endLine; + return left.startLine == right.startLine && + left.startColumn == right.startColumn && left.offset == right.offset && + left.length == right.length && left.endLine == right.endLine && + left.endColumn == right.endColumn && + left.endOffset == right.endOffset; } bool crossTLBackendSourceMapMappingIdentitiesEqual( @@ -3180,8 +3189,11 @@ bool parseCrossTLBackendSourceMapBackendSpan( std::string(context) + " must be a JSON object"); return false; } - if (!validateSourceBatchAllowedMembers(spanText, {"startLine", "endLine"}, - context, manifestPath, diagnostics)) { + if (!validateSourceBatchAllowedMembers( + spanText, + {"startLine", "startColumn", "offset", "length", "endLine", + "endColumn", "endOffset"}, + context, manifestPath, diagnostics)) { return false; } if (!parseRequiredSourceBatchUnsignedMember(spanText, "startLine", context, @@ -3192,6 +3204,23 @@ bool parseCrossTLBackendSourceMapBackendSpan( span.endLine)) { return false; } + if (!parseOptionalSourceBatchUnsignedMember( + spanText, "startColumn", context, manifestPath, diagnostics, + span.startColumn) || + !parseOptionalSourceBatchUnsignedMember(spanText, "offset", context, + manifestPath, diagnostics, + span.offset) || + !parseOptionalSourceBatchUnsignedMember(spanText, "length", context, + manifestPath, diagnostics, + span.length) || + !parseOptionalSourceBatchUnsignedMember(spanText, "endColumn", context, + manifestPath, diagnostics, + span.endColumn) || + !parseOptionalSourceBatchUnsignedMember(spanText, "endOffset", context, + manifestPath, diagnostics, + span.endOffset)) { + return false; + } if (span.startLine == 0) { sourceBatchManifestError(diagnostics, manifestPath, std::string(context) + @@ -3210,6 +3239,54 @@ bool parseCrossTLBackendSourceMapBackendSpan( "startLine"); return false; } + const bool hasByteSpanFields = + span.startColumn || span.offset || span.length || span.endColumn || + span.endOffset; + const bool hasCompleteByteSpanFields = + span.startColumn && span.offset && span.length && span.endColumn && + span.endOffset; + if (hasByteSpanFields && !hasCompleteByteSpanFields) { + sourceBatchManifestError( + diagnostics, manifestPath, + std::string(context) + + " backend byte span fields must be emitted together"); + return false; + } + if (hasCompleteByteSpanFields) { + if (*span.startColumn == 0) { + sourceBatchManifestError(diagnostics, manifestPath, + std::string(context) + + ".startColumn must be positive"); + return false; + } + if (*span.length == 0) { + sourceBatchManifestError(diagnostics, manifestPath, + std::string(context) + ".length must be positive"); + return false; + } + if (*span.endColumn == 0) { + sourceBatchManifestError(diagnostics, manifestPath, + std::string(context) + + ".endColumn must be positive"); + return false; + } + if (*span.offset > + std::numeric_limits::max() - *span.length || + *span.endOffset != *span.offset + *span.length) { + sourceBatchManifestError( + diagnostics, manifestPath, + std::string(context) + ".endOffset must equal offset + length"); + return false; + } + if (span.endLine == span.startLine && + *span.endColumn <= *span.startColumn) { + sourceBatchManifestError( + diagnostics, manifestPath, + std::string(context) + + ".endColumn must be greater than startColumn for same-line span"); + return false; + } + } if (backendLineCount == 0) { sourceBatchManifestError( diagnostics, manifestPath, diff --git a/tools/cross_repo_language_contract.json b/tools/cross_repo_language_contract.json index b13ed7a0c..501b0fc18 100644 --- a/tools/cross_repo_language_contract.json +++ b/tools/cross_repo_language_contract.json @@ -5,7 +5,7 @@ "id": "crosstl-frontend-language-spec-v0", "path": "docs/language/crosstl-frontend-language-spec-v0.json", "schema_version": 0, - "sha256": "9924f831110bc5c93cd66691eab7606443f137524e2339fb168f08a3bde4c54c", + "sha256": "f0188b94432ef1d0a14771b8a750d197a69a150e8db53779d4aea49eb58ef40c", "source_authority": { "mode": "crosstl-frontend-derived-v0", "canonical_until": "shared-spec-package", @@ -35,11 +35,11 @@ "source_files": [ { "path": "crosstl/translator/lexer.py", - "sha256": "81820686f072df53de25d5e00d194f48f22899c2dbbe8165d40fe3d76e2541d8" + "sha256": "2c6c4a32ea916efe7d0edc5555a010a7372c0e18dd9e687fca90281b59cf932f" }, { "path": "crosstl/translator/parser.py", - "sha256": "8776437d940a6c88cfc401433fdbec43f8b7d43549a2c0e87e6c23aaa39fd50b" + "sha256": "79ffc4671dcf296fb253e923c0cc8de138187fb03ef26bda9982f612a5f1cd45" }, { "path": "crosstl/translator/ast.py", diff --git a/tools/cross_repo_language_spec.json b/tools/cross_repo_language_spec.json index 434e54f8e..57f15f6bf 100644 --- a/tools/cross_repo_language_spec.json +++ b/tools/cross_repo_language_spec.json @@ -11,7 +11,7 @@ "id": "crosstl-frontend-language-spec-v0", "path": "docs/language/crosstl-frontend-language-spec-v0.json", "schema_version": 0, - "sha256": "9924f831110bc5c93cd66691eab7606443f137524e2339fb168f08a3bde4c54c", + "sha256": "f0188b94432ef1d0a14771b8a750d197a69a150e8db53779d4aea49eb58ef40c", "authority_references": [ { "id": "authority.pr720-merged-reference", @@ -35,11 +35,11 @@ "source_files": [ { "path": "crosstl/translator/lexer.py", - "sha256": "81820686f072df53de25d5e00d194f48f22899c2dbbe8165d40fe3d76e2541d8" + "sha256": "2c6c4a32ea916efe7d0edc5555a010a7372c0e18dd9e687fca90281b59cf932f" }, { "path": "crosstl/translator/parser.py", - "sha256": "8776437d940a6c88cfc401433fdbec43f8b7d43549a2c0e87e6c23aaa39fd50b" + "sha256": "79ffc4671dcf296fb253e923c0cc8de138187fb03ef26bda9982f612a5f1cd45" }, { "path": "crosstl/translator/ast.py", @@ -75,7 +75,7 @@ "snapshot_ref_seals": [ { "ref": "/lexical/keywords", - "sha256": "c694139c430c664ee66bf06d114935fe32bf59a34057bb186e23e3fe8f9e7c11" + "sha256": "c8441deb3f4a51e3fd2734885cd7f5d2f2f5e0c701535b1aa4f6cd98c5717c4e" }, { "ref": "/ast/statementNodes", @@ -203,7 +203,7 @@ }, { "ref": "/source/files", - "sha256": "5f024911b51fbc8a1b47681feb717af3f7b94341c0348c713f9a0207b0fb967b" + "sha256": "8adc690a355db26e7d90eea36250e6fb381f8e93eab645e507ee88d0d777b3b7" } ], "fixture_count": 8, @@ -606,7 +606,7 @@ }, { "ref": "/language/types/samplersAndImages", - "sha256": "bf7088d69597c97c021ec7fd8e40d40e0ae1d8f39eed721553d8f67cc4b4f5c3" + "sha256": "38191a945a5ea7014bb7a24a3df1458aa4fedb5a57c07543f4438aeaf3cf6369" }, { "ref": "/language/intrinsics/textureAndImage", @@ -688,7 +688,7 @@ "snapshot_ref_seals": [ { "ref": "/language/types", - "sha256": "b7ea742b0d785e528792b73caf49a6d274d1406da1d2a416977ccfaafbc9695e" + "sha256": "166678606b52382d7bca5e6608f3196c6e3193076106a36e2ee0b75bcb089a8d" }, { "ref": "/ast/typeNodes",