%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/builtins/
Upload File :
Create Path :
Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/src/builtins/wasm-strings.tq

// Copyright 2023 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This file defines the builtins that are installed on the WebAssembly.String
// object.

macro Trap(context: Context, error: constexpr MessageTemplate): never {
  runtime::ThrowWasmError(context, SmiConstant(error));
}

transitioning javascript builtin WebAssemblyStringFromWtf16Array(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const array = Cast<WasmArray>(arguments[0]) otherwise goto IllegalCast;
    if (!wasm::IsWord16WasmArrayMap(array.map)) goto IllegalCast;
    const start = ChangeNumberToUint32(ToInteger_Inline(arguments[1]));
    const end = ChangeNumberToUint32(ToInteger_Inline(arguments[2]));
    return wasm::WasmStringNewWtf16Array(array, start, end);
  } label IllegalCast deferred {
    if (arguments[0] == Null) {
      Trap(context, MessageTemplate::kWasmTrapNullDereference);
    }
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

const kWtf8: constexpr int31 generates 'unibrow::Utf8Variant::kWtf8';

transitioning javascript builtin WebAssemblyStringFromWtf8Array(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const array = Cast<WasmArray>(arguments[0]) otherwise goto IllegalCast;
    if (!wasm::IsWord8WasmArrayMap(array.map)) goto IllegalCast;
    const start = ChangeNumberToUint32(ToInteger_Inline(arguments[1]));
    const end = ChangeNumberToUint32(ToInteger_Inline(arguments[2]));
    return wasm::WasmStringNewWtf8Array(start, end, array, SmiConstant(kWtf8));
  } label IllegalCast deferred {
    if (arguments[0] == Null) {
      Trap(context, MessageTemplate::kWasmTrapNullDereference);
    }
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

transitioning javascript builtin WebAssemblyStringToWtf16Array(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const string = Cast<String>(arguments[0]) otherwise goto IllegalCast;
    const array = Cast<WasmArray>(arguments[1]) otherwise goto IllegalCast;
    if (!wasm::IsWord16WasmArrayMap(array.map)) goto IllegalCast;
    const start = ChangeNumberToUint32(ToInteger_Inline(arguments[2]));
    const written = wasm::WasmStringEncodeWtf16Array(string, array, start);
    return Convert<Smi>(written);
  } label IllegalCast deferred {
    if (arguments[1] == Null) {
      Trap(context, MessageTemplate::kWasmTrapNullDereference);
    }
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

transitioning javascript builtin WebAssemblyStringFromCharCode(
    js-implicit context: Context)(...arguments): JSAny {
  const code = ChangeNumberToUint32(ToInteger_Inline(arguments[0]));
  return StringFromSingleCharCode(%RawDownCast<char16>(code & 0xFFFF));
}

transitioning javascript builtin WebAssemblyStringFromCodePoint(
    js-implicit context: Context)(...arguments): JSAny {
  const code = ToInteger_Inline(arguments[0]);
  const codeUint = ChangeNumberToUint32(code);
  if (codeUint <= 0xFFFF) {
    return StringFromSingleCharCode(%RawDownCast<char16>(codeUint));
  }
  return runtime::WasmStringFromCodePoint(context, code);
}

transitioning javascript builtin WebAssemblyStringCodePointAt(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const string = Cast<String>(arguments[0]) otherwise goto IllegalCast;
    const index = ChangeNumberToUint32(ToInteger_Inline(arguments[1]));
    if (index >= Unsigned(string.length)) goto OOB;
    const code: int32 = string::LoadSurrogatePairAt(
        string, string.length_intptr, Signed(Convert<uintptr>(index)),
        UnicodeEncoding::UTF32);
    return Convert<Smi>(code);
  } label IllegalCast deferred {
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  } label OOB deferred {
    Trap(context, MessageTemplate::kWasmTrapStringOffsetOutOfBounds);
  }
}

transitioning javascript builtin WebAssemblyStringCharCodeAt(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const string = Cast<String>(arguments[0]) otherwise goto IllegalCast;
    const index = ChangeNumberToUint32(ToInteger_Inline(arguments[1]));
    if (index >= Unsigned(string.length)) goto OOB;
    const code: char16 = StringCharCodeAt(string, Convert<uintptr>(index));
    return SmiTag(code);
  } label IllegalCast deferred {
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  } label OOB deferred {
    Trap(context, MessageTemplate::kWasmTrapStringOffsetOutOfBounds);
  }
}

transitioning javascript builtin WebAssemblyStringLength(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const string = Cast<String>(arguments[0]) otherwise goto IllegalCast;
    return string.length_smi;
  } label IllegalCast deferred {
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

transitioning javascript builtin WebAssemblyStringConcat(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const first = Cast<String>(arguments[0]) otherwise goto IllegalCast;
    const second = Cast<String>(arguments[1]) otherwise goto IllegalCast;
    return StringAdd_CheckNone(first, second);
  } label IllegalCast deferred {
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

transitioning javascript builtin WebAssemblyStringSubstring(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const string = Cast<String>(arguments[0]) otherwise goto IllegalCast;
    const start = ChangeNumberToUint32(ToInteger_Inline(arguments[1]));
    const end = ChangeNumberToUint32(ToInteger_Inline(arguments[2]));
    return wasm::WasmStringViewWtf16Slice(string, start, end);
  } label IllegalCast deferred {
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

transitioning javascript builtin WebAssemblyStringEquals(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const a = arguments[0];
    const b = arguments[1];
    if (a == Null) {
      typeswitch (b) {
        case (Null): {
          return SmiConstant(1);
        }
        case (String): {
          return SmiConstant(0);
        }
        case (JSAny): {
          goto IllegalCast;
        }
      }
    }
    const left = Cast<String>(a) otherwise goto IllegalCast;
    if (b == Null) return SmiConstant(0);
    const right = Cast<String>(b) otherwise goto IllegalCast;
    if (TaggedEqual(a, b)) return SmiConstant(1);
    if (left.length != right.length) return SmiConstant(0);
    if (wasm::StringEqual(kNoContext, left, right, left.length_intptr) ==
        True) {
      return SmiConstant(1);
    }
    return SmiConstant(0);
  } label IllegalCast deferred {
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

transitioning javascript builtin WebAssemblyStringCompare(
    js-implicit context: Context)(...arguments): JSAny {
  try {
    const first = Cast<String>(arguments[0]) otherwise goto IllegalCast;
    const second = Cast<String>(arguments[1]) otherwise goto IllegalCast;
    return StringCompare(first, second);
  } label IllegalCast deferred {
    Trap(context, MessageTemplate::kWasmTrapIllegalCast);
  }
}

Zerion Mini Shell 1.0