slow.monster

STUDIO HAZE · topaz

Topaz source

Open by house policy. Topaz is our own language.

Topaz 5.20 · 56 files

compiler/crates/topaz_self_frontend/topaz/emitter/builtins.tpz

Topaz · 16605 B · Original file

1// Runtime-callable static namespace members. Generic schema calls belong to
2// the type-directed surface and never enter this catalog.
3export function staticBuiltin(namespace: string, member: string) -> string {
4 match staticSpec(namespace, member) {
5 case Some(spec) => spec.tag
6 case None => ""
7 }
8}
10export function freeBuiltin(name: string) -> string {
11 match name {
12 case "print" => "Print"
13 case "toInt" => "ToInt"
14 case "toIntRadix" => "ToIntRadix"
15 case "fromCodePoint" => "FromCodePoint"
16 case "toFloat" => "ToFloat"
17 case "input" => "Input"
18 case "map" => "MapFn"
19 case "filter" => "FilterFn"
20 case "reduce" => "ReduceFn"
21 case "open" => "Open"
22 case "assert" => "TestAssert"
23 case _ => ""
24 }
27// Runtime operations a generated std.lispex module names directly: the same
28// module and name pairs as the Rust emitter's `lispex_intrinsic_kind`.
29export function lispexIntrinsic(module: string, name: string) -> string {
30 match "{module}::{name}" {
31 case "std.lispex.rules::__lispexRule" => "LispexRule"
32 case "std.lispex::__lispexValueFromCanonical" => "LispexValueFromCanonical"
33 case "std.lispex::__lispexCanonicalBytes" => "LispexCanonicalBytes"
34 case "std.lispex::__lispexDefaultLimits" => "LispexDefaultLimits"
35 case "std.lispex::__lispexInspectRule" => "LispexInspectRule"
36 case "std.lispex::__lispexEvaluate" => "LispexEvaluate"
37 case "std.lispex::__lispexEvaluateWithEvidence" => "LispexEvaluateWithEvidence"
38 case "std.lispex::__lispexConsumerArtifactFromBytes" => "LispexConsumerArtifactFromBytes"
39 case "std.lispex::__lispexConsumerArtifactBytes" => "LispexConsumerArtifactBytes"
40 case "std.lispex::__lispexPortableCoreBytes" => "LispexPortableCoreBytes"
41 case "std.lispex::__lispexInspectConsumerArtifact" => "LispexInspectConsumerArtifact"
42 case "std.lispex::__lispexVerifyConsumerArtifact" => "LispexVerifyConsumerArtifact"
43 case "std.lispex::__lispexFreshReplay" => "LispexFreshReplay"
44 case _ => ""
45 }
48export record BuiltinSpec { tag: string, leaf: string, params: Array<string>, style: string, defaults: Array<string> }
50export function staticSpec(namespace: string, member: string) -> Option<BuiltinSpec> {
51 match "{namespace}.{member}" {
52 case "Math.sqrt" => Some(BuiltinSpec { tag: "MathSqrt", leaf: "builtin_math_sqrt", params: ["x"], style: "fallible", defaults: [""] })
53 case "Math.abs" => Some(BuiltinSpec { tag: "MathAbs", leaf: "builtin_math_abs", params: ["x"], style: "fallible", defaults: [""] })
54 case "Math.floor" => Some(BuiltinSpec { tag: "MathFloor", leaf: "builtin_math_floor", params: ["x"], style: "fallible", defaults: [""] })
55 case "Math.ceil" => Some(BuiltinSpec { tag: "MathCeil", leaf: "builtin_math_ceil", params: ["x"], style: "fallible", defaults: [""] })
56 case "Math.round" => Some(BuiltinSpec { tag: "MathRound", leaf: "builtin_math_round", params: ["x"], style: "fallible", defaults: [""] })
57 case "Math.sin" => Some(BuiltinSpec { tag: "MathSin", leaf: "builtin_math_sin", params: ["x"], style: "fallible", defaults: [""] })
58 case "Math.cos" => Some(BuiltinSpec { tag: "MathCos", leaf: "builtin_math_cos", params: ["x"], style: "fallible", defaults: [""] })
59 case "Math.tan" => Some(BuiltinSpec { tag: "MathTan", leaf: "builtin_math_tan", params: ["x"], style: "fallible", defaults: [""] })
60 case "Math.isNaN" => Some(BuiltinSpec { tag: "MathIsNaN", leaf: "builtin_math_is_nan", params: ["x"], style: "fallible", defaults: [""] })
61 case "Math.isFinite" => Some(BuiltinSpec { tag: "MathIsFinite", leaf: "builtin_math_is_finite", params: ["x"], style: "fallible", defaults: [""] })
62 case "Math.parseFloat" => Some(BuiltinSpec { tag: "MathParseFloat", leaf: "builtin_math_parse_float", params: ["s"], style: "fallible", defaults: [""] })
63 case "Math.min" => Some(BuiltinSpec { tag: "MathMin", leaf: "builtin_math_min", params: ["a", "b"], style: "fallible", defaults: ["", ""] })
64 case "Math.max" => Some(BuiltinSpec { tag: "MathMax", leaf: "builtin_math_max", params: ["a", "b"], style: "fallible", defaults: ["", ""] })
65 case "Bytes.empty" => Some(BuiltinSpec { tag: "BytesEmpty", leaf: "builtin_bytes_empty", params: [], style: "fallible", defaults: [] })
66 case "Bytes.encodeUtf8" => Some(BuiltinSpec { tag: "BytesEncodeUtf8", leaf: "builtin_bytes_encode_utf8", params: ["s"], style: "fallible", defaults: [""] })
67 case "Bytes.fromArray" => Some(BuiltinSpec { tag: "BytesFromArray", leaf: "builtin_bytes_from_array", params: ["values"], style: "fallible", defaults: [""] })
68 case "Bytes.fromHex" => Some(BuiltinSpec { tag: "BytesFromHex", leaf: "builtin_bytes_from_hex", params: ["s"], style: "fallible", defaults: [""] })
69 case "Bytes.fromBase64" => Some(BuiltinSpec { tag: "BytesFromBase64", leaf: "builtin_bytes_from_base64", params: ["s"], style: "fallible", defaults: [""] })
70 case "Bytes.concat" => Some(BuiltinSpec { tag: "BytesConcat", leaf: "builtin_bytes_concat", params: ["a", "b"], style: "fallible", defaults: ["", ""] })
71 case "Encoding.utf8Encode" => Some(BuiltinSpec { tag: "EncodingUtf8Encode", leaf: "builtin_bytes_encode_utf8", params: ["text"], style: "fallible", defaults: [""] })
72 case "Encoding.utf8Decode" => Some(BuiltinSpec { tag: "EncodingUtf8Decode", leaf: "builtin_bytes_decode_utf8", params: ["bytes"], style: "fallible", defaults: [""] })
73 case "Encoding.hexEncode" => Some(BuiltinSpec { tag: "EncodingHexEncode", leaf: "builtin_bytes_to_hex", params: ["bytes"], style: "fallible", defaults: [""] })
74 case "Encoding.hexDecode" => Some(BuiltinSpec { tag: "EncodingHexDecode", leaf: "builtin_bytes_from_hex", params: ["text"], style: "fallible", defaults: [""] })
75 case "Encoding.base64Encode" => Some(BuiltinSpec { tag: "EncodingBase64Encode", leaf: "builtin_bytes_to_base64", params: ["bytes"], style: "fallible", defaults: [""] })
76 case "Encoding.base64Decode" => Some(BuiltinSpec { tag: "EncodingBase64Decode", leaf: "builtin_bytes_from_base64", params: ["text"], style: "fallible", defaults: [""] })
77 case "Codec.gzipCompress" => Some(BuiltinSpec { tag: "CodecGzipCompress", leaf: "builtin_codec_gzip_compress", params: ["bytes"], style: "fallible", defaults: [""] })
78 case "Codec.gzipDecompress" => Some(BuiltinSpec { tag: "CodecGzipDecompress", leaf: "builtin_codec_gzip_decompress", params: ["bytes"], style: "fallible", defaults: [""] })
79 case "Codec.deflateCompress" => Some(BuiltinSpec { tag: "CodecDeflateCompress", leaf: "builtin_codec_deflate_compress", params: ["bytes"], style: "fallible", defaults: [""] })
80 case "Codec.deflateFixedCompress" => Some(BuiltinSpec { tag: "CodecDeflateFixedCompress", leaf: "builtin_codec_deflate_fixed_compress", params: ["bytes"], style: "fallible", defaults: [""] })
81 case "Codec.zlibFixedCompress" => Some(BuiltinSpec { tag: "CodecZlibFixedCompress", leaf: "builtin_codec_zlib_fixed_compress", params: ["bytes"], style: "fallible", defaults: [""] })
82 case "Codec.reedSolomon255223Protect" => Some(BuiltinSpec { tag: "CodecReedSolomon255223Protect", leaf: "builtin_codec_reed_solomon_255_223_protect", params: ["bytes"], style: "fallible", defaults: [""] })
83 case "Codec.deflateDecompress" => Some(BuiltinSpec { tag: "CodecDeflateDecompress", leaf: "builtin_codec_deflate_decompress", params: ["bytes"], style: "fallible", defaults: [""] })
84 case "Codec.zstdDecompress" => Some(BuiltinSpec { tag: "CodecZstdDecompress", leaf: "builtin_codec_zstd_decompress", params: ["bytes"], style: "fallible", defaults: [""] })
85 case "Codec.zstdCompress" => Some(BuiltinSpec { tag: "CodecZstdCompress", leaf: "builtin_codec_zstd_compress", params: ["bytes", "level"], style: "fallible", defaults: ["", "Value::Int(3)"] })
86 case "Hash.sha256" => Some(BuiltinSpec { tag: "HashSha256", leaf: "builtin_hash_sha256", params: ["data"], style: "fallible", defaults: [""] })
87 case "Hash.sha512" => Some(BuiltinSpec { tag: "HashSha512", leaf: "builtin_hash_sha512", params: ["data"], style: "fallible", defaults: [""] })
88 case "Hash.hmacSha256" => Some(BuiltinSpec { tag: "HashHmacSha256", leaf: "builtin_hash_hmac_sha256", params: ["key", "message"], style: "fallible", defaults: ["", ""] })
89 case "Hash.crc32" => Some(BuiltinSpec { tag: "HashCrc32", leaf: "builtin_hash_crc32", params: ["data"], style: "fallible", defaults: [""] })
90 case "FS.readText" => Some(BuiltinSpec { tag: "FsReadText", leaf: "builtin_fs_read_text", params: ["path"], style: "host", defaults: [""] })
91 case "FS.writeText" => Some(BuiltinSpec { tag: "FsWriteText", leaf: "builtin_fs_write_text", params: ["path", "text"], style: "host", defaults: ["", ""] })
92 case "FS.readBytes" => Some(BuiltinSpec { tag: "FsReadBytes", leaf: "builtin_fs_read_bytes", params: ["path"], style: "host", defaults: [""] })
93 case "FS.writeBytes" => Some(BuiltinSpec { tag: "FsWriteBytes", leaf: "builtin_fs_write_bytes", params: ["path", "bytes"], style: "host", defaults: ["", ""] })
94 case "FS.list" => Some(BuiltinSpec { tag: "FsList", leaf: "builtin_fs_list", params: ["path"], style: "host", defaults: [""] })
95 case "Cli.hasFlag" => Some(BuiltinSpec { tag: "CliHasFlag", leaf: "builtin_cli_has_flag", params: ["args", "name"], style: "fallible", defaults: ["", ""] })
96 case "Cli.option" => Some(BuiltinSpec { tag: "CliOption", leaf: "builtin_cli_option", params: ["args", "name"], style: "fallible", defaults: ["", ""] })
97 case "Cli.options" => Some(BuiltinSpec { tag: "CliOptions", leaf: "builtin_cli_options", params: ["args", "name"], style: "fallible", defaults: ["", ""] })
98 case "Cli.positionals" => Some(BuiltinSpec { tag: "CliPositionals", leaf: "builtin_cli_positionals", params: ["args"], style: "fallible", defaults: [""] })
99 case "Path.from" => Some(BuiltinSpec { tag: "PathFrom", leaf: "builtin_path_from", params: ["text"], style: "fallible", defaults: [""] })
100 case "Path.cwdRelative" => Some(BuiltinSpec { tag: "PathCwdRelative", leaf: "builtin_path_cwd_relative", params: ["text"], style: "fallible", defaults: [""] })
101 case "Path.project" => Some(BuiltinSpec { tag: "PathProject", leaf: "builtin_path_project", params: ["text"], style: "fallible", defaults: [""] })
102 case "Regex.compile" => Some(BuiltinSpec { tag: "RegexCompile", leaf: "builtin_regex_compile", params: ["pattern"], style: "fallible", defaults: [""] })
103 case "CSV.parse" => Some(BuiltinSpec { tag: "CsvParse", leaf: "builtin_csv_parse", params: ["text"], style: "fallible", defaults: [""] })
104 case "CSV.parseWithHeader" => Some(BuiltinSpec { tag: "CsvParseWithHeader", leaf: "builtin_csv_parse_with_header", params: ["text"], style: "fallible", defaults: [""] })
105 case "CSV.stringify" => Some(BuiltinSpec { tag: "CsvStringify", leaf: "builtin_csv_stringify", params: ["rows"], style: "fallible", defaults: [""] })
106 case "CSV.stringifyWithHeader" => Some(BuiltinSpec { tag: "CsvStringifyWithHeader", leaf: "builtin_csv_stringify_with_header", params: ["rows", "columns"], style: "fallible", defaults: ["", ""] })
107 case "TOML.parse" => Some(BuiltinSpec { tag: "TomlParse", leaf: "builtin_toml_parse", params: ["text"], style: "fallible", defaults: [""] })
108 case "TOML.stringify" => Some(BuiltinSpec { tag: "TomlStringify", leaf: "builtin_toml_stringify", params: ["value"], style: "fallible", defaults: [""] })
109 case "TOML.toJson" => Some(BuiltinSpec { tag: "TomlToJson", leaf: "builtin_toml_to_json", params: ["value"], style: "fallible", defaults: [""] })
110 case "TOML.fromJson" => Some(BuiltinSpec { tag: "TomlFromJson", leaf: "builtin_toml_from_json", params: ["value"], style: "fallible", defaults: [""] })
111 case "URL.parse" => Some(BuiltinSpec { tag: "UrlParse", leaf: "builtin_url_parse", params: ["text"], style: "fallible", defaults: [""] })
112 case "Date.fromYmd" => Some(BuiltinSpec { tag: "DateFromYmd", leaf: "builtin_date_from_ymd", params: ["year", "month", "day"], style: "fallible", defaults: ["", "", ""] })
113 case "Date.parseIso" => Some(BuiltinSpec { tag: "DateParseIso", leaf: "builtin_date_parse_iso", params: ["text"], style: "fallible", defaults: [""] })
114 case "BigInt.fromInt" => Some(BuiltinSpec { tag: "BigIntFromInt", leaf: "builtin_bigint_from_int", params: ["n"], style: "fallible", defaults: [""] })
115 case "BigInt.parse" => Some(BuiltinSpec { tag: "BigIntParse", leaf: "builtin_bigint_parse", params: ["text", "radix"], style: "fallible", defaults: ["", ""] })
116 case "Decimal.fromInt" => Some(BuiltinSpec { tag: "DecimalFromInt", leaf: "builtin_decimal_from_int", params: ["n"], style: "fallible", defaults: [""] })
117 case "Decimal.parse" => Some(BuiltinSpec { tag: "DecimalParse", leaf: "builtin_decimal_parse", params: ["text"], style: "fallible", defaults: [""] })
118 case "Array.of" => Some(BuiltinSpec { tag: "ArrayOf", leaf: "Value::array", params: [], style: "variadic", defaults: [] })
119 case "Set.of" => Some(BuiltinSpec { tag: "SetOf", leaf: "builtin_set_of", params: [], style: "variadic-fallible", defaults: [] })
120 case "Map.new" => Some(BuiltinSpec { tag: "MapNew", leaf: "builtin_map_new", params: [], style: "raw", defaults: [] })
121 case "Map.ofEntries" => Some(BuiltinSpec { tag: "MapOfEntries", leaf: "builtin_map_of_entries", params: ["entries"], style: "fallible", defaults: [""] })
122 case "JSON.stringify" => Some(BuiltinSpec { tag: "JsonStringify", leaf: "builtin_json_stringify", params: ["value"], style: "raw", defaults: [""] })
123 case "JSON.parse" => Some(BuiltinSpec { tag: "JsonParse", leaf: "builtin_json_parse", params: ["text"], style: "fallible", defaults: [""] })
124 case "ByteBuffer.allocate" => Some(BuiltinSpec { tag: "ByteBufferAllocate", leaf: "builtin_byte_buffer_allocate", params: ["length", "value"], style: "optional-second", defaults: ["", "Value::Int(0)"] })
125 case "ByteBuffer.fromBytes" => Some(BuiltinSpec { tag: "ByteBufferFromBytes", leaf: "builtin_byte_buffer_from_bytes", params: ["value"], style: "fallible", defaults: [""] })
126 case "Test.assert" => Some(BuiltinSpec { tag: "TestAssert", leaf: "builtin_test_assert", params: ["condition", "message"], style: "fallible", defaults: ["", "Value::str(\"assertion failed\")"] })
127 case "Test.assertEq" => Some(BuiltinSpec { tag: "TestAssertEq", leaf: "builtin_test_assert_eq", params: ["actual", "expected"], style: "fallible", defaults: ["", ""] })
128 case "Test.assertNe" => Some(BuiltinSpec { tag: "TestAssertNe", leaf: "builtin_test_assert_ne", params: ["actual", "expected"], style: "fallible", defaults: ["", ""] })
129 case "Test.assertContains" => Some(BuiltinSpec { tag: "TestAssertContains", leaf: "builtin_test_assert_contains", params: ["text", "needle"], style: "fallible", defaults: ["", ""] })
130 case "Test.assertOk" => Some(BuiltinSpec { tag: "TestAssertOk", leaf: "builtin_test_assert_ok", params: ["value"], style: "fallible", defaults: [""] })
131 case "Test.assertErr" => Some(BuiltinSpec { tag: "TestAssertErr", leaf: "builtin_test_assert_err", params: ["value"], style: "fallible", defaults: [""] })
132 case "Test.assertSome" => Some(BuiltinSpec { tag: "TestAssertSome", leaf: "builtin_test_assert_some", params: ["value"], style: "fallible", defaults: [""] })
133 case "Test.assertNone" => Some(BuiltinSpec { tag: "TestAssertNone", leaf: "builtin_test_assert_none", params: ["value"], style: "fallible", defaults: [""] })
134 case "Test.assertGolden" => Some(BuiltinSpec { tag: "TestAssertGolden", leaf: "builtin_test_assert_golden", params: ["path", "actual"], style: "host", defaults: ["", ""] })
135 case _ => None
136 }
139// Free scalar/host leaves retain their direct ABI; callback builtins and open
140// use the existing callable runtime dispatch.
141export function freeSpec(name: string) -> Option<BuiltinSpec> {
142 if name == "assert" { return staticSpec("Test", "assert") }
143 let leaf = match name {
144 case "print" => "builtin_print"
145 case "input" => "builtin_input"
146 case "toInt" => "builtin_to_int"
147 case "toIntRadix" => "builtin_to_int_radix"
148 case "fromCodePoint" => "builtin_from_code_point"
149 case "toFloat" => "builtin_to_float"
150 case _ => ""
151 }
152 if leaf == "" { return None }
153 let params = match name {
154 case "print" => ["value"]
155 case "input" => []
156 case "toInt" => ["text"]
157 case "toIntRadix" => ["text", "radix"]
158 case _ => ["n"]
159 }
160 let style = if name == "input" { "host-raw" } else if name == "print" { "host" } else { "fallible" }
161 let mut defaults: Array<string> = []
162 for parameter in params { defaults.push("") }
163 Some(BuiltinSpec { tag: freeBuiltin(name), leaf: leaf, params: params, style: style, defaults: defaults })

SHA256 57d7383addc97e8545b9ce2ce3690888c02be4bb1f6f22f982067b57def389bf